chore: auto release commit (2026-04-06 12:57:26)
Some checks failed
技能自动化发布 / release (push) Failing after 21s
Some checks failed
技能自动化发布 / release (push) Failing after 21s
This commit is contained in:
17
SKILL.md
17
SKILL.md
@@ -50,4 +50,19 @@ python3 {baseDir}/scripts/main.py delete platform <平台> <手机号>
|
|||||||
### 列出某平台所有账号(platform 可为中文名、all 或 全部)
|
### 列出某平台所有账号(platform 可为中文名、all 或 全部)
|
||||||
```bash
|
```bash
|
||||||
python3 {baseDir}/scripts/main.py list all
|
python3 {baseDir}/scripts/main.py list all
|
||||||
python3 {baseDir}/scripts/main.py list 搜狐号
|
python3 {baseDir}/scripts/main.py list 搜狐号
|
||||||
|
```
|
||||||
|
|
||||||
|
### 跨技能:单行 JSON(get / list-json / pick-web / pick-logged-in / set-login-status)
|
||||||
|
```bash
|
||||||
|
python3 {baseDir}/scripts/main.py get <id>
|
||||||
|
python3 {baseDir}/scripts/main.py list-json all --limit 50
|
||||||
|
python3 {baseDir}/scripts/main.py pick-web 搜狐号
|
||||||
|
python3 {baseDir}/scripts/main.py set-login-status <id> 1
|
||||||
|
```
|
||||||
|
约定与字段说明见 `references/INTEGRATION.md`;错误前缀见 `references/ERRORS.md`。
|
||||||
|
|
||||||
|
## 扩展文档(便于 AI 精确调用)
|
||||||
|
|
||||||
|
- **references/**:完整 CLI、平台表、运行时环境、错误码、集成协议 — 见 [references/README.md](references/README.md)。
|
||||||
|
- **assets/**:示例 JSON 与单条账号 Schema — 见 [assets/README.md](assets/README.md)。
|
||||||
6
assets/README.md
Normal file
6
assets/README.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# assets
|
||||||
|
|
||||||
|
- `examples/`:CLI 成功输出形状示例(虚构路径与数据)。
|
||||||
|
- `schemas/`:`get` / `list-json` / `pick-*` 单条对象的轻量 JSON Schema(`additionalProperties: true` 允许扩展字段)。
|
||||||
|
|
||||||
|
详细命令与错误码见仓库根目录 `references/`。
|
||||||
4
assets/examples/README.md
Normal file
4
assets/examples/README.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# 示例 JSON
|
||||||
|
|
||||||
|
- `get-response.json`:`python main.py get <id>` 成功时 **stdout 单行** 对象的形状参考(示例路径为虚构)。
|
||||||
|
- `list-json-array.json`:`list-json` 成功时 **stdout 单行** 数组的形状参考(本文件为多行排版便于阅读)。
|
||||||
12
assets/examples/get-response.json
Normal file
12
assets/examples/get-response.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "搜狐1号",
|
||||||
|
"platform": "sohu",
|
||||||
|
"phone": "13800138000",
|
||||||
|
"profile_dir": "D:/jiangchang-data/_anon/account-manager/profiles/搜狐号/13800138000",
|
||||||
|
"url": "https://mp.sohu.com",
|
||||||
|
"login_status": 1,
|
||||||
|
"last_login_at": "2026-04-01T12:00:00",
|
||||||
|
"created_at": "2026-03-01T10:00:00",
|
||||||
|
"updated_at": "2026-04-01T12:00:00"
|
||||||
|
}
|
||||||
26
assets/examples/list-json-array.json
Normal file
26
assets/examples/list-json-array.json
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "知乎1号",
|
||||||
|
"platform": "zhihu",
|
||||||
|
"phone": "13900001111",
|
||||||
|
"profile_dir": "D:/jiangchang-data/_anon/account-manager/profiles/知乎/13900001111",
|
||||||
|
"url": "https://www.zhihu.com",
|
||||||
|
"login_status": 0,
|
||||||
|
"last_login_at": null,
|
||||||
|
"created_at": "2026-04-02T09:00:00",
|
||||||
|
"updated_at": "2026-04-02T09:00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "搜狐1号",
|
||||||
|
"platform": "sohu",
|
||||||
|
"phone": "13800138000",
|
||||||
|
"profile_dir": "D:/jiangchang-data/_anon/account-manager/profiles/搜狐号/13800138000",
|
||||||
|
"url": "https://mp.sohu.com",
|
||||||
|
"login_status": 1,
|
||||||
|
"last_login_at": "2026-04-01T12:00:00",
|
||||||
|
"created_at": "2026-03-01T10:00:00",
|
||||||
|
"updated_at": "2026-04-01T12:00:00"
|
||||||
|
}
|
||||||
|
]
|
||||||
24
assets/schemas/account-record.schema.json
Normal file
24
assets/schemas/account-record.schema.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://openclaw.local/account-manager/account-record.schema.json",
|
||||||
|
"title": "AccountRecord",
|
||||||
|
"description": "account-manager get / list-json / pick-* 返回的单条账号对象(核心字段;extra_json 合并键不枚举)",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "name", "platform", "phone", "profile_dir", "url", "login_status", "created_at", "updated_at"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "integer" },
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"platform": { "type": "string", "description": "内部英文键,如 sohu、zhihu" },
|
||||||
|
"phone": { "type": "string", "description": "归一后的数字串,可能为空字符串" },
|
||||||
|
"profile_dir": { "type": "string", "description": "Playwright 用户数据目录绝对路径" },
|
||||||
|
"url": { "type": "string", "format": "uri" },
|
||||||
|
"login_status": { "type": "integer", "enum": [0, 1] },
|
||||||
|
"last_login_at": {
|
||||||
|
"type": ["string", "null"],
|
||||||
|
"description": "本地时区 ISO8601 字符串;未登录过为 null"
|
||||||
|
},
|
||||||
|
"created_at": { "type": ["string", "null"] },
|
||||||
|
"updated_at": { "type": ["string", "null"] }
|
||||||
|
},
|
||||||
|
"additionalProperties": true
|
||||||
|
}
|
||||||
116
references/CLI.md
Normal file
116
references/CLI.md
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
# account-manager CLI 参考
|
||||||
|
|
||||||
|
入口:`{skillRoot}/scripts/main.py`(宿主可将 `{baseDir}` 或技能根目录代入)。下文用 `python main.py` 表示在 `scripts/` 目录执行,或写成 `python {skillRoot}/scripts/main.py`。
|
||||||
|
|
||||||
|
## 通用说明
|
||||||
|
|
||||||
|
- **平台参数**:可为 `scripts/util/platforms.py` 中配置的**中文展示名、别名或英文键**(如 `sohu`、`搜狐号`)。详见 [PLATFORMS.md](PLATFORMS.md)。
|
||||||
|
- **数据与路径**:库文件、profile 目录由环境变量决定,网关与本地终端不一致时会「看不到同一份数据」。详见 [RUNTIME.md](RUNTIME.md)。
|
||||||
|
- **机器可读子命令**:`get`、`list-json`、`pick-logged-in`、`pick-web`、`set-login-status` 的成功/失败约定见 [INTEGRATION.md](INTEGRATION.md)。
|
||||||
|
- **错误码前缀**:见 [ERRORS.md](ERRORS.md)。
|
||||||
|
|
||||||
|
> 说明:当前版本 **未实现** `health` / `version` 子命令;与工作区其它技能的统一约定可对齐后另补。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 子命令一览
|
||||||
|
|
||||||
|
### `add` — 添加账号
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py add <平台> <手机号>
|
||||||
|
```
|
||||||
|
|
||||||
|
- 手机号为**中国大陆 11 位**(`1` 开头,第二位 `3–9`),可含空格/分隔符,入库前会归一成数字。
|
||||||
|
- 同一 `platform` 下同一手机号不可重复。
|
||||||
|
|
||||||
|
### `list` — 列出账号(人类可读多行块)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py list [平台|all|全部]
|
||||||
|
```
|
||||||
|
|
||||||
|
- 省略第二参数时等价于 `all`。
|
||||||
|
- 默认最多 **10** 条(按创建时间倒序);内部实现见 `service/account_service.cmd_list`。
|
||||||
|
|
||||||
|
### 简写:`python main.py <平台>` / `python main.py <平台> list`
|
||||||
|
|
||||||
|
- 若第一个参数能解析为平台,则等价于 `list <平台>`。
|
||||||
|
|
||||||
|
### `get` — 按 id 输出**单行 JSON**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py get <id>
|
||||||
|
```
|
||||||
|
|
||||||
|
- 成功:`stdout` **仅一行** JSON 对象(UTF-8)。
|
||||||
|
- 失败:首行 `ERROR:ACCOUNT_NOT_FOUND`,路径提示在 stderr。
|
||||||
|
|
||||||
|
### `list-json` — 列表的**单行 JSON 数组**(跨技能)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py list-json <平台|all|全部> [--limit N]
|
||||||
|
```
|
||||||
|
|
||||||
|
- 成功:`stdout` **仅一行** JSON 数组;元素结构与 `get` 单条一致。
|
||||||
|
- 默认 `limit=200`,实际 clamp 为 `1..500`。
|
||||||
|
- 排序:按 `updated_at` 倒序。
|
||||||
|
|
||||||
|
### `pick-logged-in` — 该平台**已登录**的一条账号(单行 JSON)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py pick-logged-in <平台>
|
||||||
|
```
|
||||||
|
|
||||||
|
- 筛选:`login_status = 1`,按 `last_login_at` 优先。
|
||||||
|
- 失败:首行以 `ERROR:` 开头(**勿当 JSON 解析**)。
|
||||||
|
|
||||||
|
### `pick-web` — 网页自动化候选账号(单行 JSON)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py pick-web <平台>
|
||||||
|
```
|
||||||
|
|
||||||
|
- 优先同 `pick-logged-in`;若无已登录,则取该平台 `updated_at` 最新一条。
|
||||||
|
- 失败:首行 `ERROR:`。
|
||||||
|
|
||||||
|
### `set-login-status` — 回写登录态(跨技能)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py set-login-status <id> <0|1>
|
||||||
|
```
|
||||||
|
|
||||||
|
- 成功:`stdout` 首行 `OK:SET_LOGIN_STATUS` 或 `OK:CLEARED_LOGIN_STATUS`,退出码 `0`。
|
||||||
|
- 失败:`stdout` 首行 `ERROR:...`,退出码 `1`。
|
||||||
|
|
||||||
|
### `open` — 仅打开浏览器(**不写库**)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py open <id>
|
||||||
|
```
|
||||||
|
|
||||||
|
- 需本机 Chrome/Edge + Playwright;详见运行环境说明。
|
||||||
|
|
||||||
|
### `login` — 打开浏览器并**自动检测登录**,写回 `login_status`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py login <id>
|
||||||
|
```
|
||||||
|
|
||||||
|
- 依赖 Playwright;超时与轮询间隔等见 [RUNTIME.md](RUNTIME.md)。
|
||||||
|
|
||||||
|
### `delete` — 删除库记录并尽量删除 profile 目录
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python main.py delete id <id>
|
||||||
|
python main.py delete platform <平台>
|
||||||
|
python main.py delete platform <平台> <手机号>
|
||||||
|
```
|
||||||
|
|
||||||
|
- 第二段必须为 `id` 或 `platform`(小写不敏感)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 无参数 / 未知子命令
|
||||||
|
|
||||||
|
- 无参数或无法解析:打印用法概览;未知子命令时首行 `ERROR:CLI_UNKNOWN_OR_BAD_ARGS`,退出码 `1`。
|
||||||
56
references/ERRORS.md
Normal file
56
references/ERRORS.md
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
# 终端前缀约定(account-manager)
|
||||||
|
|
||||||
|
约定:**机器解析只依赖 `stdout` 首行**时,应先判断首行是否以 `ERROR:` 或 `OK:` 开头;多行说明可忽略或仅作展示。
|
||||||
|
|
||||||
|
## `OK:`(成功标记)
|
||||||
|
|
||||||
|
| 首行 | 场景 |
|
||||||
|
|------|------|
|
||||||
|
| `OK:SET_LOGIN_STATUS` | `set-login-status <id> 1` 成功 |
|
||||||
|
| `OK:CLEARED_LOGIN_STATUS` | `set-login-status <id> 0` 成功 |
|
||||||
|
|
||||||
|
## `ERROR:` — CLI 参数 / 路由
|
||||||
|
|
||||||
|
| 前缀 | 含义 |
|
||||||
|
|------|------|
|
||||||
|
| `ERROR:CLI_ADD_MISSING_ARGS` | `add` 参数不足 |
|
||||||
|
| `ERROR:CLI_GET_MISSING_ID` | `get` 缺少 id |
|
||||||
|
| `ERROR:CLI_OPEN_MISSING_ID` | `open` 缺少 id |
|
||||||
|
| `ERROR:CLI_LOGIN_MISSING_ID` | `login` 缺少 id |
|
||||||
|
| `ERROR:CLI_DELETE_MISSING_ARGS` | `delete` 参数不足 |
|
||||||
|
| `ERROR:CLI_DELETE_BAD_MODE` | `delete` 第二段不是 `id`/`platform` |
|
||||||
|
| `ERROR:CLI_SET_LOGIN_STATUS_MISSING_ARGS` | `set-login-status` 参数不足 |
|
||||||
|
| `ERROR:CLI_LIST_JSON_MISSING_PLATFORM` | `list-json` 缺少平台参数 |
|
||||||
|
| `ERROR:CLI_PICK_LOGGED_IN_MISSING_ARGS` | `pick-logged-in` 缺少平台 |
|
||||||
|
| `ERROR:CLI_PICK_WEB_MISSING_ARGS` | `pick-web` 缺少平台 |
|
||||||
|
| `ERROR:CLI_UNKNOWN_OR_BAD_ARGS` | 无法识别的子命令或参数组合 |
|
||||||
|
|
||||||
|
## `ERROR:` — 业务与数据
|
||||||
|
|
||||||
|
| 前缀 | 含义 |
|
||||||
|
|------|------|
|
||||||
|
| `ERROR:INVALID_PLATFORM_LIST` | `list` 的平台名无法识别 |
|
||||||
|
| `ERROR:INVALID_PLATFORM_LIST_JSON` | `list-json` 的平台名无法识别 |
|
||||||
|
| `ERROR:INVALID_PLATFORM` | 其它子命令中平台无法识别 |
|
||||||
|
| `ERROR:NO_ACCOUNTS_FOUND` | 列表无结果(或 `delete platform` 下无记录) |
|
||||||
|
| `ERROR:ACCOUNT_NOT_FOUND` | 指定 id/记录不存在 |
|
||||||
|
| `ERROR:PHONE_REQUIRED` | 缺少手机号 |
|
||||||
|
| `ERROR:PHONE_INVALID` | 手机号格式不符合大陆 11 位规则 |
|
||||||
|
| `ERROR:DUPLICATE_PHONE_PLATFORM` | 同平台下山手机号已存在 |
|
||||||
|
| `ERROR:DELETE_INVALID_ID` | 删除 id 非法 |
|
||||||
|
| `ERROR:NO_LOGGED_IN_ACCOUNT` | `pick-logged-in` 无 `login_status=1` 的账号 |
|
||||||
|
| `ERROR:NO_ACCOUNT` | `pick-web` 该平台无任何记录 |
|
||||||
|
| `ERROR:INVALID_ACCOUNT_ID` | `set-login-status` 的 id 非数字 |
|
||||||
|
| `ERROR:INVALID_STATUS` | `set-login-status` 状态不是 0/1 |
|
||||||
|
|
||||||
|
## `ERROR:` — 浏览器 / 环境
|
||||||
|
|
||||||
|
| 前缀 | 含义 |
|
||||||
|
|------|------|
|
||||||
|
| `ERROR:需要 playwright:pip install playwright && playwright install chromium` | 未安装 Playwright 或浏览器未安装 |
|
||||||
|
| `ERROR:PROFILE_DIR_MISSING` | 账号记录中 `profile_dir` 为空 |
|
||||||
|
|
||||||
|
## 非前缀输出
|
||||||
|
|
||||||
|
- **成功添加账号**、**删除成功**等可能包含 `✅` 等人类可读行,**不宜**作为稳定协议解析。
|
||||||
|
- **`get` / `list-json` / `pick-*` 成功**:`stdout` 应为**单行 JSON**(失败时首行 `ERROR:`,勿当 JSON)。
|
||||||
39
references/INTEGRATION.md
Normal file
39
references/INTEGRATION.md
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# 与其它 Skill 集成(account-manager)
|
||||||
|
|
||||||
|
## 推荐调用方式
|
||||||
|
|
||||||
|
使用 **`subprocess`** 调用技能根目录下的 `scripts/main.py`,工作目录可为技能根或 `scripts/`(只要命令中的 `python` 与路径一致)。宿主注入的 **`JIANGCHANG_DATA_ROOT` / `JIANGCHANG_USER_ID`** 必须与最终用户会话一致,否则读写到错误库。
|
||||||
|
|
||||||
|
## 机器可读命令摘要
|
||||||
|
|
||||||
|
| 目的 | 命令 | 成功时 stdout |
|
||||||
|
|------|------|----------------|
|
||||||
|
| 取单条账号 JSON | `get <id>` | 单行 JSON 对象 |
|
||||||
|
| 批量账号 JSON | `list-json <平台或all> [--limit N]` | 单行 JSON 数组 |
|
||||||
|
| 只要已登录 | `pick-logged-in <平台>` | 单行 JSON 对象 |
|
||||||
|
| 自动化候选(优先已登录) | `pick-web <平台>` | 单行 JSON 对象 |
|
||||||
|
| 回写登录态 | `set-login-status <id> <0或1>` | 首行 `OK:...` |
|
||||||
|
|
||||||
|
## 解析协议(强建议)
|
||||||
|
|
||||||
|
1. 读取子进程 **stdout** 全文或首行。
|
||||||
|
2. 若首行以 **`ERROR:`** 开头 → 失败,不要 `json.loads` 整段 stdout。
|
||||||
|
3. 若首行以 **`OK:`** 开头 → `set-login-status` 成功(可再检查退出码 `0`)。
|
||||||
|
4. **`get` / `list-json` / `pick-logged-in` / `pick-web`**:成功时应对**第一行**做 `json.loads`;后续行应不存在,若有则视为非协议内容。
|
||||||
|
|
||||||
|
## JSON 对象字段(与 `get` 一致)
|
||||||
|
|
||||||
|
典型字段见仓库 `assets/examples/get-response.json` 与 `assets/schemas/account-record.schema.json`。
|
||||||
|
|
||||||
|
常见键名包括:`id`, `name`, `platform`, `phone`, `profile_dir`, `url`, `login_status`, `last_login_at`, `created_at`, `updated_at`;`extra_json` 列中的扁平扩展可能并入同一对象。
|
||||||
|
|
||||||
|
## Publisher / 自动化流水线示例
|
||||||
|
|
||||||
|
1. `pick-web 搜狐号`(或目标平台)→ 解析 JSON → 取 `id`、`profile_dir`、`url`。
|
||||||
|
2. 若需确认已登录:检查 `login_status == 1`,否则可引导用户执行 `login <id>` 或先 `open <id>` 人工登录。
|
||||||
|
3. 外部脚本在确认登录后,可调用 `set-login-status <id> 1` 保持与库一致(若你们自有检测逻辑)。
|
||||||
|
|
||||||
|
## 退出码
|
||||||
|
|
||||||
|
- **`set-login-status`**:失败时进程以 **`1`** 退出(见实现)。
|
||||||
|
- 其它子命令多数为 **`0`**;若需严格编排,请以 **stdout 首行前缀** 与 **JSON 可解析性** 为准,不要仅依赖退出码。
|
||||||
23
references/PLATFORMS.md
Normal file
23
references/PLATFORMS.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# 平台与别名(account-manager)
|
||||||
|
|
||||||
|
**权威来源**:`scripts/util/platforms.py` 中的 `PLATFORMS`。下表便于 AI/文档阅读;若与代码不一致,**以代码为准**。
|
||||||
|
|
||||||
|
入库字段 `accounts.platform` 使用下表 **英文键**(小写)。CLI 与用户话术可使用 **展示名** 或 **别名**。
|
||||||
|
|
||||||
|
| 英文键 (`platform`) | 展示名 (`label`) | 默认账号名前缀 (`prefix`) | 别名 (`aliases`) | 默认 URL |
|
||||||
|
|---------------------|------------------|---------------------------|------------------|----------|
|
||||||
|
| `sohu` | 搜狐号 | 搜狐 | 搜狐 | https://mp.sohu.com |
|
||||||
|
| `toutiao` | 头条号 | 头条 | 头条 | https://mp.toutiao.com/ |
|
||||||
|
| `zhihu` | 知乎 | (同 label) | 知乎号 | https://www.zhihu.com |
|
||||||
|
| `wechat` | 微信公众号 | 微信 | 公众号、微信 | https://mp.weixin.qq.com |
|
||||||
|
| `kimi` | Kimi | (同 label) | 月之暗面 | https://kimi.moonshot.cn |
|
||||||
|
| `deepseek` | DeepSeek | (同 label) | — | https://chat.deepseek.com |
|
||||||
|
| `doubao` | 豆包 | (同 label) | — | https://www.doubao.com |
|
||||||
|
| `qianwen` | 通义千问 | 通义 | 通义、千问 | https://tongyi.aliyun.com |
|
||||||
|
| `yiyan` | 文心一言 | 文心 | 文心、一言 | https://yiyan.baidu.com |
|
||||||
|
| `yuanbao` | 腾讯元宝 | 元宝 | 元宝 | https://yuanbao.tencent.com |
|
||||||
|
|
||||||
|
## 解析规则(摘要)
|
||||||
|
|
||||||
|
- 英文键本身、各 `label`、各 `aliases` 条目(及小写形式)均可解析到对应键。
|
||||||
|
- 无法识别时,相关子命令会输出 `ERROR:INVALID_PLATFORM` 或 `ERROR:INVALID_PLATFORM_LIST` / `INVALID_PLATFORM_LIST_JSON` 等,并附带「支持的平台」提示。
|
||||||
13
references/README.md
Normal file
13
references/README.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# references(account-manager)
|
||||||
|
|
||||||
|
供 Agent 按需加载的说明文档(与 `SKILL.md` 配合,渐进式披露)。
|
||||||
|
|
||||||
|
| 文件 | 内容 |
|
||||||
|
|------|------|
|
||||||
|
| [CLI.md](CLI.md) | 子命令、参数、行为说明 |
|
||||||
|
| [PLATFORMS.md](PLATFORMS.md) | 平台英文键、中文名、别名 |
|
||||||
|
| [RUNTIME.md](RUNTIME.md) | 环境变量、数据路径、日志、登录调参 |
|
||||||
|
| [ERRORS.md](ERRORS.md) | `ERROR:` / `OK:` 前缀一览 |
|
||||||
|
| [INTEGRATION.md](INTEGRATION.md) | 跨 Skill 调用与 JSON 解析约定 |
|
||||||
|
|
||||||
|
示例 JSON 与 Schema 见仓库 `assets/`。
|
||||||
54
references/RUNTIME.md
Normal file
54
references/RUNTIME.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
# 运行环境与数据路径(account-manager)
|
||||||
|
|
||||||
|
## 数据落盘位置(当前实现)
|
||||||
|
|
||||||
|
代码见 `scripts/util/runtime_paths.py`、`scripts/util/constants.py`。
|
||||||
|
|
||||||
|
- **数据根目录** `get_data_root()`:优先环境变量 **`JIANGCHANG_DATA_ROOT`**;未设置时 Windows 默认 `D:\jiangchang-data`,其它系统默认 `~/.jiangchang-data`。
|
||||||
|
- **用户/工作空间 id** `get_user_id()`:优先 **`JIANGCHANG_USER_ID`**;未设置时为 **`_anon`**。
|
||||||
|
- **技能数据目录**:`{数据根}/{用户id}/account-manager/`
|
||||||
|
- **SQLite**:`account-manager.db`
|
||||||
|
- **Profile**:`profiles/<平台展示名>/<手机号>/`(由 `get_default_profile_dir` 生成)
|
||||||
|
- **日志目录**:`logs/`(见下)
|
||||||
|
|
||||||
|
> OpenClaw 工作区文档中的 **`CLAW_*`** 变量:本技能**当前仍以 `JIANGCHANG_*` 为准**读取数据根与用户 id;若宿主已统一注入 `CLAW_*`,需在代码层做别名兼容(未做前请只依赖本文列出的变量)。
|
||||||
|
|
||||||
|
## 调试:为什么「list 没数据」
|
||||||
|
|
||||||
|
- 本地终端未设置 `JIANGCHANG_DATA_ROOT` / `JIANGCHANG_USER_ID` 时,会落到 **默认盘路径** 与 **`_anon`**,与网关中运行的实例**不是同一个库文件**。
|
||||||
|
- 设置 **`JIANGCHANG_ACCOUNT_DEBUG_PATHS=1`**(`1`/`true`/`yes`/`on`)后,每次 CLI 子命令前会在 **stderr** 打印实际使用的根目录、用户 id 与数据库路径(由 `_maybe_print_paths_debug_cli` 输出)。
|
||||||
|
|
||||||
|
## 本地 CLI 开发注入(慎用)
|
||||||
|
|
||||||
|
`util/constants.py` 中 **`_apply_cli_local_dev_env()`** 仅在 CLI 入口调用:
|
||||||
|
|
||||||
|
- 若开启本地开发开关(代码内 `_ACCOUNT_MANAGER_CLI_LOCAL_DEV` 或环境变量 **`JIANGCHANG_ACCOUNT_CLI_LOCAL_DEV=1`**),且当前未设置 `JIANGCHANG_DATA_ROOT` / `JIANGCHANG_USER_ID`,会注入代码内配置的默认路径与用户 id。
|
||||||
|
- **发版前务必关闭**,避免个人路径进入制品。详见该文件内注释。
|
||||||
|
|
||||||
|
## 日志
|
||||||
|
|
||||||
|
`scripts/util/logging_config.py`:
|
||||||
|
|
||||||
|
| 变量 | 作用 |
|
||||||
|
|------|------|
|
||||||
|
| `JIANGCHANG_LOG_LEVEL` | 日志级别,默认 `INFO` |
|
||||||
|
| `JIANGCHANG_LOG_TO_STDERR` | 设为 `1`/`true` 等时,WARNING 及以上同步 stderr |
|
||||||
|
| `JIANGCHANG_ACCOUNT_MANAGER_LOG_FILE` | 覆盖日志文件绝对路径(默认 `{技能数据目录}/logs/account-manager.log`) |
|
||||||
|
|
||||||
|
## 登录 / 浏览器子进程(login)
|
||||||
|
|
||||||
|
`service/browser_service.py` 与子进程 `service/login_child_runner.py`:
|
||||||
|
|
||||||
|
| 变量 | 作用 |
|
||||||
|
|------|------|
|
||||||
|
| `JIANGCHANG_LOGIN_TIMEOUT_SECONDS` | 登录检测最长秒数,默认 `300`,不少于 `60` |
|
||||||
|
| `JIANGCHANG_LOGIN_POLL_INTERVAL_SECONDS` | DOM 轮询间隔,默认 `1.5`,限制在 `0.5..10` |
|
||||||
|
| `JIANGCHANG_LOGIN_DOM_GRACE_SECONDS` | 打开 URL 后等待再检测,默认 `4`,减轻跳转误判 |
|
||||||
|
|
||||||
|
依赖:**本机已安装 Chrome 或 Edge**;Python 环境需 **`playwright`** 且已执行 `playwright install chromium`(错误信息见 CLI 输出)。
|
||||||
|
|
||||||
|
## 常见问题(简要)
|
||||||
|
|
||||||
|
- **`ERROR:需要 playwright`**:安装 `playwright` 并安装浏览器内核。
|
||||||
|
- **`ERROR:PROFILE_DIR_MISSING`**:库中该账号 `profile_dir` 为空,需检查数据或重新添加账号流程。
|
||||||
|
- **登录检测一直失败**:关闭占用同一 profile 目录的其它浏览器;可调高超时与环境变量;查看技能日志文件。
|
||||||
Reference in New Issue
Block a user