Engram Cloud Dashboard 架构解析:服务端渲染、cloudstore 强约束与同步暂停闭环
人工智能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 的 Cloud Dashboard云端浏览器控制台展开说明它如何在internal/cloud/dashboard中完成服务端渲染templ HTMX如何经由cloudserver的认证边界挂载并最终依赖cloudstore的 Postgres 读模型、项目同步控制与审计日志实现UI 绝不撒谎的核心不变量。读完你将掌握 Dashboard 的目录职责划分、会话/管理员边界、分页与 HTMX partial 模式以及同步暂停从按钮点击到POST /sync/push被 409 拒绝的完整闭环。Dashboard 在 Engram 分层中的位置Engram 是面向 AI 编码代理的持久记忆系统Cloud Dashboard 是它的云端状态浏览器 UI。它的第一设计原则写得很明确The dashboard is a server-rendered browser UI over cloud state; it must never simulate policy that is not enforced server-side.即UI 属于internal/cloud/dashboard而持久状态与策略执行属于cloudstore/cloudserver。任何只在模板里假装生效的控制都不允许存在。整体请求路径如下继承自 dashboard.mdBrowser GET /dashboard/* │ ▼ internal/cloud/cloudserver auth/session/admin boundary │ ▼ internal/cloud/dashboard handlers templ components static assets │ ▼ DashboardStore interface │ ▼ internal/cloud/cloudstore Postgres read model controls audit logBrowser 只与cloudserver的认证/会话/管理员边界打交道边界之后才进入 dashboard 的处理器与 templ 组件handlers 不直接碰数据库而是通过DashboardStore接口向cloudstore请求数据。cloudstore在 Postgres 之上维护读模型read model、逐项目同步控制project controls和相关事件审计audit log。关键文件与职责边界文件职责internal/cloud/dashboard/dashboard.go路由挂载、handlers、DashboardStore接口定义internal/cloud/dashboard/*_templ.go生成并入库的 templ 组件components_templ.go、layout_templ.go、login_templ.go等internal/cloud/dashboard/static/styles.cssDashboard 样式internal/cloud/dashboard/middleware.go会话/路由保护internal/cloud/dashboard/principal.go操作者视觉身份Operator 身份视图internal/cloud/cloudserver/cloudserver.go认证边界、Dashboard 挂载与同步传输internal/cloud/cloudstore/dashboard_queries.goDashboard 查询/读模型internal/cloud/cloudstore/project_controls.go逐项目同步控制internal/cloud/cloudstore/audit_log.go相关事件审计值得注意的分层约束handlers 只允许存在于 dashboard 包查询与读模型只允许存在于 cloudstore 包策略强制例如同步暂停只允许发生在 cloudserver/cloudstore。templ 是编译期生成并提交到仓库的dashboard.go顶部有//go:generate go -C ../../.. tool templ generate -path ./internal/cloud/dashboard因此生成组件必须与改动一并保留。中央不变量UI 不能说谎Central dashboard invariant是本文档的灵魂如果 UI 显示 sync paused同步已暂停那么每一条 push 路径都必须在服务端被阻断包括POST /sync/push与POST /sync/mutations/push。如果 UI 显示管理控制项那么这些控制必须映射到可强制执行、可测试的行为上。源码中这条不变量有完整实现。以 chunk 推送为例cloudserver.go 在接收 chunk 之前先做push-path pause guardif storeForControls, ok : s.store.(interface { IsProjectSyncEnabled(project string) (bool, error) }); ok { enabled, err : storeForControls.IsProjectSyncEnabled(project) ... if !enabled { // 先写审计再返回 409 auditor.InsertAuditEntry(..., cloudstore.AuditEntry{ Action: cloudstore.AuditActionChunkPush, Outcome: cloudstore.AuditOutcomeRejectedProjectPaused, ReasonCode: sync-paused, }) jsonResponse(w, http.StatusConflict, map[string]any{ error_class: constants.UpgradeErrorClassPolicy, error_code: sync-paused, ... }) } }这里用结构型接口断言structural type assertion检查 store 是否实现了IsProjectSyncEnabled从而不扩张ChunkStore接口——暂停能力对既有同步路径是透明的增强。对 mutation 推送同样有守卫见 mutations.goREQ-414 保证两条路径返回一致的 409 envelope。对应测试在 cloudserver_test.goREQ-109与 mutations_test.go断言响应体包含sync-paused并验证审计行被捕获。也就是说Dashboard 上的暂停开关不是前端开关而是一个真正写入 Postgres 控制表、并在两个独立推送端点上被强制执行的服务端策略。挂载与路由表cloudserver在routes()中调用dashboard.Mount(s.mux, dashboard.MountConfig{...})cloudserver.go把 Dashboard 挂到自身 mux 上。MountConfigdashboard.go是 dashboard 包与宿主解耦的关键全部以闭包注入能力RequireSession(r) error会话校验ValidateLoginToken(token) error/CreateSessionCookie(w, r, token) error/ClearSessionCookie(w, r)登录令牌与 cookie 生命周期IsAdmin(r) bool、CanManageManagedUsers(r) bool、GetDisplayName(r) string管理员边界与操作者身份Store DashboardStore读模型入口StoreForRequest(r) (DashboardStore, error)为受管主体返回不可变的 request-owned store 视图ManagedUsers ManagedUsersStore受管用户渲染边界MaxLoginBodyBytes int64登录表单体积上限StatusProvider SyncStatusProvider同步状态显示。Mountdashboard.go注册的路由大致分为几组开放路由GET /dashboard/health返回{status:ok,subsystem:dashboard}、GET/POST /dashboard/login、POST /dashboard/logout、GET /dashboard/static/从嵌入式StaticFS提供静态资源。浏览路由会话保护/dashboard、/dashboard/stats、/dashboard/activity、/dashboard/browserobservations/sessions/prompts 及其{sessionID}详情、/dashboard/projects、/dashboard/contributors。管理员路由/dashboard/admin、/dashboard/admin/projects、/dashboard/admin/users、/dashboard/admin/health、/dashboard/admin/audit-log。同步控制变更POST /dashboard/admin/projects/{name}/sync这是 mutation不是 dashboard 读取因此刻意不走request read scoping见下方注释。受管用户managed users的变更路由创建/启用/禁用/令牌/授权则直接注册在 cloudserver 的 mux 上而不是走dashboard.Mountcloudserver.go因为它们需要 admin identity store、令牌 hasher 与审计辅助走的是/admin/*JSON API 同一套 policy/store/audit 路径而非重新决策。每个受保护 handler 都通过requireScopedSession包装dashboard.go先requireSession认证再通过StoreForRequest派生 request-local store把不可变副本放入复制的 handlers 值从而避免 principal 作用域数据污染进程级MountConfig或 CloudStore 缓存解析失败则 fail closed在 handler 观察到共享 store 之前就终止请求。会话边界与登录安全细节middleware.go 的requireSession定义了未登录行为的两条分支HTMX 请求带HX-Request: true头返回401HX-Redirect到登录页让前端 partial 直接跳转普通浏览器请求303 SeeOther重定向到dashboardLoginPathWithNext保留next参数。登录流程dashboard.go有三道防护MaxLoginBodyBytes用http.MaxBytesReader限制表单体积超限返回 413空 token 与非法 token 分别渲染带错误提示的LoginPage成功后才创建会话 cookie。会话 cookie 由 cloudserver 注入cloudserver.go关键属性HttpOnly、Secure视请求判断、SameSiteLax、Path/dashboard、MaxAge8 小时。next参数登录后回跳由sanitizeDashboardNext把关helpers.go只接受以单/开头且不以//开头的路径拒绝绝对 URL、含 host/scheme/userinfo 的地址并做path.Clean规范化最后强制限定在/dashboard前缀内——这是防开放重定向的落地实现。操作者身份由 principal.go 承载Principal是一个只读视图字段来自MountConfig闭包handlers 中不做任何 context 读取身份的操作Design Decision 6。空显示名回退为OPERATOR并携带IsAdmin()与CanManageManagedUsers()两个权限位。DashboardStore 接口与读模型DashboardStoredashboard.go是 dashboard 唯一的取数通道按功能分为浏览查询ListProjects、ProjectDetail、ListContributors、ListRecentSessions/Observations/Prompts分页查询ListProjectsPaginated、ListRecentObservationsPaginated、ListRecentSessionsPaginated、ListRecentPromptsPaginated、ListContributorsPaginated均返回(rows, total, error)详情查询GetSessionDetail、GetObservationDetail、GetPromptDetail、GetContributorDetail系统状态SystemHealth、AdminOverview、ListDistinctTypes同步控制ListProjectSyncControls、GetProjectSyncControl、SetProjectSyncEnabled、IsProjectSyncEnabled审计ListAuditEntriesPaginated(ctx, filter, limit, offset)。与之并行的是ManagedUsersStore只读ListHumanUsers它刻意与 contributor 分析分离受管人类用户 ≠ 贡献者分析cloud-user-token-management PR4。受管用户的变更由 cloudserver 拥有并做策略门控dashboard 只渲染结果并链接到 cloudserver 拥有的路由。读模型侧dashboard_queries.gobuildDashboardReadModel把 chunk 行按createdAt → chunkID → project → createdBy稳定排序后折叠出项目统计、贡献者、session/observation/prompt 三张实体表。行结构如DashboardObservationRow携带SyncID作为详情页 URL 段、ChunkID跨 mutation 保留、Type、Title、Content、TopicKey、ToolName等字段。查询层还定义了一组专用错误dashboard_queries.goErrDashboardProjectInvalid/Forbidden/NotFound、ErrDashboardContributorNotFound、ErrDashboardSessionNotFound/ObservationNotFound/PromptNotFound。classifyStoreErrordashboard.go把它们逐一映射为语义化 HTTP 状态与页面文案——例如 session 缺失显示 Session not found 而不是误导性的 Project not foundR5-4默认分支返回503与 temporarily unavailable。分页与 HTMX partial 契约Dashboard 所有列表页采用统一的shell partial模式整页导航渲染 templLayout外壳HTMX 请求只交换内容片段。以/dashboard/contributors为例dashboard.go壳层不查 store列表由GET /dashboard/contributors/list的ContributorsListPartial加载。分页参数helpers.go默认每页10条范围10~100UI 选择器提供10 / 25 / 50 / 100四档allowedPageSizesPagination提供Offset/Start/End/HasPrev/HasNext/ShowPagination/PageNumbers超过 7 页时用-1表示省略号。关键设计是先取数、后钳位parsePaginationRawhelpers.go在总行数未知时不预先 clamp 页码拿到 store 返回的真实 total 后再由reclampPaginationhelpers.go钳位若请求页超出末页则触发recoverPaginationRowshelpers.go三层回退初次取数Tier 1在钳位后的 offset 上重取Tier 2失败时保留原行而非报错R3-7 优雅降级仅当重取失败且原行为空时回退到第 1 页Tier 3R4-9。部分端点遵循partial-only 契约R6-2即便收到非 HTMX 请求也绝不套Layout外壳出错时只返回片段如EmptyState(Service Unavailable, ...)配 502。这套恢复逻辑在 pagination_recovery_test.go 中有系统性覆盖。时间与文本渲染也有细节formatTimestamphelpers.go兼容 RFC3339 与 SQLite 风格字符串显示格式02 Jan 2006 15:04时区遵循ENGRAM_TIMEZONE环境变量回退系统本地时区空值显示-、可为空语义显示Never。结构化观察内容**What**/**Why**/**Where**/**Learned**:字段由renderStructuredContent识别并渲染为分块卡片。同步暂停控制的端到端闭环暂停控制的数据面在 project_controls.goIsProjectSyncEnabledproject_controls.go控制行缺失时默认启用sql.ErrNoRows → true查询出错时fail closed返回(false, error)防止未知状态被静默放行SetProjectSyncEnabledproject_controls.goINSERT ... ON CONFLICT DO UPDATE的 UPSERT写入sync_enabled、paused_reason、updated_by、updated_at并在写入后invalidateDashboardReadModel()使读模型缓存即时失效无需等待下一次 chunk 写入ListProjectSyncControlsproject_controls.gocloud_chunks的 distinct 项目与cloud_project_controls的 UNION配合COALESCE(c.sync_enabled, TRUE)让从未配置过但已同步 chunk的项目也以启用状态出现在列表里。UI 侧POST /dashboard/admin/projects/{name}/syncdashboard.go是管理员专属的变更入口enabled只接受字面量true/false否则 400reason 非空则写入paused_reason变更通过SetProjectSyncEnabled落库时带上当前操作者显示名。对 HTMX 请求返回200 HX-Redirect对普通表单返回303。于是完整闭环是管理员在/dashboard/admin/projects点击暂停提交enabledfalse与原因cloudstore.SetProjectSyncEnabledUPSERTcloud_project_controls并失效读模型缓存之后任何 chunk push 或 mutation push 到达cloudserverIsProjectSyncEnabled返回false请求在写审计后以409error_codesync-paused被拒绝Dashboard 的 Paused 徽标与暂停审计来自同一张控制表UI 与后端状态永远一致。审计日志筛选与深链审计写入侧audit_log.go定义了常量AuditActionChunkPush/AuditActionMutationPush与AuditOutcomeRejectedProjectPausedAuditEntry携带Contributor/Project/Action/Outcome/EntryCount/ReasonCode/MetadataMetadata以 JSON 入库nil 存 NULL。InsertAuditEntry同步写入、错误不吞。读取侧GET /dashboard/admin/audit-log壳与GET /dashboard/admin/audit-log/listpartial均管理员门控由parseAuditFilter解析筛选dashboard.gocontributor、project、outcome文本筛选from/to时间筛选接受RFC3339或 **date-onlyYYYY-MM-DD按 UTC 零点**两种格式非法格式返回400而非静默丢弃JW6buildAuditListURLhelpers.go把筛选参数编码进初始hx-get让?contributoralice这样的深链在刷新后依然保留筛选JW2。Dashboard 变更检查清单对任何修改 Dashboard 的提交本文档要求逐条核对UI 表示真实状态而非假控制管理员策略在cloudserver/cloudstore强制执行而非只在 templ/HTMX 里生效handlers 只放在internal/cloud/dashboard查询/读模型只放在internal/cloud/cloudstore生成的 templ 组件随改动一起保留测试覆盖路由、认证/会话/管理、HTMX partial 与边缘情况。测试与验证指引路由/会话/管理员/HTMX/边缘测试见 internal/cloud/dashboard/dashboard_test.go分页恢复三层回退见 internal/cloud/dashboard/pagination_recovery_test.go暂停项目 chunk push 返回sync-paused见 internal/cloud/cloudserver/cloudserver_test.go暂停项目 mutation push 返回sync-paused并写审计见 internal/cloud/cloudserver/mutations_test.go受管用户路由与 Dashboard 挂载的协同见 internal/cloud/cloudserver/dashboard_admin_users_test.go。进一步阅读整体分层见 docs/codebase/interfaces.md 与 docs/codebase/sync-and-cloud.mdDashboard 所展示的同步状态语义ReasonPaused、ReasonAuthRequired、ReasonTransportFailed等定义于 internal/cloud/constants/constants.go。赞分享人工智能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点击查看免费下载相关推荐Spectrum 服务端渲染SSR架构解析Hyperion 渲染服务器开发与运行指南Spectrum 服务端渲染SSR架构解析Hyperion 渲染服务器开发与运行指南 Hyperion 是 Spectrum 开源社区平台中专司服务端渲染后端前端即时通讯社交vue-vben-admin 组件设计3 层目录 2 个 api看懂它怎么拼中后台vue vben admin 组件设计3 层目录 2 个 api看懂它怎么拼中后台 打开 vue vben admin 的 packages 目录组件前端如何从零跑通 Autoware面向新手的完整安装指南如何从零跑通 Autoware面向新手的完整安装指南 Autoware 是世界上最活跃的开源自动驾驶软件栈负责从定位、感知到规划控制的完整链路。本文面向零基自动驾驶上一篇Longhorn存储容量管理终极指南阈值设置与自动扩容配置详解下一篇PX4 Autopilot 向 Betaflight 飞控板刷写 PX4 Bootloader 的三种方法与固件构建指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

