npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@supermajia/majia-guanyuan

v2.1.4

Published

Tool-agnostic Agent Skill for Guandata BI (观远 BI). Data analysis + ETL governance/write + custom chart development + HTML application-style dashboard generation. Compatible with Claude Code, OpenClaw, Codex, Hermes (gbrain). V1.5.0: progressive-disclosure

Readme

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 治理与写入,还能处理自定义图表的前端注入排障。

| 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": "[email protected]",
  "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 | [email protected] | | 🐙 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.4 (2026-05-15) — 命令面同步 @guandata/[email protected]:① metric query 泛化查询(1.0.20 新增)完整接入 —— --compare yoy|mom|qoq|wow|dod--xtd ytd|qtd|mtd|wtd|dtd--recent 7d|4w|3m(带 --recent-base)、--percentage --percentage-dim--rank-top N --rank-dim ... --rank-order--last、兜底 --adv-calc-json,业务侧"同比/累计/最近 N 天/各城市占比/Top 10"一行命令出数,不必去 BI 后台建派生指标实例;② card preview -f excel(1.0.20)—— Excel 2003 XML 直接重定向 .xls,同时 --limit 默认抬到 10000、--sort-asc/desc 取数下限 10000;③ 错误输出更干净(1.0.21),guancli ... 2>&1 | head -n 5 不再被 Usage: / Available Commands: 长串覆盖,Part B 报错速查脚本更可靠。manifest 依赖约束 ^1.0.19 → ^1.0.21;命令面与判断表写进 references/guancli-commands.md

V2.1.3 (2026-05-14) — 纯文档 patch:刷新 docs/architecture.svg 功能说明图,从 v1.5 "三块拼图"升级到 v2.1.x 现实——新增"三件套生态"条带(guancli 1.0.19 / guanvis-skill 0.1.13 / majia-guanyuan 2.1.3)+ Part C-12 HTML 应用化看板 NEW 高亮模块(粉紫渐变 + glow)+ 底部数字校准。同步生成 2880×1840 @2x DPI PNG 渲染产物(docs/architecture.png,供 npm/ClawHub 页面 fallback)。package.json#filesdocs/ 也补进 npm tarball。

V2.1.2 (2026-05-14) — V2.1.1 的纯打包 hotfix:package.json#files 字段补上 templates/,让 npm install 的用户也能拿到 templates/html-dashboard/ 起手模板包;其他安装路径(GitHub clone / gh skill install / ClawHub)从 V2.1.1 起就已经包含 templates/。

V2.1.1 (2026-05-14) — 新增 Part C-12:HTML 应用化看板生成references/part-c-html-dashboard.md + templates/html-dashboard/ 模板包,含 GDHTML runtime 12 个 API + 2 个起手模块 + patch_selector_linkage.js)。用户说"更高级/应用化/不限标准看板"时自动切到 SDK 子类型 + DATA_GRID dataView 数据层架构,弥补 guanvis-skill .linkToAll() 联不到 custom chart 内部 dataView 的盲区。guancli card preview 命令面同步纠正(不再有 --pg-id),新增 .data // .response jq 兼容写法。

V2.1.0 (2026-05-13) — [email protected] 内网 Nexus 上线,Part A 标准建卡路由优先指向它;新增 references/internal-nexus-install.md 内网 tarball 安装手册(含 macOS com.apple.quarantine 坑);与官方 skill 共存表升级为三件套分工。

完整变更历史见 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