Engram Cloud Dashboard UI 组件规范:页面、卡片、指标与关联导航的实战指南
人工智能AI AgentAgent记忆MCP服务【免费下载链接】engramPersistent memory system for AI coding agents. Agent-agnostic Go binary with SQLite FTS5, MCP server, HTTP API, CLI, and TUI.项目地址https://gitcode.com/gh_mirrors/engra/engram点击查看免费下载Engram 是一个面向 AI 编码代理的持久记忆系统其云控制面Cloud Dashboard是一套基于 Go templ 服务端渲染 HTMX 局部刷新的浏览器 UI。本文以仓库中的 skills/ui-elements/SKILL.md 为骨架结合 internal/cloud/dashboard 的真实组件与测试实现系统讲解在 Engram Dashboard 中新增页面、卡片、指标、表格与详情流时应遵守的设计规则和落地方式。读完本文你将掌握何时该用这套规范、五条 UX 铁律与四条组合规则的含义、每条规则对应的 templ/HTMX 组件证据以及如何通过测试守护UI 不能撒谎这一核心不变式。何时使用这套规范按 skills/ui-elements/SKILL.md 的When to Use定义以下场景应当套用本规范为 Dashboard 新增一个页面或 partial局部片段创建卡片card、指标metric、表格table、列表list或详情视图detail view设计相关实体之间的关联导航connected navigation。在 Engram 中这些 UI 元素全部落在internal/cloud/dashboard包内通过 templ 模板.templ 生成的*_templ.go与 HTMX 属性hx-get、hx-target、hx-swap、hx-include组合实现具体挂载路径可参考 docs/codebase/dashboard.md 中的架构说明Browser → cloudserver认证/会话/管理员边界→ dashboardhandlers templ 静态资源→ DashboardStore 接口 → cloudstorePostgres 读模型。UX 五条铁律每条都有源码佐证原文档定义了五条 UX 规则它们不是空泛的审美建议而是可以在 components.templ 中逐条对号入座的实现约束。1. 每条列表项都应通向有用之处Every list item should lead somewhere useful when domain relationships exist.当实体之间存在领域关系时任何列表项都必须是可点击的入口而不是死胡同。代码中最直接的体现是列表 partial 用a classcard-link包裹整张卡片ObservationsPartialcomponents.templ#L328-L352把每条 observation 包成a href/dashboard/observations/{project}/{sessionID}/{syncID}PromptsPartial同样把每条 prompt 包成指向详情页的卡片链接ProjectsListPartialcomponents.templ#L500-L539把每个项目包成指向/dashboard/projects/{project}的card-link。对应测试 dashboard_test.go#L257-L321TestBrowserObservationsAreClickable、TestBrowserSessionsAreClickable、TestBrowserPromptsAreClickable逐一断言这些 href 确实存在。2. 优先使用连接流project → session → observation → full detailPrefer connected flows: project - session - observation - full detail.这是 Engram Dashboard 关联导航的黄金链路在 URL 结构上体现得尤为清晰这也是 SKILL 中connected navigation的核心实现项目卡片 →/dashboard/projects/{project}ProjectDetailPage项目详情页内通过#project-tabs三个子标签继续下钻到该项目的 observations / sessions / promptsSession 行 →/dashboard/sessions/{project}/{sessionID}SessionDetailPage页面展示会话元数据 该会话内的 observations 与 promptsObservation 卡片 →/dashboard/observations/{project}/{sessionID}/{syncID}ObservationDetailPage详情页除完整内容外还带LINKED SESSION面板与More from this Session相关列表。值得注意的细节observation/prompt 详情 URL 使用syncID而非纯数据库自增 ID测试TestObservationDetailURLUsesSyncIDdashboard_test.go#L1907与TestPromptDetailURLUsesSyncIDdashboard_test.go#L1947专门守护这一约定确保详情地址与同步合同保持一致。3. 空状态必须说明缺什么、以及什么能解锁数据Empty states must explain what is missing and what unlocks data.EmptyState是 Dashboard 的共享组件components.templ#L41-L48渲染NO SIGNAL YET小标题 主标题 说明文案配合 styles.css#L856-L871 的居中空状态样式。它在整个界面中大量复用并且文案始终在回答缺什么 / 怎么解锁首页无同步项目时Project metrics will show up here after the first successful sync.——明确指出数据从首次同步解锁无匹配的 observationNo observations match the current project, search text, or type filter.——指出是过滤条件导致为空无托管用户Create the first managed user above. Every managed user is deny-by-default and cannot sync any project until an admin grants one explicitly.——既说明缺什么也说明解锁路径管理员显式授权项目无项目授权This user is deny-by-default: it cannot sync any project until an admin grants one explicitly above.。4. 指标必须反映真实系统状态而不是装饰性计数器Metrics must reflect real system state, not decorative counters.首页指标条由DashboardStatsPartialcomponents.templ#L146-L222渲染四个指标卡Sessions / Observations / Prompts / Projects Synced全部来自cloudstore.DashboardProjectRow的真实聚合值汇总函数totalStatSessions、totalStatObservations、totalStatPrompts定义在 helpers.go#L207-L233。每个指标卡同时是stat-card-link点击直接跳转到对应的过滤视图——指标不仅真实还承担导航职责。Admin 侧同样如此AdminPage与AdminHealthPage展示的 DB 连接状态、Contributors、Sessions、Observations、Prompts、Projects、Paused Projects 均来自DashboardSystemHealth读模型components.templ#L755-L802其中数据库连接直接渲染Connected / Disconnected徽章。5. 详情页应展示元数据、内容与下一步相关链接Detail pages should show metadata, content, and the next relevant links.ObservationDetailPage是标准范本元数据表Chunk ID / Session / Created / Tool / Topic Key→CONTENT区块结构化内容渲染→LINKED SESSION面板 →More from this Session相关列表。PromptDetailPagecomponents.templ#L423-L461同样在元数据后追加LINKED SESSION与Other Prompts from this Session。SessionDetailPage则在会话元数据Session ID / Project / Directory / Started / Ended / Summary之外下钻展示该会话的 Observations 与 Prompts 两组列表。结构化内容渲染逻辑在 helpers.go#L343-L492自动识别**What/Why/Where/Learned**结构字段或##标题分节转成structured-block区块列表预览则通过renderInlineStructuredPreview压成单行摘要。组合规则什么时候用什么元素原文档给出四条组合规则配合DashboardStore接口dashboard.go#L59-L96能看清每种元素的适用场景指标用于定位而不是替代核心内容metric-strip/stat-card只承担概览与导航点击后进入真实内容页详情本身由 card / table / detail 承载可浏览实体用卡片密集对比的管理数据用表格observations 与 prompts 用.card列表有标题、预览、时间戳 footer而 sessions、contributors、admin projects、managed users、audit log 等密集行数据统一用.data-tablestyles.css#L819-L848会话表还包在.table-scroll中应对横向溢出测试TestSessionsTableWrappedInScrollContainer守护避免嵌套框架框数据面板使用.data-frame/.browser-content-frame单层边框.structured-block仅用于表达内容内部层级操作控件要紧贴其作用的实体项目同步开关直接放在项目行内AdminProjectsPage的switch-formcomponents.templ#L807-L882启用/禁用按钮紧挨目标项目托管用户的 Enable/Disable、Revoke 按钮同样各自贴在所属行内。关联导航的工程化分页与局部刷新导航不止是链接还包括列表翻页体验。Pagination结构helpers.go#L33-L38提供Offset/HasPrev/HasNext/ShowPagination/Start/End/PageNumbers全套能力parsePagination负责把?pagepageSize参数钳制在合法范围默认每页 10 条、最小 10、最大 100UI 提供{10, 25, 50, 100}四种档位helpers.go#L21-L30。两种分页条分工明确PaginationBarcomponents.templ#L53-L86完整页面跳转paginationURL保留现有查询参数project / q / type 等HtmxPaginationBarcomponents.templ#L92-L125以hx-get向指定 endpoint 发起局部请求hx-target指向内容容器、hx-include携带现有筛选条件翻页不刷新整页。注释特别强调 URL 使用?page而非page以避免产生畸形的?URL。对应测试TestBrowserPaginationHonorsPageParam、TestBrowserPaginationBeyondTotalClampsToLastPage、TestBrowserPartialRendersPaginationBardashboard_test.go覆盖了页码越界钳制与局部刷新渲染。核心不变式UI 不能撒谎skills/ui-elements/SKILL.md 的精神内核在 docs/codebase/dashboard.md#L45-L47 中被总结为一条硬性架构约束The UI cannot lie. If it shows sync paused, every push path must be blocked server-side.落实到实现上项目卡片上的Paused徽章ProjectsListPartial读取的是cloudstore.ProjectSyncControl.SyncEnabled而真正的执行阻断在cloudserver/cloudstore层如POST /sync/push、POST /sync/mutations/push的服务器端策略不是 templ/HTMX 里的摆设Admin 项目控制页AdminProjectsPage的每个开关都 POST 到/dashboard/admin/projects/{project}/sync由 cloudserver 强制执行并审计托管用户managed users页面的所有变更表单create / enable / disable / tokens / grants也全部指向 cloudserver 拥有的路由dashboard包只渲染状态与结果、绝不自行决定授权见 dashboard.go#L98-L108 的ManagedUsersStore只读边界注释非管理员访问 Admin 面返回 403AdminForbidden测试TestAdminProjectsRequires403ForNonAdmin、TestAdminUsersRequires403ForNonAdmin等一整套 403 用例守护此不变式。视觉系统TUI 对齐的设计令牌static/styles.css 顶部定义了与 TUI 视觉对齐的 CSS 变量--engram-base: #191724、--engram-surface: #1f1d2e、--engram-primary: #c4a7e7、--engram-success: #9ccfd8、--engram-warning: #f6c177、--engram-danger: #eb6f92等styles.css#L3-L20。语义化徽章StatusBadge据此着色decision/architecture → success、bugfix → danger、discovery/learning → warninghelpers.go#L571-L583头部与按钮使用等宽显示字体族营造终端气质section-kicker的大写字母间距排版用于区分层级。设计一个看起来属于 Engram的新组件应当复用这些令牌而不是另起一套色板。用测试守护这套规范internal/cloud/dashboard/dashboard_test.go是这套 UI 规范最完整的验收清单值得在新增组件时对照阅读可点击性TestContributorDetailPageRendersDrillDown、TestBrowserObservationsAreClickable、TestDashboardHomeStatCardsAreClickable断言 metric-card 必须包在a中且 href 指向有意义的钻取视图URL 约定TestObservationDetailURLUsesSyncID、TestPromptDetailURLUsesSyncID、TestObservationCardHrefIsNotMalformedHTMX 接线TestMountAddsHTMXNavigationWiringForBrowserProjectsAndAdmin、TestDashboardHomeHTMXWiring、TestBrowserPageHTMXWiring、TestProjectsPageHTMXWiring、TestMountHTMXAndProjectDetailParity空状态与降级TestMountStoreErrorsReturnDegradedNon200Responsesstore 出错时 htmx 路由返回独立 503 片段而非整页管理权限一整套 403 用例以及TestAdminSyncToggleHTMXPostIncludesFormFieldsHTMX 表单必须携带enabled字段。这些测试把每条列表项通向有用之处指标反映真实状态详情页带元数据与相关链接等抽象规则翻译成了可断言的机器行为——这正是 Engram UI 元素规范能长期不被架空的根本原因。后续新增页面或 partial 时遵循本文的规则并参照TestMount...系列测试补齐路由、认证、HTMX partial 与边缘用例即可。赞分享人工智能AI AgentAgent记忆MCP服务【免费下载链接】engramPersistent memory system for AI coding agents. Agent-agnostic Go binary with SQLite FTS5, MCP server, HTTP API, CLI, and TUI.项目地址https://gitcode.com/gh_mirrors/engra/engram点击查看免费下载相关推荐Hugo Blox Tag Cloud 组件实战为 Markdown Slides 幻灯片站搭建标签导航页Hugo Blox Tag Cloud 组件实战为 Markdown Slides 幻灯片站搭建标签导航页 导读 本文以 markdown slides 起始静态站点前端开发工具Metabase Dashboard Markdown标题卡片与文本卡片实战指南Metabase Dashboard Markdown标题卡片与文本卡片实战指南 导读 本文基于 Metabase 官方仪表板文档 dashboard ma数据分析数据可视化后端数据库客户端企业应用Nuxt UI v4 ContentNavigation 组件实战指南基于 nuxt/content 的手风琴式页面导航Nuxt UI v4 ContentNavigation 组件实战指南基于 nuxt/content 的手风琴式页面导航 导读 UContentNaviga前端UI组件上一篇WXT 国际化I18n完全指南从原生 browser.i18n 到 wxt-dev/i18n 的类型安全方案下一篇XGP存档提取终极指南简单三步实现游戏进度无损迁移创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