xberg PHP 插件 API 实战:使用 clearOcrBackends() 清空 OCR 后端注册表

xberg PHP 插件 API 实战:使用 clearOcrBackends() 清空 OCR 后端注册表

后端AI 应用NLP 【免费下载链接】xberg Polyglot document intelligence with a Rust core: extract text, metadata, images, tables, and structured data from 106 formats across 140 file extensions, plus code intelligence for 371 languages. Fifteen bindings, with …

2026/10/10 22:49:15 阅读更多 →
OpenClaw Skill 扩展功能详解:文件 / 办公 / 浏览器自动化一站式方案(含安装包)

OpenClaw Skill 扩展功能详解:文件 / 办公 / 浏览器自动化一站式方案(含安装包)

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

2026/10/10 22:28:37 阅读更多 →
/bili/前缀不是路径,而是视频平台微前端运行时协议

/bili/前缀不是路径,而是视频平台微前端运行时协议

1. 这个问题背后的真实战场:不是选工具,而是选架构思维“原生插件、启动器、/bili/ 前缀,该选哪一种”——看到这个标题,我第一反应不是去查文档,而是立刻打开本地开发环境,复现了三类方案在真实业务场景下…

2026/10/10 22:47:54 阅读更多 →

最新新闻

基于CNN的图像风格迁移毕设实战:VGG19原理、PyTorch源码与调参避坑指南

