Skip to content

maojiebc/majia-guanyuan

Repository files navigation

majia-guanyuan · 观远 BI 通用 Agent Skill

工具无关的观远 BI / Guandata Agent Skill — 数据查询 / ETL 治理与写入 / 自定义图表开发,全栈三合一。 兼容 Claude Code · OpenClaw · Codex · Hermes (gbrain) 等所有支持 SKILL.md 的 agent 工具。 60+ 张 ETL 创建/重构/修复 + 治理扫描 + 自定义图表注入排障的真实战场记录。

Skill Version GitHub Release skills.sh License: MIT Claude Code OpenClaw Codex Hermes WorkBuddy Qoder BI

English README · 中文文档 ↓


概述

本 Skill 整合了观远 BI 的三大类操作能力到一份 Claude Code Skill 里,让 AI 既能日常查数据出报表,又能做严肃的 ETL 治理与写入,还能处理自定义图表的前端注入排障。

majia-guanyuan v2.1.14 功能图:三件套生态(guancli / guanvis-skill / majia-guanyuan)+ Part A 取数 + Part B ETL 全栈 + Part C 前端注入 / Part C-12 HTML 应用化看板 + Part D V7 发布流水线(v7 草稿/release + customChart autoBootstrap + 移动端 phoneLayout ZIP inject)+ Part E SuperApp 开放应用开发流水线(guancli app publish + form 建表反向工程 + LLM 中转 ILLEGAL_JSON_RES 三路径解析)+ AI-native ADS 设计方法论(哲学层文档:客户上 LLM/SuperApp 前判断治理 vs 重搭、ODS/DIM/DWD 不动 ADS 重建、7 条字段约束、预算分配 30+30+40)+ 餐饮 BI 公式实战库

Part 能力 触发场景
🅰️ A 数据查询与卡片创建 "查 2 月各城市营业额" / "做一张交叉表" / "删掉这张卡片"
🅱️ B ETL 治理与写入 "扫一遍 ETL 看哪些可以删" / "建一个 ETL" / "direct-save 报错怎么修"
🅱️ B-17 全链路重写方法论 "把这条 SmartETL 链整个改成 SQL 版" / "副本页验收 / 卡片级对比"
🆎 C 自定义图表开发与排障 "payload_json 解析失败" / "固定卡片错位" / "overlay 切页残留"

✨ 效果

数据分析侧(Part A)

  • ✅ 26 种图表类型一键建卡 + 取数(柱状图、折线图、交叉表、组合图、气泡图……)
  • ✅ 自定义公式字段(动态 SUM(x)/SUM(y)*100 类计算列,无需提前在 BI 界面建好)
  • ✅ 多表 / 多页面 / 多字段缓存机制(按任务隔离 --task 名)
  • ✅ 26 种聚合 + 13 种筛选操作符 + 6 种日期粒度(年/季/月/周/日/星期)
  • ✅ 自动处理观远 7.0+ 的 draft-release 机制

ETL 治理写入侧(Part B)

  • 11 个已实测 BI HTTP API endpoint(POST/GET/DELETE/OPTIONS 全覆盖)
  • 批量治理扫描:构建依赖图 → 检测循环依赖 → 计算复杂度 → 8 维 ETL + 4 维字段去留判断
  • ODS/DIM/DWD/DWS/APP 五层架构重组指引
  • 字段使用度双源审计(page + etl 双源 grep,避免仅看板会高估 8 倍可裁字段
  • POST /api/etl/direct-save create + update 同接口的完整 payload schema
  • task error 真错误定位status:FINISHED 是任务触发结果,真错误在 GET /api/task/<id>.response.result.error
  • 删除拓扑DELETE /api/data-source/ 必须先于 DELETE /api/etl/
  • v2→v3 批量改造 SDKtransformV2ToV3() 7 步重写 + 节点 ID 重映射
  • CTO 张进的全链路重写方法论:4 件交付 + 8 条硬规则 + 5 步标准工作流 + 三层验收 + 差异追踪 5 步法 + 空快照处理标准

自定义图表侧(Part C)

  • renderChart 4 参数 runtime 契约详解(不是把第一个参数当 DOM 根节点)
  • 5 种 data 形态识别
  • payload_json 截断判断 3 步Unterminated string → 优先改数据方案,不堆兼容逻辑)
  • 拆列推荐方案(替代单字段长 JSON)
  • z-index 基线(容器 8 / mask 1 / 固定卡 20)
  • 生命周期管理(URL 不匹配/编辑态/phoneView/路由离开 → 销毁注入物)
  • MutationObserver 死循环陷阱(用低频轮询 + 精准 rect 比较替代)
  • 复制页 card id 重定位(不会显式报错,只会悄悄失效)
  • 真实浏览器验收 8 项