GoFrame:五分钟起一个企业级 HTTP 服务

GoFrame:五分钟起一个企业级 HTTP 服务

GoFrame:五分钟起一个企业级 HTTP 服务 【免费下载链接】gf A powerful framework for faster, easier, and more efficient project development. 项目地址: https://gitcode.com/GitHub_Trending/gf/gf 搭 Go 企业服务,头一个钟头往往耗在写 HT…

2026/10/9 5:06:14 阅读更多 →
openJiuwen agent-core 上下文引擎 CurrentRoundCompressor:当前轮工作压缩器的配置、原理与实战

openJiuwen agent-core 上下文引擎 CurrentRoundCompressor:当前轮工作压缩器的配置、原理与实战

人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习 【免费下载链接】agent-core openJiuwen agent-core可提供AI Agent开发、运行、调优与演进相关的全套SDK能力 项目地址: https://gitcode.com/openJiuwen/agent-core 点击查看 免费下载 导读 本文讲…

2026/10/9 5:06:14 阅读更多 →
鼠标离开父元素却被子元素触发?一文讲透mouseleave与mouseout的底层逻辑

鼠标离开父元素却被子元素触发?一文讲透mouseleave与mouseout的底层逻辑

这问题看起来简单,但实际项目里出现的频率远比想象中高,而且一旦踩进去,表现得特别像"玄学"。先还原一下典型场景:页面上有个父容器,里面铺了一组子元素,父容器上挂了一个鼠标离开事件&#xff0…

