nu-bi/nubi

GitHub: nu-bi/nubi

浏览器原生的嵌入式 BI 平台,通过 DuckDB-WASM 在前端执行分析查询,实现接近零成本的仪表盘查看。

Stars: 2 | Forks: 1

Nubi logo

Nubi

在浏览器中运行的 BI —— 单次仪表盘查看成本接近于零。

License Apache-2.0 Tests passing PRs welcome Python FastAPI React 19 Vite Stars

文档 · 对比 Hex/Cube · 快速开始 · 架构 · 路线图

Nubi query editor — SQL workspace with live results, query library, and one-click expose-as-metric

## 什么是 Nubi? Nubi 是一个开箱即用的 BI 和嵌入式分析平台。其核心架构赌注在于**分析内核默认运行在用户的浏览器中**(DuckDB-WASM / Pyodide),因此仪表盘的边际查看成本几乎为零 —— 服务端内核(E2B / Modal Firecracker microVM)仅作为运行原生 wheel 和处理大型任务的备用方案。 数据平面在每个边界都使用 **Arrow IPC**,因此数据在数据仓库、边缘节点、浏览器和内核之间移动时无需承担序列化开销。其切入点是**嵌入式分析**:宿主应用只需签署短期的 JWT,挂载 ``,即可获得带有服务端行级安全(RLS)控制的实时跨过滤仪表盘,且每次查看的成本几乎为零。 ## ✨ 为什么选择 Nubi? | | Hex | Cube | **Nubi** | |---|---|---|---| | 内核 | 每个会话使用 Python,位于他们的云端 ($$$) | n/a | **浏览器内使用 Pyodide;仅在需要时按需启动服务端内核** | | 结果传输 | 通过 pandas 的 JSON | JSON / SQL API | **Arrow IPC —— 零序列化开销** | | 可视化 | Plotly/SVG,超过 ~5 万行时会卡顿 | 自行携带 | **基于 Arrow 缓冲区的 WebGL/WebGPU,可流畅交互超过 100 万个数据点** | | 缓存 | 基于会话 | 在 Cube Store 中进行预聚合 | **内容哈希边缘缓存 + 自动预聚合** | | 建模成本 | 中等 | 高(优先使用 Cube) | **低 —— 指向数据仓库即可开始** | | 嵌入 | 独立产品 | 仅支持 Headless | **核心界面;不仅支持输出,编辑器也可嵌入** | | 免费层级 | 按席位收取内核计算费用 | 基础设施/席位 | **真正的免费层级 —— 计算发生在用户的浏览器中** | **核心差异化优势:** - **Arrow 原生数据平面** —— sqlglot planner → PhysicalPlan → executor → Arrow IPC 流,具有固定的缓存键规范和一致性测试套件,因此未来的 Rust executor 可以在不改动调用点的情况下无缝替换。 - **内容哈希边缘缓存** —— N 个查看同一仪表盘的用户最终只会触发一次对数据仓库的访问。缓存键:`sha256(canonical_json({sql, params, rls_claims}))`。 - **Auth-as-code + 服务端 RLS** —— JWT claim 携带行/列策略;planner 将其作为 AST 级别的谓词注入(绝不使用字符串拼接)。通过同一套基础机制,同时支持内部用户、多租户嵌入以及 Google OAuth。 - **受治理的语义指标** —— `MetricDefinition` 将业务逻辑统一编码(度量、维度、时间智能、RLS 键、派生公式),并通过 `POST /metrics/{id}/query` 按需编译为 SQL。Agents 和仪表盘查询的是受治理的词汇表,而不是原始 SQL。内置功能:派生/比率度量(带 NULLIF 保护的公式)、完整的时间智能套件(前期对比、同比、本年/本季/本月至今、滚动窗口、最新快照)、带有 "Other" 桶的动态 top-N、`percentile_cont`、`approx_count_distinct`。 - **智能引擎 + 预聚合汇总** —— `build_rollup_for_metric` 将匹配指标编译器 `__base` CTE 的汇总结果物化,以便路由器可以直接从汇总表提供派生和窗口化指标查询,而无需访问原始事实表。单看板的查询融合以及共享的 `(model, predicate, rls_hash)` 缓存键,将重复的小部件加载合并为一次扫描。 - **作为数据应用引擎的 Flows** —— 支持单元格级别的 `cpu_cores / mem_mb / timeout_s` 资源请求;带有运行级种子的随机单元格以保证可重复性;类型化的 artifact 通道(通过 handle 处理的 pickle/joblib/model blobs);场景扫描 + 回填;事件/webhook/下游触发器 + 运行历史 + SLA 监控;受治理的回写(幂等/事务性、dry-run、RBAC、审批门控)。驱动闭环周期:Flow 计算 → 表 → 指标 → 仪表盘 → 行动 → 回写 → 重新触发。 - **Canvas —— HTML 原生文档界面** —— `CanvasDoc` 是直接编写的自由格式 HTML(由人类或 LLM 编写)。元素通过侧边的 `data-el-id` → 绑定映射,绑定到查询、语义指标或 HTTP API 连接器。复用仪表盘的数据/RLS/清理器/调度层;增加了代码+可视化编辑器、右侧绑定检查器、`/c/:id` 公共查看器,以及 生成→验证→修复 的 LLM 循环。定时发送(PDF/HTML)复用 `report_send` 流程处理器。 - **LLM 可编写的仪表盘 + MCP** —— 仪表盘是一个经过清理的 HTML/CSS 文档,包含声明式 ``、`` 和 `` 自定义元素。LLM 和 MCP Agents 编写布局和小部件属性;它们绝不编写 WebGL 或 fetch 代码。15 个 MCP 工具将完整的创作界面暴露给任何 Agent。 - **自动 WebGL 渲染** —— `` 在超过 20,000 行时会自动切换到 regl WebGL 散点图渲染;低于此数则使用 SVG/HTML。在交互式帧率下,直接读取 Arrow 列可处理多达约 100 万个数据点。 - **SQL 优先的连接器 SDK** —— 任何 `fn(plan) -> pyarrow.Table` 都是具备声明能力的一等连接器。能力门控强制执行安全底线:当策略处于活动状态时,带有 `predicate_rls=False` 的连接器将被拒绝(501)。内置连接器包括:`postgres` (ADBC)、`duckdb`(内存中 + 基于文件)、`duckdb_storage`(S3/R2/MinIO httpfs)、`http_json`、`mysql`、`mariadb`、`jdbc`、`snowflake`、`bigquery`、`clickhouse`、`databricks`、`athena`、`trino`/`presto`、`sqlserver`/`azuresql`/`azuresynapse`、`oracle`、`redshift`、`cockroachdb`、`cloudsql`、`sftp`、`ftp`(大多数通过可选的延迟导入驱动程序支持)。私有数据库可通过 `network_mode='bridge'` WebSocket 隧道访问。 - **真正的免费层级** —— 计算发生在用户的浏览器中;Hex 如果不承担内核计算成本,就无法做到这一点。 ## 📸 产品截图 上方的首图是**查询编辑器**。下面展示更多界面 —— 请查看 [**UI 导览**](docs/ui-tour.md) 获取完整的指引式 walkthrough。
Dashboard editor Dashboard editor — drag-and-drop widgets, 9 chart types, live cross-filtering Flows Flows — cell-based SQL/Python orchestration (notebook + canvas views)
Data browser Data browser — explore any connected source, edit grid-style Published dashboard Published dashboard — embeddable, RLS-enforced, near-zero cost per view
## 🚀 快速开始 ### Docker Compose(最快 —— 一条命令) 仓库自带一个 `docker-compose.yml`,包含两个服务:`db` (postgres:16-alpine) 和一个 组合式 `app`(根目录 `Dockerfile` —— 构建 Vite SPA 并运行 FastAPI,在 8000 端口的单一源上提供 SPA 和 `/api/v1` API 服务)。 ``` # Clone 并启动 stack git clone https://github.com/nu-bi/nubi.git cd nubi make up # docker compose up -d --build # 打开应用 # App (SPA + API): http://localhost:8000 # API 文档: http://localhost:8000/docs (仅限开发环境) # (可选)注入测试用户 cd backend && DATABASE_URL=postgresql://nubi:nubi@localhost:5432/nubi python seed.py # → test@nubi.dev / nubitest123 # 冒烟测试 make smoke # scripts/smoke.sh — health + auth + query assertions ```
开发路径 —— 后端 + 前端分别运行 **前置条件:** Python 3.11+, Node 20+ ``` # ── Backend ─────────────────────────────────────────────────── python3.11 -m venv .venv && source .venv/bin/activate pip install -r backend/requirements.txt # 复制并编辑 env — 至少设置 DATABASE_URL 和 JWT_SECRET cp .env.example backend/.env # 运行 migrations,然后启动 API python database/migrate.py cd backend && uvicorn main:app --reload # API: http://localhost:8000 # 文档: http://localhost:8000/docs # ── Frontend(新终端,repo 根目录)──────────────────────── npm install cp .env.example .env # set VITE_BACKEND_URL=http://localhost:8000 npm run dev # Frontend: http://localhost:5173 ``` 初始化测试用户(可选,在激活的 venv 环境下): ``` cd backend && DATABASE_URL=postgresql://user:pass@host/db python seed.py # → test@nubi.dev / nubitest123 ```
关键环境变量 (.env.example) | 变量 | 必需 | 描述 | |---|---|---| | `DATABASE_URL` | 是 | `postgresql://...?sslmode=require` (Neon) 或本地 Postgres | | `JWT_SECRET` | 是 | HS256 签名密钥 —— `openssl rand -hex 32` | | `VITE_BACKEND_URL` | 前端 | FastAPI 后端的基础 URL | | `GOOGLE_CLIENT_ID` | OAuth | Google OAuth 客户端 ID | | `GOOGLE_CLIENT_SECRET` | OAuth | Google OAuth 客户端密钥 | | `GOOGLE_REDIRECT_URI` | OAuth | 在 Google 控制台中注册的回调 URL | | `FRONTEND_URL` | 后端 | Google OAuth 后后端重定向的地址 | | `CORS_ORIGINS` | 后端 | 逗号分隔的允许来源 | | `ENV` | 后端 | `development` / `production`(在生产环境中禁用 `/docs`) | | `KERNEL_LOCAL_ENABLED` | 后端 | 设为 `true` 以允许本地子进程内核(仅限开发环境,默认为 `true`) | | `KERNEL_REMOTE_PROVIDER` | 后端 | 设为 `e2b` 或 `modal` 以使用 Firecracker/Modal 沙箱内核(生产环境) | | `LLM_PROVIDER` | 可选 | `litellm` / `anthropic` / `openai` / `gemini`。`litellm`(一个 SDK,支持所有提供商及模型级成本追踪)读取 `LITELLM_MODEL`;请参阅 [AI 文档](docs/ai-and-mcp.md#configuring-the-llm-provider-operators)。未设置 ⇒ 离线模式。 | | `ALLOW_UNSAFE_PUBLIC_EXPORTS` | 可选 | 设为 `true` 以启用免认证的 CDN 静态导出(模式 3b)。需要组织 `public_exports` 门控。默认 `false`。 | | `EMBED_DEV_TOKEN_ENABLED` | 仅限开发 | 设为 `true` 以启用仅限开发的 HS256 嵌入 token 生成端点。**生产环境中绝对不能设为 `true`。** | | `NUBI_COLLECT_ROW_CAP` | 可选 | 快照/报告数据收集的行数上限。默认 `50000`。`0` = 无限制。 | | `JOBS_SCHEDULER_ENABLED` | 可选 | 设为 `true` 以激活后台作业调度程序的运行。默认 `false`。 | | `FLOWS_TICK_SECRET` | 可选 | 用于 `POST /flows/tick`(外部 cron 调度器)的共享密钥。留空则禁用。 | | `FX_EMERGENCY_RATE` | 仅限企业版 | 无实时汇率可用时的紧急回退 USD→ZAR 汇率。默认 `16.26`。 |
## 🏗️ 架构 ``` flowchart TD subgraph client["Browser / host page"] direction TB DASH["<nubi-dashboard> + widget kit
kpi · table · chart · filter"] WASM["DuckDB-WASM kernel
regl WebGL render above ~20k rows"] DASH --- WASM end subgraph api["FastAPI backend"] direction TB AUTH["Auth · email+pw · Google OAuth · JWKS"] QUERY["/query"] PLAN["Planner — sqlglot AST → PhysicalPlan
injects row-level-security predicates"] CACHE["Content-hashed cache
X-Nubi-Cache: HIT | MISS"] REG["Connector registry"] SVC["/ai · /lineage · /jobs · REST CRUD"] KR["/compute/run · kernel router"] QUERY --> PLAN --> CACHE --> REG end subgraph data["Data sources — bring your own"] direction TB WH["Warehouses
postgres · duckdb · http_json
mysql · snowflake · bigquery"] BRIDGE["VPC bridge · WebSocket tunnel"] META["Metadata DB
Postgres / Neon"] end subgraph compute["Compute kernel · first-party only · embed → 403"] direction TB LOCAL["LocalSubprocessRunner · dev"] REMOTE["E2B / Modal · Firecracker microVM"] end DASH -->|"getToken() → JWT"| AUTH DASH -->|"HTTPS"| QUERY DASH -.-> SVC CACHE -->|"Arrow IPC stream"| WASM REG -->|"Arrow IPC"| WH REG --> BRIDGE --> WH REG --> META KR --> LOCAL KR --> REMOTE classDef client fill:#eff6ff,stroke:#3b82f6,color:#1e3a8a; classDef secure fill:#fef2f2,stroke:#ef4444,color:#991b1b; class client client; class compute secure; ``` ### 技术栈 | 层级 | 技术 | |---|---| | 后端 | FastAPI 0.131, Python 3.11+, uvicorn, pydantic-settings v2 | | 数据库 (DB) | asyncpg(连接池,原生 SQL);Postgres 16 / Neon(必须使用 SSL) | | 认证 (Auth) | argon2-cffi (argon2id), PyJWT HS256, cryptography RS256/ES256 JWKS | | 数据平面 | sqlglot(AST 规划器 + RLS 注入 + 方言验证)、pyarrow、DuckDB(内存 + 文件)、adbc-driver-postgresql;mysql/mariadb/jdbc 连接器(可选驱动程序);VPC 桥接隧道 | | 缓存 | 进程内 LRU + TTL (`ContentAddressedCache`);接口支持替换为 Redis | | 计算 | 子进程(开发);e2b-code-interpreter / modal(生产,可选的延迟加载依赖项) | | AI / LLM | NullProvider(默认,零网络请求);进程内 LiteLLM(推荐 —— 一个 SDK,支持所有提供商 + 每次调用的成本追踪);通过环境变量延迟加载原生的 Anthropic / OpenAI / Gemini SDK | | 前端 | React 19, Vite 7, TailwindCSS, react-router-dom | | 可视化 | regl(WebGL 散点图,约 100 万点)、apache-arrow、@duckdb/duckdb-wasm、ECharts | | 嵌入 | 自定义元素 (``, ``, ``, ``)、DOMPurify | | SDK | `@nubi/sdk` —— 框架无关的 ESM,封装了认证 + 查询 + 资源 CRUD + 嵌入 | | CLI | Python typer (`nubi / deploy / run / diff / pull`) | | MCP | Python `mcp` SDK, stdio 传输, 15 个工具 | | 自托管 | Docker Compose (`docker-compose.yml`);Makefile: `make up/down/migrate/smoke` | ### Monorepo 结构 ``` nubi/ ├── backend/ FastAPI app, connectors, planner, compute, auth, AI, jobs │ ├── app/ │ │ ├── auth/ argon2id, JWT HS256, Google PKCE, JWKS, sessions │ │ ├── connectors/ sqlglot planner, Arrow executor, cache, pre-agg │ │ ├── compute/ KernelRunner ABC, LocalSubprocessRunner, E2BRunner, ModalRunner │ │ ├── ai/ LLMProvider, grounding, dashboard generation │ │ ├── lineage/ sqlglot AST extractor, LineageGraph │ │ ├── jobs/ cron + interval scheduler, executor, store │ │ ├── repos/ asyncpg (prod) + in-memory (test) repository layer │ │ └── routes/ auth, query, compute, embed, ai, lineage, jobs, resources │ └── tests/ ~180 test modules + conformance suite (golden Arrow + cache keys) + security/ suite ├── database/ Forward-only SQL migration runner + 13 OSS migrations + 4 EE migrations ├── src/ React 19 frontend (Vite + Tailwind) — pages, components, viz ├── embed/ Web components: , , , ├── sdk/ @nubi/sdk — createNubiClient ESM package ├── cli/ nubi CLI (typer): login / deploy / run / diff / pull ├── mcp/ MCP stdio server — 15 tools for agent authoring ├── docs/ cache-key-spec.md, conformance.md, kernel-security.md, assets/ ├── Dockerfile combined image: Vite SPA build + FastAPI (single origin) ├── docker-compose.yml db (postgres:16) + app (SPA + API on :8000) ├── Makefile up / down / migrate / logs / smoke ├── scripts/smoke.sh End-to-end health + auth + query assertions └── .env.example All env vars with comments ``` ## 📊 项目状态 | 里程碑 | 状态 | 已发布功能 | |---|---|---| | M0 — 基础架构 | ✅ 完成 | 基于 Neon Postgres 的 React + FastAPI 重构,email/pw + Google OAuth,数据库迁移 | | M1 — 连接器 + 一致性 | ✅ 完成 | sqlglot planner,PhysicalPlan,Postgres/DuckDB 连接器,固定的缓存键规范 | | M2 — 流处理 + 缓存 + 下推 | ✅ 完成 | Arrow IPC 流,内容哈希 LRU 缓存,projection/predicate/LIMIT 下推,预聚合种子 | | M3 — 嵌入认证 + `` | ✅ 完成 | HS256 + JWKS 验证器,签发者注册表,服务端 RLS,来源绑定,Web 组件 | | M4 — 本地内核 + 放置路由器 | ✅ 完成 | KernelRunner ABC, LocalSubprocessRunner, ComputePlacementRouter, `POST /compute/run` | | M4-REMOTE — E2B/Modal 沙箱 | ✅ 完成 | E2BRunner (Firecracker microVM), ModalRunner 适配器 | | M5 — WebGL 可视化 | ✅ 完成 | 基于 Arrow 缓冲区的 regl GPU 散点图,`` 在 2 万行以上自动启用 WebGL | | M6 — REST API + SDK + CLI | ✅ 完成 | asyncpg 仓储层,datastores/boards/widgets/queries 的 CRUD,`@nubi/sdk`,typer CLI | | M7 — 血缘关系 + AI + MCP | ✅ 完成 | sqlglot 血缘提取器,确定性基础,LLMProvider,MCP 服务端(15 个工具) | | M8 — LLM 可编写的仪表盘 | ✅ 完成 | ``, ``, `` 小部件套件,DOMPurify 渲染器,`POST /ai/dashboard` | | M9 — 连接器 SDK + HTTP/JSON | ✅ 完成 | FunctionConnector, apply_rls_postfetch, HttpJsonConnector,刻意将 NoSQL 排除在范围之外 | | 连接器广度 | ✅ 完成 | 注册表内置 20 多种类型:`postgres`、`duckdb`(内存 + 文件支持)、`duckdb_storage`(S3/R2/MinIO httpfs)、`http_json`、`mysql`、`mariadb`、`jdbc`、`snowflake`、`bigquery`、`clickhouse`、`databricks`、`athena`、`trino`/`presto`、`sqlserver`/`azuresql`/`azuresynapse`、`oracle`、`redshift`、`cockroachdb`、`cloudsql`、`sftp`、`ftp`(大多数通过可选的延迟导入驱动程序支持) | | VPC 桥接 | ✅ 完成 | `network_mode='bridge'` 通过 `BridgeBroker` 开启 WebSocket TCP 隧道,接入查询路径 (`resolve_network_async`);其他模式返回 501 | | 构建器层 (M13–M22) | ✅ 完成 | 查询工作区 + 类型化参数,过滤器/变量/路由参数交互,TanStack 表格 + 条件格式,9 种图表类型,导出,计划报告,AI-SQL,智能体聊天,git 同步 | | 统一的编辑器界面 | ✅ 完成 | EditorShell:Dashboard / Report / Presentation 界面切换;DocCanvas(A4/Letter 分页文档)+ SlideCanvas(16:9 幻灯片 + 演示模式);`spec.surfaces.{grid,report,slides}` schema 拆分已上线 | | 语义层 (Bet 1) | ✅ 完成 | `MetricDefinition` + `MetricQuery` 受治理编译器;派生/比率度量(带 NULLIF 保护);完整的时间智能套件(通过 QUALIFY 实现 prior_period/pop/yoy/ytd/qtd/mtd/rolling_sum/rolling_avg/latest_snapshot);带有 Other 桶的动态 top-N;percentile_cont;approx_count_distinct | | 智能引擎 (Bet 2) | ✅ 完成 | `build_rollup_for_metric`(指标驱动的预聚合);感知 `__base` 的汇总路由器支持派生 + 窗口查询;单看板的 `DataProvider` 查询融合 + 共享 `(model, predicate, rls_hash)` 缓存键 | | Flows 数据应用引擎 (Axis B) | ✅ 完成 | 单元格级 `cpu_cores / mem_mb / timeout_s`;带运行级种子的随机单元格;类型化 artifact 通道(pickle/joblib/bytes/json);场景扫描 + 回填;事件/webhook/下游触发器 + 运行历史 + SLA;受治理的回写(幂等、dry-run、RBAC、审批门控) | | Canvas (Axis C) | ✅ 完成 | `canvases` 资源;`CanvasDoc` 模型;`validate_canvas_doc`;`/c/:id` 公共查看器;代码+可视化编辑器 + 右侧绑定检查器;三种绑定类型(query/metric/api);LLM 生成/编辑/修复循环;通过 `report_send` 定时发送 | | M10 — Docker 自托管冒烟测试 | 🔄 进行中 | docker-compose.yml 本地可用(db + 组合应用在 :8000 上);针对实时基础设施的 CI 冒烟测试是剩余的压轴工作 | | M11 — 计划任务 | ✅ 完成 | cron + 间隔调度器(确定性 `now`),`execute_job`,CRUD + run-now + 运行历史路由 | | M12 — 能力门控 RLS | ✅ 完成 | 通过 `datastore.config.type` 解析连接器,当 `predicate_rls=False` + 活动策略时触发 501 门控 | **测试:** 约 180 个后端测试模块(包括 security/ 套件)+ 一致性套件(golden Arrow 输出 + 字节一致的缓存键)、MCP 测试、CLI 测试、仪表盘清理器(`node --test`)、SDK 测试。 **实验性/尚未经过生产环境验证:** `LocalSubprocessRunner`(开发级隔离 —— 同一 OS 用户,宿主网络);Docker Compose 堆栈尚未针对实时外部基础设施(Neon SSL, E2B, 真实的 Google OAuth)进行过冒烟测试。 ## 🔌 嵌入式快速开始 ``` ``` CSS 自定义属性控制主题:`--nubi-bg`、`--nubi-fg`、`--nubi-accent`、`--nubi-border`。
完整的嵌入集成步骤 **1. 在 `app/auth/issuers.py` 中注册您的签发者**: ``` { "iss": "https://your-app.example.com", "jwks_uri": "https://your-app.example.com/.well-known/jwks.json", "aud": "nubi:your-project-id", "allowed_origins": ["https://your-app.example.com"], } ``` **2. 从您的后端签发短期 JWT**(≤15 分钟,RS256 或 ES256): ``` // Reference: embed/getToken.reference.js async function getToken() { const { token } = await fetch('/your-api/nubi-token').then(r => r.json()) return token // signed JWT from your backend } window.getToken = getToken ``` 必需的 JWT claim:`iss`、`sub`、`aud`、`org`、`project`、`roles[]`、`scope[]`(必须包含 `"read:*"` 或更窄的范围)、`policies`(RLS 列值对)、`embed_origin`、`exp`(≤ now + 900)、`iat`。 **3. 组件会处理其余所有事情** —— JWKS 验证、RLS 强制执行、Arrow IPC 获取、WebGL 渲染。
## 🧪 运行测试 ``` # Backend — 内存 repo + DuckDB fixtures;无需实时 DB cd backend && pytest # MCP server 测试 cd mcp && pytest tests/ # Dashboard 清理器(Node 内置 runner) npm run test:dash # JS SDK 测试 cd sdk && node --test src/index.test.mjs # CLI 测试 cd cli && pytest tests/ ``` 后端一致性套件(`backend/tests/conformance/`)断言规划器生成标准的 Arrow 输出和字节一致的缓存键。未来的 Rust executor 必须通过相同的套件才能实现互换。 ## 📦 SDK 与工具 | 包 | 路径 | 描述 | |---|---|---| | `@nubi/sdk` | [`sdk/`](sdk/README.md) | 框架无关的 ESM —— `.auth`, `.query()`, `.resources.*`, `.embed.mount()` | | `nubi` CLI | [`cli/`](cli/README.md) | `login / deploy / run / diff / pull` —— 支持 `--dry-run` | | MCP 服务端 | [`mcp/`](mcp/README.md) | stdio MCP —— 15 个用于 Agent 仪表盘编写的工具 | | 嵌入包 | [`embed/`](embed/README.md) | `` + 小部件套件自定义元素 | ## 📖 文档 完整文档位于 [`docs/`](docs/index.md) —— **请从 [文档索引](docs/index.md)** 开始阅读。重点内容: **使用 Nubi** - [入门指南](docs/getting-started.md) · [UI 导览](docs/ui-tour.md) - [连接器](docs/connectors.md) · [查询与参数](docs/queries-and-params.md) · [预聚合](docs/pre-aggregations.md) - [仪表盘](docs/dashboards.md) · [仪表盘规范参考](docs/dashboard-spec-reference.md) · [导出与定时报告](docs/exports-and-jobs.md) - [Flows](docs/flows.md) · [Notebooks](docs/notebooks.md) · [AI、聊天与 MCP](docs/ai-and-mcp.md) - [嵌入](docs/embedding.md) · [组织与设置](docs/organization-settings.md) - [语义层、数据应用与闭环](docs/semantic-and-data-apps.md) —— 指标、Flows 数据应用引擎、Canvas、回写、完整循环 - [指标参考](docs/metrics-reference.md) —— 用于查询受治理指标的 Agent/MCP 参考 **平台与安全** - [架构与经济学](docs/architecture-and-economics.md) —— 计算模型、嵌入模式、账单 COGS 映射 - [自托管](docs/self-host.md) · [Open Core](docs/open-core.md) · [Open-core 架构](docs/architecture-open-core.md) - [内核安全](docs/kernel-security.md) · [连接器安全](docs/connector-security.md) · [密钥管理](docs/secrets.md) - [缓存键规范](docs/cache-key-spec.md) · [一致性](docs/conformance.md) · [桥接](docs/bridges.md) · [Lakehouse](docs/lakehouse.md) **构建与贡献** - [SDK 与 CLI](docs/sdk-and-cli.md) · [Files-as-code](docs/files-as-code.md) · [Git 同步](docs/git-sync.md) - [开发 Nubi](docs/development.md) · [文档与截图](docs/docs-and-screenshots.md) - [`ROADMAP.md`](ROADMAP.md) —— 产品战略、对比 Hex/Cube 的定位、里程碑顺序、Rust→WASM 拆分计划 ## License [Apache License 2.0](LICENSE) —— 请参阅 `LICENSE` 文件。
标签:AV绕过, DuckDB-WASM, FastAPI, LLM, React, Syscalls, Unmanaged PE, 商业智能, 嵌入式分析, 测试用例, 请求拦截, 逆向工具