报错修复手册

  • 🔧 10 类 ETL 高频报错请输入ETL名称 / 保存路径无效 / 上游运行权限不足 / 字段隐藏换行 / <> NULL / relativeFieldAlias 错位 / CTE 内 ; / self-join 别名同名 / UNION 列差 / 字符串字面量与 DATE 比较

✅ 适合 / ❌ 不适合

✅ 适合

  • 在观远 BI(Guandata 6.x / 7.x)上做日常数据分析、出报表
  • 做 ETL 治理(识别循环依赖、判断字段去留、重新分层)
  • 批量重建 ETL(30+ 张 v2→v3 改造)
  • 做副本页验收 / 卡片级对比 / 差异追踪
  • 自定义图表 HTML/CSS/JS 注入开发与排障
  • 不会写代码但想让 AI 帮你完成上面这些事

❌ 不适合

  • 用其他 BI 平台(Tableau / Power BI / Superset)—— 本 skill 只针对观远 BI / Guandata
  • 完全不允许调用底层 HTTP API 的合规环境
  • 没有 BI 账号 + 写权限(Part B 写入需要 ETL 创建权限 + 数据集运行权限)

🔌 兼容性 / Compatibility

本 skill 工具无关,凡是支持 SKILL.md frontmatter 标准的 agent 都能加载。已在以下工具上验证:

工具 状态 安装路径 入口文件 备注
Claude Code ✅ 已验证 ~/.claude/skills/majia-guanyuan/ SKILL.md 原生支持
OpenClaw ✅ 已验证 ~/.openclaw/skills/majia-guanyuan/<workspace>/skills/majia-guanyuan/ SKILL.md 大小写敏感
Codex (OpenAI) ✅ 已验证 ~/.codex/skills/majia-guanyuan/<repo>/.codex/skills/majia-guanyuan/ SKILL.md + 仓库根 AGENTS.md(项目指令) Codex skills docs
Hermes / gbrain ✅ 已验证 <workspace>/skills/majia-guanyuan/ SKILL.md + 仓库根 AGENTS.md(resolver) garrytan/gbrain
Cursor / Aider 等 AGENTS.md-aware 🟡 理论兼容 任意 AGENTS.md 作项目指令 仅会用到 Part A/B/C 的 navigation pointer
其他 🟡 通用清单 任意 manifest.json 作工具无关元数据 frontmatter + manifest 双保险

📦 安装

本仓库以 git 为唯一 source of truth,未发布到 npm registry。但保留了一行 install 体验——通过 node bin/install.jsnpx github: 直接走 GitHub。

方式 0:GitHub CLI gh skill(GitHub CLI 2.90.0+)

# 安装到用户级 Codex / Claude Code / OpenClaw / Qoder 等 agent
gh skill install maojiebc/majia-guanyuan majia-guanyuan --agent codex --scope user
gh skill install maojiebc/majia-guanyuan majia-guanyuan --agent claude-code --scope user
gh skill install maojiebc/majia-guanyuan majia-guanyuan --agent openclaw --scope user
gh skill install maojiebc/majia-guanyuan majia-guanyuan --agent qoder --scope user

# 安装前预览
gh skill preview maojiebc/majia-guanyuan majia-guanyuan

⭐ 方式 1:克隆 + 内置 install CLI(推荐)

# 一键克隆 + 自动安装到当前机器上所有已装的 agent 工具
git clone https://github.com/maojiebc/majia-guanyuan.git ~/majia-guanyuan
cd ~/majia-guanyuan
node bin/install.js install                  # 自动检测全装
node bin/install.js install --tool claude-code
node bin/install.js install --tool openclaw
node bin/install.js install --tool codex
node bin/install.js install --tool hermes
node bin/install.js install --tool all       # 4 个全装