基于CNN的图像风格迁移毕设实战:VGG19原理、PyTorch源码与调参避坑指南

简介:这是一份面向计算机、人工智能、通信工程等专业学生与教师的毕业设计级项目源码,基于CNN卷积神经网络实现图像与视频风格迁移,适合课程设计、毕设答辩或项目初期立项演示,也便于具备一定Python基础的学习者在此基础上二次开发…

2026/10/11 1:25:27 阅读更多 →
深度学习台风路径预测:CNN+LSTM模型实战与工程避坑指南

深度学习台风路径预测:CNN+LSTM模型实战与工程避坑指南

简介:面向深度学习与气象交叉领域的开发者与科研人员,这份资源聚焦“基于深度学习的台风路径预测”完整项目,覆盖卷积神经网络、长短期记忆网络、自编码器等模型在历史气压、风速、海洋温度数据上的训练与调优,系统梳理数据预处理…

2026/10/11 1:25:27 阅读更多 →
基于Python的PCA人脸识别:从原理到调参的完整实践指南

基于Python的PCA人脸识别:从原理到调参的完整实践指南

简介:面向大学生课程设计与机器学习初学者的PCA人脸识别算法资源包,基于Python完整实现了从数据预处理、协方差矩阵计算、特征值分解到特征脸构建与识别的全过程。包内共21个文件,包含4个Python源码模块、16张运行效果或步骤示意图&#xff0…

2026/10/11 1:25:27 阅读更多 →
可复用Python GAN工程包:绕过90%初学者崩溃现场

可复用Python GAN工程包:绕过90%初学者崩溃现场

简介:本资源是一份面向深度学习初学者与实践者的生成对抗网络(GAN)入门级Python实现项目,聚焦GAN核心原理的代码化呈现与可视化验证,帮助读者理解判别器与生成器的协同博弈机制。压缩包共11个文件,含5张训练…

2026/10/11 1:25:27 阅读更多 →
Wand-Enhancer:免费解锁 Wand(WeMod)Pro 功能的本地补丁指南

Wand-Enhancer:免费解锁 Wand(WeMod)Pro 功能的本地补丁指南

Wand-Enhancer:免费解锁 Wand(WeMod)Pro 功能的本地补丁指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wa…

2026/10/11 1:25:27 阅读更多 →
PCIe 4.0时代U.2连接器组装检测设备选型与工艺控制指南

PCIe 4.0时代U.2连接器组装检测设备选型与工艺控制指南

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

2026/10/11 1:24:27 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →