sino-bc-cli 1.8.0 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: sino-bc-biz-line
3
+ description: >
4
+ Use when 查询或操作 BeyondClick 业务线数据:投放渠道、投放品类、
5
+ 业务线列表/详情/策略与表现、Top 业务线、周策略增删改查、
6
+ 红绿灯、客户满意度、消耗、ROAS;或用户提到 biz-line、sino-opti-hive。
7
+ metadata:
8
+ requires:
9
+ bins: ["sino-bc-cli"]
10
+ cliHelp: "sino-bc-cli biz-line --help"
11
+ ---
12
+
13
+ # biz-line
14
+
15
+ **开始前 MUST 先用 Read 工具读取 [`../sino-bc-shared/SKILL.md`](../sino-bc-shared/SKILL.md)**(配置、信封、确认门、禁止拼 HTTP)。
16
+
17
+ ## When to Use
18
+
19
+ - 查投放渠道、投放行业/品类、业务线主数据、周策略与表现、行业 Top
20
+ - 新建/编辑/删除业务线或周策略(须先确认环境和写操作意图)
21
+ - 用户点名 `biz-line`、`/api-list`、sino-opti-hive
22
+
23
+ 不要用本技能处理:配置/MCP(走 shared)、本仓库开发与发版。
24
+
25
+ ## Agent 流程
26
+
27
+ 1. **优先 Shortcut**:`sino-bc-cli biz-line +<shortcut>`。WHEN 见仓库 `affordance/biz-line.md` 或 `sino-bc-cli biz-line --help`。
28
+ 2. **没有 Shortcut 再点名**:`sino-bc-cli biz-line api <name> --data '<json>'`。长尾 name → [`references/long-tail-api.md`](references/long-tail-api.md)。
29
+ 3. 组参前不确定字段口径就读本地文档。全局安装:`$(npm root -g)/sino-bc-cli/dist/api-doc/`;本仓库:`src/api-doc/`。`sino-bc-cli /api-list <name>` 打开对应 markdown。
30
+ 4. `--name` 命中 0 条或多条都失败,按 hint 收窄或改用 `--id`,不要擅自选第一条。
31
+ 5. 回复用业务语言摘要;文档路径写成 Markdown 链接。
32
+
33
+ ```bash
34
+ sino-bc-cli biz-line +list --name 用户给出的业务线名
35
+ sino-bc-cli biz-line api biz-line-strategy-compare \
36
+ --data '{"bizLineId":123,"currentId":2,"prevId":1}'
37
+ sino-bc-cli biz-line +status --id 123 --status 3 --dry-run
38
+ sino-bc-cli biz-line +status --id 123 --status 3 --yes
39
+ ```
40
+
41
+ CLI 未安装:`npm i sino-bc-cli@latest -g`(需 Node.js >= 24)。技能未出现:`sino-bc-cli /init`。
42
+
43
+ ## 意图 → Shortcut
44
+
45
+ | 用户在问 | 命令 | 注意 |
46
+ | --- | --- | --- |
47
+ | 有哪些投放渠道 | `biz-line +channels` | `code` = 业务线里的 `mediaChannelId` |
48
+ | 投放行业 / 品类树 | `biz-line +categories` | 一级行业(1=APP / 2=ECBR / 3=游戏),二级=品类 |
49
+ | 业务线有哪些 / 按名或渠道筛 | `biz-line +list --name / --id / --channel / --industry / --category` | 不传条件 = 全部;`--channel` 等接受 ID 或名称 |
50
+ | 某条业务线的周策略和表现 | `biz-line +strategies --name` 或 `--id` | `--name` 命中 0 条或多条都会失败 |
51
+ | 行业/品类里表现最好的业务线 | `biz-line +top --industry` 或 `--category` | 至少传一个;同时传则只按行业 |
52
+ | 新建 / 编辑业务线 | `+save --data` / `+update --data` | ⚠️ 需 `--yes` |
53
+ | 切换业务线状态 | `+status --id --status` | ⚠️;枚举见 [`references/enums.md`](references/enums.md) |
54
+ | 删除业务线 | `+delete --id` | ⚠️ |
55
+ | 新建 / 编辑 / 删除策略 | `+strategy-save` / `+strategy-update` / `+strategy-delete` | ⚠️;编辑带 `version` 乐观锁 |
56
+
57
+ ## Common Mistakes
58
+
59
+ | 错误 | 正确做法 |
60
+ | --- | --- |
61
+ | 自己用 curl 拼网关请求 | 走 `biz-line +<shortcut>`,没有就用 `biz-line api <name>` |
62
+ | 执行已下线的 `/bc-api` | 这条只会打印迁移提示并非 0 退出 |
63
+ | `--name` 命中多条时随便选一条 | 按 hint 里的候选让用户确认,或改用 `--id` |
64
+ | 把 `exprot-all` 改成 `export-all` | 按服务端拼写调用 |
@@ -0,0 +1,7 @@
1
+ # 业务线枚举口径
2
+
3
+ - 红绿灯:`1` / `6` 绿,`2` / `5` 黄,`3` / `4` 红。
4
+ - 客户满意度:`1` 满意,`2` 不满意。
5
+ - 业务线状态:`1` 进行中 / `2` 已完成 / `3` 已暂停。
6
+
7
+ 字段含义与请求体形状以 `src/api-doc/biz-line-query.md`、`biz-line-strategy.md` 为准。
@@ -0,0 +1,16 @@
1
+ # 长尾接口(无 Shortcut)
2
+
3
+ 用 `sino-bc-cli biz-line api <name> --data '<json>'`。`<name>` 取自 `/api-list`,不要发明新 name。
4
+
5
+ | 用户在问 | name | 注意 |
6
+ | --- | --- | --- |
7
+ | 业务线分页列表 | `biz-line-list` | |
8
+ | 业务线详情 | `biz-line-detail` | `{ "id": <bizLineId> }` |
9
+ | 导出业务线列表 | `biz-line-list-export` | `result` 为文件 URL |
10
+ | 周策略分页 / 详情 / 周期列表 | `biz-line-strategy-list` / `biz-line-strategy-detail` / `biz-line-strategy-period-list` | |
11
+ | 新建策略前看上期摘要 | `biz-line-strategy-preview-info` | 周期为自然周 周一~周日 |
12
+ | 两期策略对比 | `biz-line-strategy-compare` | |
13
+ | 策略周期消耗 | `biz-line-strategy-spend` | |
14
+ | 导出该业务线全部策略 | `biz-line-strategy-export-all` | 路径拼写是 `exprot-all`,不要改成 export |
15
+
16
+ 描述含 ⚠️ 的 name 同样走确认门。请求体按用户条件组装,禁止原样提交文档示例业务线 ID。
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: sino-bc-shared
3
+ description: >
4
+ Use for sino-bc-cli 配置、鉴权头、JSON 信封、写操作确认门、禁止拼 HTTP、
5
+ 以及 iCenter / mcp.json / /mcp-reload / /init / /get-config / /set-config。
6
+ 其他 sino-bc-* 技能执行前先读本文件。
7
+ metadata:
8
+ requires:
9
+ bins: ["sino-bc-cli"]
10
+ ---
11
+
12
+ # sino-bc-cli 共享规则
13
+
14
+ 业务线意图走 [`../sino-bc-biz-line/SKILL.md`](../sino-bc-biz-line/SKILL.md)。本文件只管横切约定。
15
+
16
+ ## 通用准则
17
+
18
+ 1. **直接用本 CLI 执行**,不要自己拼网关 HTTP。地址、`/sino-opti-hive`、`Authorization`、`X-GATEWAY-TYPE: A2C-CLI` 都由 CLI 注入。
19
+ 2. **判断成功看 `ok == true` 或退出码 0**,不要看上游 `code`。信封与分流 → [`references/output-contract.md`](references/output-contract.md)。
20
+ 3. **退出码 10 是写操作待确认,不是错误**。停下向用户确认环境和意图,得到同意后在原命令末尾追加 `--yes`。**不要自行补 `--yes`**。→ [`references/write-approval.md`](references/write-approval.md)。
21
+ 4. **完整 API_KEY 不要回显。**
22
+ 5. iCenter 不走本 CLI 接口清单:用户编辑 `~/.sino-bc-cli/mcp.json` 后执行 `/mcp-reload`。→ [`references/mcp-reload.md`](references/mcp-reload.md)。
23
+
24
+ ## 环境与配置
25
+
26
+ 环境、`API_KEY` 在 `~/.sino-bc-cli/config.json`,由 `/init` 创建、`/set-config` 修改。默认环境 `prod`。详情 → [`references/config-and-env.md`](references/config-and-env.md)。
27
+
28
+ ```bash
29
+ sino-bc-cli /init
30
+ sino-bc-cli /get-config --json
31
+ sino-bc-cli /set-config env prod
32
+ sino-bc-cli /mcp-reload
33
+ ```
34
+
35
+ 升级 CLI 后重新执行 `/init`,以刷新本机技能树。
36
+
37
+ ## 不要用本技能处理
38
+
39
+ 本仓库源码开发、扩展命令、npm 发版(见仓库 `README.md` / `ReleaseSteps.md`)。
@@ -0,0 +1,12 @@
1
+ # 环境与变量配置
2
+
3
+ | 项 | 规则 |
4
+ | --- | --- |
5
+ | 环境 | `test` / `pre` / `prod`,取自 `~/.sino-bc-cli/config.json`,默认 `prod` |
6
+ | 网关 | `https://test-agent.beyondclick.com`(当前三环境同一地址;由 CLI 请求,不直连服务地址) |
7
+ | 业务线前缀 | `/sino-opti-hive` |
8
+ | 鉴权 | `Authorization: Bearer <API_KEY>`;由 CLI 注入 |
9
+ | 来源头 | `X-GATEWAY-TYPE: A2C-CLI`(固定写入,不开放配置) |
10
+
11
+ `/get-config --json` 查看生效取值(密钥默认打码,加 `--show-secret` 才是明文)。
12
+ 修改:`sino-bc-cli /set-config env test` 或 `/set-config api-key <值>`。
@@ -0,0 +1,9 @@
1
+ # MCP 配置分发
2
+
3
+ iCenter 及其他 MCP **不走**本 CLI 接口清单。
4
+
5
+ 1. 用户把 Server 写进 `~/.sino-bc-cli/mcp.json`(与 Cursor 同结构)。
6
+ 2. 执行 `sino-bc-cli /mcp-reload`(`/init` 结束时也会跑一次)。
7
+ 3. CLI 同步到 Cursor / Codex / Claude / VS Code,并对带 `url` 的 Server 做 initialize 握手。
8
+
9
+ 改了 `mcp.json` 却不重启,各 IDE 不会看到新 Server。查 iCenter 广告策略时用已配置的 MCP 工具,不要改走 `biz-line`。
@@ -0,0 +1,20 @@
1
+ # JSON 输出契约
2
+
3
+ 非 TTY 默认 `--format json`;TTY 默认 `table`。可用 `--format json|table` 覆盖。
4
+
5
+ 成功写 **stdout**,退出码 `0`:
6
+
7
+ ```json
8
+ { "ok": true, "env": "prod", "command": "biz-line +list", "data": [], "meta": { "count": 0 } }
9
+ ```
10
+
11
+ 失败写 **stderr**,退出码非 0:
12
+
13
+ ```json
14
+ { "ok": false, "env": "prod", "command": "biz-line +delete", "error": { "type": "validation", "message": "...", "hint": "..." } }
15
+ ```
16
+
17
+ - `data` 只放上游 `result`。判断成功只看 `ok` 或进程退出码,**不要**用上游 `code == 0`。
18
+ - `error.type`:`validation` / `config` / `api` / `confirmation_required`。
19
+ - `confirmation_required` 的退出码是 `10`,不是失败。
20
+ - 提示与进度走 stderr,避免污染信封。
@@ -0,0 +1,18 @@
1
+ # 写操作确认门
2
+
3
+ 描述含 ⚠️ 的 Shortcut 与 `biz-line api <name>` 都走同一道门。
4
+
5
+ ```text
6
+ --dry-run 只打印 method / url / body,不发请求
7
+ 无 --yes TTY:展示 env + 动作 + 关键参数,交互确认
8
+ 非 TTY:exit 10,error.type = confirmation_required
9
+ --yes 直接发起请求
10
+ ```
11
+
12
+ Agent 收到退出码 `10` 时:
13
+
14
+ 1. 停下,向用户展示环境、动作和关键参数。
15
+ 2. 取得**用户显式同意**后,把 `--yes` **追加到原命令末尾**再执行。
16
+ 3. **不要**自行补 `--yes` 绕过。
17
+
18
+ 禁止把文档示例里的 `bizLineId: 1251` 当真实数据提交。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sino-bc-cli",
3
- "version": "1.8.0",
3
+ "version": "1.8.2",
4
4
  "description": "BeyondClick CLI - 命令行工具集合,提供快捷访问 BeyondClick 平台的命令行接口",
5
5
  "preferGlobal": true,
6
6
  "bin": {
@@ -21,6 +21,7 @@
21
21
  "build": "node --experimental-strip-types scripts/build.ts",
22
22
  "build:no-mangle": "node --experimental-strip-types scripts/build.ts --no-mangle",
23
23
  "typecheck": "tsc --noEmit",
24
+ "test": "node --require ts-node/register --test \"tests/**/*.test.ts\"",
24
25
  "dev": "ts-node src/index.ts",
25
26
  "start": "node dist/index.js",
26
27
  "clean": "rimraf dist",