# 其他命令
node bin/install.js list                     # 列出当前安装情况
node bin/install.js uninstall --tool codex   # 移除(自动备份你的 config.json)

方式 2:npx 直接走 GitHub URL(不需要 clone)

# 一行装,npx 自动从 GitHub 拉取并跑 bin/install.js
npx github:maojiebc/majia-guanyuan install --tool claude-code
npx github:maojiebc/majia-guanyuan install --tool all

bin/install.js 行为(两种方式相同):

  • 自动复制 SKILL.md / AGENTS.md / manifest.json / scripts/ / references/ 等到目标工具的 skill 目录
  • 自动 cp config.example.json → config.json,提示你编辑填凭据
  • 永远不覆盖你已有的 config.json(保留真凭据,再装一次也不丢)
  • 已装时默认跳过,要 --force 才覆盖

方式 3:手动 git clone 直接放到工具 skill 目录

# Claude Code
git clone https://github.com/maojiebc/majia-guanyuan.git ~/.claude/skills/majia-guanyuan

# OpenClaw(个人级)
git clone https://github.com/maojiebc/majia-guanyuan.git ~/.openclaw/skills/majia-guanyuan

# Codex(个人级)
git clone https://github.com/maojiebc/majia-guanyuan.git ~/.codex/skills/majia-guanyuan

# Codex(项目级)
git clone https://github.com/maojiebc/majia-guanyuan.git <your-repo>/.codex/skills/majia-guanyuan

# Hermes / gbrain(workspace 级)
git clone https://github.com/maojiebc/majia-guanyuan.git <your-workspace>/skills/majia-guanyuan

然后配置凭据(所有工具相同):

cd <安装路径>
cp config.example.json config.json
vim config.json  # 填入 BI base_url / login_id / password / default_pg_id / default_folder_id

方式 4:OpenClaw / ClawHub 一键安装

openclaw skills install majia-guanyuan
clawhub install majia-guanyuan

ClawHub 可能显示安全扫描提醒:本 skill 包含一个本地 Python 客户端,会按观远接口要求把登录凭据编码后发送到用户自己配置的 base_url。安装前可先阅读 SECURITY.md 并检查 scripts/guandata.py

方式 5:Hermes skillpack 安装(如发布到 gbrain registry)

gbrain skillpack install majia-guanyuan

依赖(所有工具相同)

# Python 依赖(Part A)
pip install httpx

# guancli(Part B/C 必需)
npm install -g @guandata/guancli
guancli auth login   # 配置 BI 登录

⚙️ 配置

config.example.json 复制为 config.json 后填入真实凭据:

{
  "version": "6",
  "base_url": "https://your-bi-instance.example.com/",
  "domain": "guanbi",
  "login_id": "your_username@example.com",
  "password": "<BI_LOGIN_PASSWORD>",
  "default_pg_id": "your_default_page_id",
  "default_folder_id": "your_default_folder_id"
}
字段 必填 说明
version "6"(观远 BI 6.x)或 "7"(观远 BI 7.0+,支持 draft/release)
base_url BI 实例地址,如 https://bi.company.com:8080
domain 登录域,通常为 guanbi(具体咨询 BI 管理员)
login_id BI 登录账号
password BI 登录密码(明文,仅供本地使用,已被 .gitignore 排除
default_pg_id 默认页面 ID(建卡时不传 pg_id 用这个)
default_folder_id 默认文件夹 ID(创建新页面时使用)

⚠️ config.json 已被 .gitignore 排除,不会被 commit 到仓库。但请仍然小心保管,不要在公开环境分享。


🚀 快速开始

Part A:建卡取数(数据分析)

# cwd 切到 skill 安装目录,所有命令用相对路径
cd <skill_install_path>  # 例如 ~/.claude/skills/majia-guanyuan/

SCRIPT="python3 ./scripts/guandata.py"

# 1. 列数据集
$SCRIPT list-datasets

# 2. 看字段
$SCRIPT get-columns <ds_id>

# 3. 一步建卡 + 取数
$SCRIPT create-and-get '{
  "name": "2 月各城市营业额",
  "ds_id": "<dataset_id>",
  "chart_type": "BASIC_COLUMN",
  "pg_id": "<page_id>",
  "row": ["城市"],
  "metric": [{"name": "销售额", "aggr": "SUM"}],
  "filters": [{"name": "营业日期", "op": "BT", "value": ["2026-02-01", "2026-02-28"]}],
  "sorting": [{"name": "销售额", "order": "DESC"}]
}'

Part B:建 ETL(数据建模)

# 1. 治理扫描
guancli etl tree
guancli --raw etl get <id> > raw/<id>.json
# 本地脚本分析依赖图、循环组、复杂度 → analysis.json + governance-report.md

# 2. 建 v2 目录(ETL + DATA_SET 各一个)
guancli fetch POST /api/directory \
  '{"name":"warehouse_v2","parentDirId":"<父>","dirType":"ETL"}'
guancli fetch POST /api/directory \
  '{"name":"warehouse_v2","parentDirId":"<父>","dirType":"DATA_SET"}'

# 3. 写入 + 执行
guancli fetch POST /api/etl/direct-save --stdin < payload.json
guancli fetch POST /api/etl/execute '{"dataFlowId":"<id>"}'

# 4. 失败定位(关键!别只看 status:FINISHED)
guancli fetch GET /api/task/<taskId> | jq '.response.result.error'

Part C:自定义图表(前端排障)

// 观远 runtime 真实签名(不是把第一个参数当 DOM 根节点!)
function renderChart(data, clickFunc, config, helpers) {
  // data 常见形态:
  // [[ {name:"payload_json",data:["{...}"]}, {name:"report_date",data:["2026-03-18"]} ]]

  // 关键:如果 JSON.parse(payload_json) 报 Unterminated string
  //  → 优先判断为"数据链路截断",改数据方案(拆列),不堆前端兼容逻辑
}

new GDPlugin().init(renderChart);

📁 目录结构

majia-guanyuan/
├── SKILL.md                          # AI 读的主文档(Part A + B + C)
├── AGENTS.md                         # Codex 项目指令 / Hermes resolver(V1.3 新增)
├── manifest.json                     # 工具无关 skill 元数据(V1.3 新增)
├── README.md                         # 本文件(中文)
├── README.en.md                      # English README
├── ATTRIBUTIONS.md                   # 致谢与来源
├── LICENSE                           # MIT
├── config.example.json               # 配置模板(公开版)
├── config.json                       # 你的真实凭据(gitignore 排除,不会 commit)
├── .gitignore
├── scripts/
│   ├── guandata.py                   # Part A 主脚本(建卡 / 取数 / 删卡 / 发布页面)
│   └── zonedata_builder/             # zoneData 构建模块
└── references/                       # 深度参考资料 (V1.5.0 progressive disclosure 重构后 12 份)
    ├── part-a-commands.md            # Part A 完整命令清单 + 缓存机制(V1.5.0)
    ├── part-a-cards.md               # 卡片参数 + 26 图表类型 + 6 示例(V1.5.0)
    ├── part-b-errors.md              # Part B 10 类报错详方案(V1.5.0)
    ├── part-b-payload.md             # ETL payload schema 详解(V1.5.0)
    ├── part-b-sdk.md                 # v2→v3 批量改造 SDK(V1.5.0)
    ├── part-b17-fullchain-rewrite.md # B-17 全链路重写方法论全章节(V1.5.0)
    ├── part-c-payload-json.md        # C-3 payload_json 排障详解(V1.5.0)
    ├── guancli-commands.md           # guancli 9 大类命令速查(V1.5.0)
    ├── custom-chart-playbook.md      # CTO 张进自定义图表完整排障手册原文(V1.1)
    ├── etl-rewrite-original.md       # CTO 张进 SmartETL 改写经验原文(V1.1)
    ├── execplan-spec.md              # OpenAI Codex ExecPlan 规范(V1.2)
    └── agents-rule.md                # OpenAI Codex 极简调度规则(V1.2)

🎯 何时用 Part A / B / C

用户需求
"查一下 2 月各城市营业额" A
"做一张交叉表给我" A
"删掉这张卡片" A
"扫一遍 BI 的 ETL 看哪些可以删" B
"ETL 之间有循环依赖怎么办" B
"帮我新建一个 ETL" B
"direct-save 报错怎么修" B
"字段使用度审计" B
"把这条 SmartETL 链整个改成 SQL 版" B-17
"做副本页验收 / 卡片级对比" B-17
"上游空快照怎么写结论" B-17
"差异定位到底在 SQL 还是执行时点" B-17
"30+ 表跨多日工程怎么管 / 给我 ExecPlan 骨架" B-17.11
"自定义图表脚本不执行 / payload_json 报错" C
"固定卡片错位 / overlay 切页残留" C
"renderChart 第一个参数到底是啥" C

👤 作者 / 联系

马甲(@maojiebc) · 超级马甲

如果这份 skill 帮到你,欢迎在以下任意渠道找我交流踩坑实录、提需求、报 bug,也欢迎切磋用户运营 / 数据中台 / BI 工程的实战经验:

渠道 链接
📧 Email m9224@163.com
🐙 GitHub github.com/maojiebc
🪝 ClawHub clawhub.ai/p/maojiebc
🐦 X @maojiebc
📕 小红书 超级马甲
📰 微信公众号 超级马甲

这份 skill 是 14 年用户运营 + 观远 BI 实战 + 60+ 张 ETL 写入实证沉淀出来的,问题/合作随时聊。


❤️ 致谢与来源

本 skill 站在多个前辈项目和经验贡献者的肩膀上,详细致谢见 ATTRIBUTIONS.md

  • guandata-bi @ ClawHub — 观远 BI 通用版 skill,本项目最早的灵感来源
  • zhengyuhe123/guandata — guandata 原始 GitHub 项目
  • 小小郑3号 · guandata70 — 观远 7.0+ 适配版(draft/release 机制),本项目 Part A 的直接前身
  • 观远 BI CTO 张进 — Part B-17(SmartETL 全链路重写方法论)+ Part C(自定义图表开发与排障)的核心经验贡献者
  • OpenAI Codex — V1.2 引入的 ExecPlan 规范(自包含活文档 + 四章节项目管理结构),用于 30+ 张表跨多日 SmartETL 重写工程的项目化追踪
  • 马甲(@maojiebc) — Part A/B 实战整合与 60+ 张 ETL 写入实证记录

没有 ClawHub / 张进 / 小小郑3号 / OpenAI Codex 的开源精神,这份 skill 不可能存在。


📋 版本记录

最新:V2.1.14 (2026-05-29) — guancli 命令面对齐 1.0.29references/guancli-commands.md 补齐 1.0.25→1.0.29 新命令(实测确认,不臆造):ds execute-sql(对数据集跑只读 SQL + 跨集 JOIN,1.0.26)、metric project(指标主题缩范围,1.0.27)、server-version/bi-version(BI 版本查询,1.0.25,泛化查询要 ≥ 8.2.1)、card preview --dynamic-field/--dynamic-param/-o/--columns/--precision(动态字段+参数+写文件,1.0.28/1.0.29);SKILL.md guancli 章节 + 三件套表 + Part B 引子 + part-a-commands.md SQL 直查指针同步;依赖 ^1.0.24^1.0.29。纯命令面对齐 + 文档补充,无 Part 结构变化 / 无代码改动;本地 guancli 同步升级 1.0.19 → 1.0.29。

