文档与知识 · nexu-io/html-anything

dashboard

固定侧栏 + 顶栏 + KPI 网格 + 1-2 张图

L1 基础 · 登记来源即可V1 已固定Dual-pass Audit
Author nexu-ioGitHub nexu-io/html-anything ↗Stars 8827License Apache-2.0(仓库根 LICENSE:Apache License Version 2.0, January 2004;GitHub API spdx_id=Apache-2.0)Commit 553ed98c28
管控等级描述 skill 的能力与建议配套的管控措施,不代表质量或安全认证,也不表示可用或不可用。是否使用由用户和管理者决定。不同 agent 宿主对权限的约束各不相同,请勿假定宿主一定会提供安全兜底。第三方 skill 版权归原作者,使用风险由使用者自行承担。

1实现原理 · 为什么它能做到

模板本体没有可执行代码:loader 从 src/lib/templates/skills/<id>/SKILL.md 读入 frontmatter 与正文,正文(body)与 example 内容一起作为 LoadedSkill 返回。

next/src/lib/templates/loader.ts
const raw = safeRead(path.join(dir, "SKILL.md"));
这里在做什么:SKILL.md 是唯一行为来源——frontmatter 供选择器渲染(zh_name/emoji/aspect_hint/tags/example_* 等),正文整段即提示词;loader 不做语义校验,模板写什么就下发什么。

下发前宿主固定拼装 prompt:模板正文夹在共享设计指令 SHARED_DESIGN_DIRECTIVES 与【输入格式】/【用户内容】之间。

next/src/lib/templates/shared.ts
Wrap a per-template instruction body with the shared design directives and
这里在做什么:模板只定义「这一个交付物长什么样」(版式/节奏/组件),共享指令承担跨模板硬约束——单文件 HTML、禁止用文件工具、Tailwind 与 Google Fonts 走 CDN、内容真实性、中文盘古之白。

共享指令把硬约束写成对 agent 的显式禁令,并强制内容驱动数量(模板里的数字只作参考下限)。

next/src/lib/templates/shared.ts
**禁止使用 Write / Edit / MultiEdit / Bash / Create / 任何文件系统工具**。
同文件下文还有一条:输出的 slide / frame / card / section 数量完全由【用户内容】的实际长度和信息结构决定——这解释了为什么本类模板不因内容变长而失效:每段内容至少一张卡/一节,模板只提供版面池。

真正执行的是用户本机已安装并登录的编码 agent CLI:宿主 spawn 子进程,把 prompt 交给它,HTML 从 stdout 流式捕获。

next/src/lib/agents/invoke.ts
import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process";
这里在做什么:模板 skill 只提供提示词,能力(含写代码、跑工具)来自宿主 CLI 的既有权限;skill 目录自身没有任何脚本入口,因此判级只看目录内资产(宿主行为不计档)。

/api/convert 是模板的执行路径:它把 skill.body 与用户内容组装成 prompt 后交给 invokeAgent。

next/src/app/api/convert/route.ts
prompt = assemblePrompt({ body: skill.body, content, format });
编辑模式另走 buildEditPrompt(最小化差异编辑,禁用文件工具、要求直接流式输出完整 HTML),因此本类模板的产物形态稳定:单文件 HTML、内联 CSS/SVG,外链仅字体与个别模板显式要求的图表库。

模板把管理后台单页拆成固定左栏 + 顶栏 + KPI 网格 + 1-2 主图 + recent activity 五段,并声明这是标准 admin/analytics 单页。

next/src/lib/templates/skills/dashboard/SKILL.md
【意图】标准 admin/analytics 仪表板单页。
这里在做什么:先在意图段把交付物定性(单页、标准后台),再用五条布局条目固定结构,模型无须自行决定信息架构。

侧栏与顶栏的组成被写死:侧栏 = logo + 导航 + 用户 footer;顶栏 = search + 通知 + avatar。

next/src/lib/templates/skills/dashboard/SKILL.md
- Fixed left sidebar (logo + 导航 + 用户 footer)
这种元素清单式指令落地性很高:示例侧栏给出 brand + nav(Overview/Funnels/Cohorts/… + Workspace 分组)与用户位,顶栏给出搜索、通知、头像三件。

主区被量化为 KPI 卡网格(3-5 个)+ 1-2 张主图表(折线/柱/区域)+ 底部 recent activity 列表。

next/src/lib/templates/skills/dashboard/SKILL.md
- Main: KPI cards 网格 (3-5 个)
示例取上界:4 个 KPI(MRR / Active accounts / Churn / P95 latency),各带 up/down 变化标注,符合 3-5 个与 KPI 卡的一般形态。

示例以纯内联 CSS + 系统字族 + 内联 SVG 实现(无 Tailwind、无字体 CDN、零 URL、零 <script>),图表用 SVG polyline 手绘而非图表库。

next/src/lib/templates/skills/dashboard/example.html
<svg viewBox="0 0 600 240" preserveAspectRatio="none">
这里在做什么:把 1-2 张主图表降级为内联 SVG 折线——离线可用、无脚本、无依赖;代价是没有交互 tooltip,属静态报表而非可交互面板。