2026/10/9 5:06:13 阅读更多 →

最新新闻

最新IPA在线签名系统源码 全开源版本

最新IPA在线签名系统源码 全开源版本

源码下载:download.csdn.net/download/m0_66047725/93654842简介:最新IPA在线签名系统源码 全开源版本基于Thinkphp8.0VUE3开发 配合Zsign工具签名前台vue 后台使用art design pro管理框架后台带软件源自动拉取支持自助签名 支持在线签名测试环境&…

2026/10/9 5:36:41 阅读更多 →
2026最新版短视频去水印+视频号去水印小程序版本源码

2026最新版短视频去水印+视频号去水印小程序版本源码

源码下载:download.csdn.net/download/m0_66047725/93654835简介:2026最新版短视频去水印+视频号去水印小程序版本源码图片:安装教程:环境:PHP7.4MySQL5.7域名:必须备案,申请SSL证书…

2026/10/9 5:36:41 阅读更多 →
【ENSP】技巧

【ENSP】技巧

ENSP文章合集: https://wwaul.lanzout.com/b01gid75ah 密码:4r01 设备可视化操作 连线 通常,我们使用auto自动链接,但他没法选择端口及线的类型,比如交换机和路由器之前的链接,默认使用了交换机的e 0/0/3口交换机的g 0…