V2.1.13 (2026-05-22) — references/ai-native-ads-design.md 新建:AI-native ADS 设计方法论(~340 行,9 个 §小节,majia-guanyuan 哲学层文档——不是操作手册,是范式判断)。沉淀自 v2.1.12 SuperApp demo 跑完后用户的根判断:「光数据治理没用,必须按适配 AI 的方式数据架构重搭一遍,要是在历史业务积累上做东西,估计全是阻碍」。本文把这条心得展开为可落地的方法论:(§1) 现象层 demo 一路畅通 vs 历史包袱寸步难行(ads_会员经营任务池 32 字段 AI-native vs proc_act_type_v3=P_CB_VCH / seg_id=7 历史宽表);(§2) 本质层两种 schema 假设差异(消费者是"写 SQL 的人" vs "LLM + 业务方");(§3) 推倒重来 ≠ 重做 ODS/DWD——只动 ADS 层(ODS/DIM/DWD 不动,新建 1 张 DWD 主宽表 + N 张面向 AI 应用场景的 AI-native ADS);(§4) 7 条字段约束:中文枚举(人群标签="沉睡") + 推荐预算好(推荐动作=STRING) + 复合直接拼好(门店名称=城市+地标+编号) + TIMESTAMP 统一 + 优先级强约束(P0/P1/P2) + 数值字段提前算好 + 行级权限字段冗余进表;(§5) 完整命名公约模板;(§6) 客户预算分配建议——旧叙事 100% 治理 12 个月业务无感知 vs 新叙事 治理 30% + 重搭 ADS 30% + AI 应用 40%(3 个月业务可量化 ROI),治理预算的一半挪去重搭 ADS,对 LLM 应用的产出比直接治理高一个数量级——治理只清"脏数据",重搭才换"schema 假设";(§7) 与 Part D restaurant-bi-formulas DWD 宽表底座兼容互补 + Part E SuperApp 强依赖本文;(§8) 反模式 8 条,最严重是"把 SuperApp 当目标,跳过 ADS 重搭"——历史宽表喂给 LLM 出不来好结果,demo 永远做不通。

V2.1.12 (2026-05-22) — references/part-e-superapp-pipeline.md 新建:SuperApp 开放应用开发流水线(~620 行,18 个 §小节)。沉淀自同一天在 workshop513 域上从零跑通一个完整 SuperApp demo「会员经营任务池 OS」(appId=ve2f78b92e329450e95549ff,业务闭环:拉 ads_会员经营任务池 50000 行 → AI 生成 3 段触达话术(claude-opus-4-6 自动用门店编号做角色扮演 + 自然语气 + 时间锚点)→ 用户选其中一条 → 写回 form_任务执行记录 → 刷新还原状态)的多轮反向工程:(1) guancli app publish 不读 .envVITE_APP_ID,必须命令行显式传 --app-id 才走 update;(2) POST /survey-engine/api/form/add 是真正的建表入口(脚手架 form.ts 完全没暴露),必填 settings: {} 否则 NPE on Form.getSettings();字段 fdId 后端重写、keyId 开发者控但 varchar(20) 上限(UUID 36 字符爆 PSQLException)、查询返回行按 fdId 索引而非 keyId/name;(3) BI LLM 中转两个 JSON 校验 bug/api/llm-config/list 返回裸数组被脚手架 unwrap 吞、/api/llm/chat/completions stream=true 报 NOT_JSON_RES / stream=false 报 ILLEGAL_JSON_RES 但完整 LLM 响应被塞在 error_message 字段三路径解析模板(标准包装 / pass-through / 从 error_message 抠 JSON)+ 客户端模拟流式打字效果;(4) SuperApp 同源域里脚手架 core/request.tsget/getJSON cookie 透传不稳,BI 内部 API 必须用原生 fetch(..., { credentials: 'include' });(5) <base href> + BrowserRouter basename 自动适配 / dev 走 dev-proxy 转发 / 生产走 detectBIBaseRouteUrl;(6) 设计纪律沿用 docs/design/DESIGN-workbench-light.md(单数 ≤ 40px / 圆角 ≤ 8px / 三层 token 不同源);(7) ESLint 文件 ≤ 400 行 / 函数复杂度 ≤ 10。

完整变更历史见 CHANGELOG.mdGitHub Releases

🤝 贡献

欢迎 issue 和 PR:

  • 🐛 发现报错没在手册里的:欢迎提交 issue 描述报错信息 + payload + 真实错误(/api/task/<id>.response.result.error
  • 📝 你跑通了新的 BI HTTP API endpoint:欢迎补充到 Part B 的 API 全图
  • 🎨 自定义图表新场景:欢迎补充到 Part C
  • 📚 文档优化、翻译、错别字修正:直接 PR

📄 License

MIT © 2026 maojiebc and contributors.

本 skill 基于他人开源工作整合而成,详细 attribution 见 ATTRIBUTIONS.md