示例采用一屏应用壳写法:aside.sidebar 固定宽度 + main 内容区,KPI 用 grid repeat(4,1fr),并在 900px 断点降为两列。

next/src/lib/templates/skills/dashboard/example.html
.kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 28px; }
同一 CSS 里带 @media (max-width: 900px) 降级为 2 列,说明示例虽为桌面 1440 定位也保留了窄屏可用性。

示例用 data-od-id 标注区块锚点(sidebar/topbar/kpis/…/recent-events),是可直接使用的结构标记约定。

next/src/lib/templates/skills/dashboard/example.html
<div class="topbar" data-od-id="topbar">
这里在做什么:给每个区块加稳定 id,便于后续编辑(宿主的最小化差异编辑模式按 DOM 定位)与人工定位;同一约定也出现在 dating-web 等模板中。

2核心能力

01固定左侧栏(logo + 分组导航 + 用户 footer)
02顶栏(search + 通知 + avatar)
03KPI 卡网格(3-5 个;示例 4 个并带涨跌标注)
041-2 张主图表(折线/柱/区域;示例用内联 SVG polyline 实现折线)
05底部 recent activity 列表(示例为 Recent events 与新账户两张表)
06无脚本 / 无外链的离线实现路径(内联 CSS + 系统字族 + 内联 SVG)

4管控建议与判定依据

建议配套管控措施
面向 Agent
可自动加载
面向管理者
登记来源与版本
判定依据(文件路径与关键语句摘要)
  • SKILL.md: 纯提示词指令与规则文本,无脚本执行与外部影响
审计说明: 。判级只依据 skill 自身目录(仅 SKILL.md + example.html 两个文件,无 scripts/、无自带 CLI、无凭证读取、无写盘):无脚本入口、无自带 CLI、无凭证读取、无写盘指令;SKILL.md 正文未要求运行时引入任何外部端点(只写布局与元素清单)。执行期不发生任何外发。目录内实际出现的端点仅存在于 example.html 零 URL、零 <script>(内联 CSS + 系统字族 + 内联 SVG)——目录内不存在网络端点,按批4 终版口径属**产物期引用**(生成的 HTML 由浏览器打开时拉取 CDN/字体,skill 执行时不抓取、不上报、不传素材),故不判级,仅在此列出端点;宿主壳(loader→assemblePrompt→本地 agent CLI spawn、预览 iframe sandbox)同属宿主行为,记入 verdict.risks。

5第二遍独立确认

  • [ok] 「零外链」判定 — dashboard/ 目录内 http(s) 命中数为 0,<script> 命中数为 0;字体为 -apple-system/system-ui/mono,执行期与产物期均无外发(对比 data-report 的 jsdelivr 图表库为产物期引用)。
  • [ok] 布局条目覆盖度 — 侧栏/顶栏/KPI 网格/主图表/活动列表五条全部实现:KPI 取 4 个(区间 3-5 内),图表 1 张(区间 1-2 内),底部另有 New accounts 与 Recent events 两张表。
  • [ok] 图表实现方式 — SKILL.md 只要求 1-2 张主图表(折线/柱/区域),示例以 <svg viewBox="0 0 600 240" preserveAspectRatio="none"> + polyline 折线实现,属合规实现且无需脚本。
  • [ok] license / stars / commit 元数据 — GitHub API(api.github.com/repos/nexu-io/html-anything):spdx_id=Apache-2.0、stargazers_count=8827、pushed_at=2026-09-15T03:36:24Z;工作副本 git HEAD = 553ed98c283f9c0f489902d035416a972d6a9699(与任务表 pin 553ed98c283f 同源)。
  • [ok] skill.path 与目录资产面 — pin 目录内该路径存在且含 SKILL.md;目录内文件清单已用 glob 全量核对(含隐藏文件),无 scripts/、无 references/、无二进制资产(competitive-teardown 的 assets/ 为纯 HTML,另行记录)。

6结论

  • 极简但完整:20 行模板给出五条布局,交付物边界(单页后台)与元素清单一次说清,落地速度快。
  • 产出可离线:示例零 URL 零脚本,内联 CSS + 内联 SVG,双击即用,适合内部工具/离线演示。
  • KPI 卡带涨跌语义(.delta.up / .delta.down 配 good/bad 色),不是纯数字罗列。
  • 区块带 data-od-id 锚点,后续最小化差异编辑(宿主 edit 模式)定位稳定。
  • 适合: 适合快速产出内部管理/运营看板的静态单页:KPI 概览、增长走势、最近事件列表;尤其适合需要离线可开、零依赖交付的场景(示例即此路线)。
    不适合: 不适合需要可交互筛选/钻取的 BI 面板(无脚本、无数据绑定);不适合数据报告类交付(应选 data-report,那里有图表库与必须用真实数据的纪律);不适合移动端优先场景(aspect_hint 为桌面 1440)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload dashboard.tar.gz
    sha256: 41d2f22d7bf54bf4…
    Option B · Copy Guide for Agent
    install.json
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 553ed98c28.