2026/10/9 5:36:41 阅读更多 →
GitHub日榜高效刷法:从star陷阱到技术选型的避坑指南

GitHub日榜高效刷法:从star陷阱到技术选型的避坑指南

每天早上到工位,我第一件事不是查邮件,而是先打开GitHub的Trending页面,看一遍日期最接近的日榜。这个习惯保持了一两年,从中挖到过不少能直接落地到项目的库,也踩过不少看起来很美、实际中看不中用的坑。GitHub热榜说…

2026/10/9 5:36:41 阅读更多 →
随机化学算法在电网连锁故障N-k分析中的Matlab实现

随机化学算法在电网连锁故障N-k分析中的Matlab实现

电网连锁故障分析这件事,做过的人都知道有多头疼。系统规模一上来,想判断哪几种故障组合最容易把电网拖入大停电,暴力枚举几乎不可行,蒙特卡洛又慢得让人失去耐心。去年我在做 N-k 安全分析时接触到了“随机化学”这个思路&#x…

2026/10/9 5:36:41 阅读更多 →
学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真

学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真

目录 手把手教你学Simulink——基于反电动势过零检测的直流无刷电机(BLDC)无感控制仿真 一、 引言:当“霍尔传感器”成为过去式——反电动势过零检测如何成就真正的“无感”BLDC? 二、 问题本质:反电动势过零的“物理机制”与“协同逻辑” 1. 核心物理机制 2. 协同逻辑…

2026/10/9 5:35:40 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →