MooTool Next-Compose 增量演进:MCP stdio 工具链、F03 格式化引擎与更新下载流的工程化落地
桌面应用开发工具【免费下载链接】MooToolHandy tool set for developers项目地址https://gitcode.com/gh_mirrors/mo/MooTool点击查看免费下载导读本篇以仓库中的增量开发记录 next-compose/docs/diff/561-mcp-reformat-update-env-net-vault-css-slice.mdDIFF-561为线索还原 MooTool Next-Compose 桌面版在一次功能切片中如何把 MCP stdio 工具、格式化引擎、更新下载流、Vault 底栏与 F08/F11/F25 工具 UI 逐个“可测化、可验证化”落地。文章会逐条对照行为清单深入对应 Kotlin 源码与桌面测试解释每个守卫条件、配置参数与验证脚本的实际含义。读完你可以直接读懂这套增量开发的工作方式并能在本地复现其验证流程。背景一次以“可测化”为验收标准的增量切片DIFF-561 承接 DIFF-560 已有的工作F17/F03enabled守卫、Vault GitsaveRemoteEnabled、MCP stdiomootool_encode、设置分类导航mooSettingsNavItem与 Compose 帧154明确“不重复”上一轮的守卫、Git 远程保存、设置导航与 MCP 编码链只专注于本条新增范围。同时文档记录了尚未达成的 parity-gap六套 CSS 逐选择器皮肤、产品主窗 Tab/IME/TCC PNG、P7 三平台安装等 substantial 缺口仍未关闭。从开发方法看这条文档的核心不是“堆功能”而是把六个横切面MCP 子进程、格式化引擎、更新流、Vault 底栏、工具 UI、CSS 组件全部收敛到可运行的测试与可复现的证据帧上这正是本仓库 next-compose/docs/acceptance.md 与 next-compose/docs/baseline.md 所强调的工程惯例。一、MCP stdio让mootool_hash/diff/json_query以子进程方式往返1.1 为什么用子进程 stdio 测试MooTool Next-Compose 通过 MCPModel Context Protocol把本机工具暴露给 AI 客户端。为了在 JVM 桌面工程里验证完整链路服务端启动 → 握手 → 工具调用 → 结果回传测试使用真正的StdioClientTransport拉起一个独立子进程而不是 mock 内部函数。这能同时验证命令参数解析、--access-file授权文件、MCP 协议初始化与 JSON 序列化。启动解析器见 McpLaunchResolver.ktfun clientLaunch(accessFile: Path): McpLaunch { val command ProcessHandle.current().info().command().orElse(javaBinary()) val args listOf(--mcp, --access-file, accessFile.absolutePathString()) return McpLaunch(command command, args args) }访问授权文件固定生成在configRoot/ai-integration/access.json测试中写入{version:1}作为最小授权面。1.2 三个子进程往返用例AiIntegrationMcpHashDiffJsonQueryTest.kt 一次测试覆盖三个工具工具调用参数示例断言要点mootool_hash{text:abc}返回 SHA-256 十六进制ba7816bf...15admootool_diff{left:one\n,right:two\n}返回非空且包含-或原文mootool_json_query{text:{\values\:[1,2]},path:$.values[*]}结果同时含1和2同步客户端统一requestTimeout(Duration.ofSeconds(15))通过McpClient.sync(transport)建立会话后依次callTool。1.3 时间戳与 UUID 往返AiIntegrationMcpTimestampUuidTest.kt 覆盖剩余两个工具其中mootool_timestamp的断言非常精确mapOf( text to 1970-01-01 08:00:00, direction to to-timestamp, zone to Asia/Shanghai, ) // 断言返回 0即“东八区 1970-01-01 08:00:00”恰好对应 Unix 纪元 0验证了时区归一化逻辑mootool_uuid则请求{count:2}并断言返回 JSON 数组长度为 2、且两个 UUID 互不相同。二、F03 格式化从“只守卫”到“引擎可测”2.1 Presentation 层的守卫与引擎调用DIFF-561 的关键是把 F03 格式化从“仅有 enabled 守卫”推进到真实调用引擎。层与层职责在 ReformatWiringPresentation.kt 中划分清晰fun runFormat(input: String, type: ReformatType, indent: Int): FormatRunOutcome runCatching { ReformatEngine.format(input, type, indent) }.fold( onSuccess { FormatRunOutcome.Success(it) }, onFailure { FormatRunOutcome.Failure(it) }, )同时提供一组守卫函数canRunFormat / formatActionEnabled!busy inputNotBlank即“忙时或输入为空时禁用格式化钮”copyResultActionEnabled / saveResultActionEnabled输出isNotBlank()才可复制/另存defaultSaveFileName按类型生成扩展名源码为空则回退为formatted.conf等默认名inferTypeFromFileNameconf/nginx → Nginx、java → Java、xml/xsd/svg → Xml、html/htm → Html其余返回null。错误消息也做了定位化当ReformatException携带line 1时返回reformat.error.located带行/列/原始消息参数否则返回通用键reformat.error.generic。2.2 引擎层四种格式的真实实现ReformatEngine.kt 覆盖 Nginx / Java / XML / HTML 四种类型Nginx自写 tokenizer处理引号、转义、#注释、{}、;与换行按{层级缩进缩进宽度coerceIn(1, 8)Java基于 JavaParser 的StaticJavaParser.parseDefaultPrettyPrinter语法错误抛出携带行列的ReformatExceptionXML安全化的DocumentBuilderFactory关闭 DOCTYPE 与外部实体、启用FEATURE_SECURE_PROCESSING、禁用 XInclude解析失败同样抛出带行列号的异常HTML基于 jsoup 的Parser.htmlParser()对文本/元素/注释/数据节点分块输出。每种类型都内置了samples示例文本方便直接试跑。演示把server { listen 80; location / { proxy_pass http://127.0.0.1:3000; } }交给ReformatEngine.format(input, ReformatType.Nginx, 2)即可得到缩进后的多行配置。2.3 对应测试覆盖ReformatWiringPresentationTest.kt 共 8 个用例覆盖失败 toast 判定、忙碌/空输入守卫矩阵、工具栏按钮 enabled 映射、默认另存文件名、Nginx 真实格式化输出、带行号的错误消息、扩展名推断、文件读取含类型推断。运行ReformatEngineTest.kt则可直接验证引擎各类型输出。三、更新下载流check(autoDownload)与applyAutoDownloadSetting的完整闭环3.1 协调器职责UpdateCoordinator.kt 用StateFlowUpdateUiState驱动 UI状态机包含idle → checking → available/downloading → ready → error/cancelled并对外暴露五个动作check(currentVersion, autoDownload, automatic) download() applyAutoDownloadSetting(enabled) cancel() openInstaller()关键点在于两处分支check(autoDownload true)且结果为Available且尚未下载就绪时自动触发performDownload()applyAutoDownloadSetting(true)时若上次检查已Available且满足UpdateAutoDownloadTrigger.shouldStartDownload(...)的条件未忙、有下载包、未就绪则立即开始下载。下载过程通过UpdateProgress(transferred, total)回报进度完成后status ready并写入安装包Path。3.2 引擎层清单解析与资产选择UpdateEngine.kt 负责可独立测试的纯逻辑平台/架构归一化darwin/win32/linux×arm64/x64版本比较compareVersions含 prerelease 分段、数字段零填充校验清单校验schemaVersion 1、status active、版本不重复、asset 的sha512必须匹配^[A-Za-z0-9/]{86}$、文件名不含路径分隔符且长度 ≤ 240、size 0、所有 URL 强制 HTTPS资产选择selectAsset按平台/架构匹配universal可兜底darwin仅接受dmg再按「架构精确优先 → priority → 包类型偏好」排序各平台包类型偏好顺序见packagePreference如darwin: dmg pkg。默认 feed 常量DEFAULT_FEED指向仓库的update-manifest.jsonMAX_MANIFEST_BYTES 2 * 1024 * 1024限制响应体上限协调器还允许通过环境变量MOOTOOL_COMPOSE_UPDATE_FEED_URL覆盖 feed 地址。3.3 两条下载流测试UpdateCoordinatorDownloadFlowTest.kt 使用 mock 的textFetcher返回 manifest与bytesFetcher返回 payload 流完成两条路径check(autoDownload true)→ 轮询state直到status ready且downloaded ! null再断言安装包文件真实存在且内容与 payload 一致先check(autoDownload false)等到Available再applyAutoDownloadSetting(true)最终同样收敛到ready。测试里的 manifest 通过manifestWithCompose构造其中UpdateEngine.detectIdentity()决定dmg/msi/deb包类型artifactName(0.2.0, ...)生成真实文件名如MooTool-Next-Compose-0.2.0-mac-aarch64.dmg。四、Vault / JSON 底栏重命名钮 enabled 与操作可见性JsonVaultFooterPresentation.kt 定义了底栏纯函数fun effectivePath(vaultSelectedPath: String, currentFile: String): String vaultSelectedPath.ifBlank { currentFile } fun canRename(isDirectory: Boolean?): Boolean isDirectory false fun canShowVaultActions(path: String, isDirectory: Boolean?): Boolean showFooter(path) canRename(isDirectory)语义清晰树选中优先、其次当前打开文件只有非目录条目才允许重命名/复制底栏仅在存在有效路径时展示。此外为 Vault Git 准备了两个前置守卫gitFlushSkipsWhenClean无打开文件或文档已干净时跳过写盘 flush与gitUntitledBlockKey打开的是草稿且无 Vault 文件时返回 i18n 键git.flush.untitled阻止 Git 操作。JsonVaultFooterPresentationTest.kt 逐条断言了 effectivePath、重复/重命名仅限文件、Git flush 跳过条件与未命名草稿阻止键UI 侧则由 JsonScreen.kt 通过Modifier.mooJsonVaultFooter().mooJsonVaultFooterActions()挂载底栏按钮簇的mooJsonVaultFooterActions修饰符定义在 Controls.kt8dp 水平、4dp 垂直内边距。五、F08 / F11 / F25三个工具模块的 UI 深度接线5.1 F08 环境变量envEnvWiringPresentation.kt 提供六组可测守卫refreshEnabled(!loading !saving)、exportEnabled(hasSnapshot)、addVariableEnabled(canEdit !saving)、saveEditorEnabled(非空 key !saving)、deleteRowEnabled(canDelete !saving)、confirmDeleteEnabled(!saving)以及快照采集runSnapshot、导出写盘runWriteExportUTF-8与 diff 预览runPreviewDiff。EnvWiringPresentationTest.kt 中有一个直接验证导出链路的用例构造包含user [A1]的EnvSnapshot后调用runWriteExport(file, snapshot)断言生成文件包含A1。5.2 F11 网络工具netNetWiringPresentation.kt 把命令启动前的校验收敛成Ready / Blocked结果类型portScanStart目标与端口规格均需非空端口串交给NetEngine.parsePortSpec校验如99999越界会被Blocked拦截pingStart/resolveStart/whoisStart/ipRangeStart经normalizeHostTarget/normalizeWhoisTarget归一化后判定runCommandEnabled(idle startReady)、stopEnabled(running)、outputActionsEnabled(输出非空)flushDnsActionEnabled/refreshLocalAddressesActionEnabled仅在无在途网络任务idle时可用IPv4 与长整型互转守卫通过真实调用NetEngine.ipv4ToLong/longToIpv4判定256.0.0.1、4294967296均被拒。NetWiringPresentationTest.kt 完整覆盖上述矩阵且runLocalAddresses断言返回的 IPv4/IPv6 快照至少有一个非空。5.3 F25 硬件信息hardwareHardwareWiringPresentation.kt 提供refreshEnabled(!loading)、copyReportEnabled(!loading hasGroups)以及本条新增登记的interfacesCommandEnabled(!loading !running)——文档注明该守卫先以单测登记供后续“顶栏接口命令扩展”使用。采集通过HardwareEngine.collect(loadSampleMs)完成取消异常CancellationException不触发失败 toast。六、样式与证据CSS 组件批次 设置·更新 UI 回归帧6.1 两个新修饰符本条新增两个 Compose 样式组件对齐 Electron 选择器修饰符Electron 对应实现mooSettingsUpdateActionsRow.settings-update-actionsfillMaxWidth().heightIn(min 34.dp)见 Controls.ktmooJsonVaultFooterActionsJSON Vault 底栏按钮簇padding(horizontal 8.dp, vertical 4.dp)见 Controls.kt同时 SettingsAboutPanel.kt 的下载按钮支持注入downloadButtonModifier这正是证据帧测试用来挂焦点请求器的扩展点SettingsUpdateActionsRow内“检查 / 下载 / 取消 / 打开安装包 / 打开发布页”五个按钮的显隐分别由UpdateAboutPresentation.showDownloadAction、showCancelDownloadAction、showOpenInstallerAction等函数控制进度由UpdateProgress.percent渲染。6.2 设置·关于页证据帧SettingsAboutCaptureTest.kt 是 Compose UI 回归测试在 720×520 的画布内搭建MooThemeSettingsAboutPanel通过FocusRequester让检查/下载/打开安装包按钮分别获得焦点captureToImage()截图后统计主题强调色0x316DC0的像素数 8即认为焦点环渲染成功。三帧分别写入152-compose-settings-about-update-check-tab-focus.png、155-compose-settings-about-update-download-tab-focus.png、161-compose-settings-about-open-installer-tab-focus.png位于 next-compose/docs/evidence/2026-09-15-inspector-screencapture/windows/。DIFF-561 对应的更新帧为文档明确标注这属于“非产品主窗”的设置页证据与尚未达成的“产品主窗 Tab/IME/TCC PNG”缺口相互独立。七、验证与复现DIFF-561 列出的验证入口可归纳为三组# 1. 恢复证据 PNG ./scripts/prepare-tray-screencapture-evidence.sh # 2. 桌面测试全集JDK 21离线模式 ./gradlew :composeApp:desktopTest --offline其中 MCP 子进程用例AiIntegrationMcpHashDiffJsonQueryTest/AiIntegrationMcpTimestampUuidTest、更新流用例UpdateCoordinatorDownloadFlowTest、各 Presentation 单测ReformatWiringPresentationTest/JsonVaultFooterPresentationTest/EnvWiringPresentationTest/NetWiringPresentationTest/HardwareWiringPresentationTest与证据帧用例SettingsAboutCaptureTest均会被desktopTest任务统一执行。注意前提条件JDK 21、Compose 桌面测试环境含图形栈且需能解析依赖离线模式下使用本地 Gradle 缓存。八、未做清单看清进度的边界文档以“未做”收尾明确三块尚未关闭的实质缺口六套 CSS 逐选择器皮肤Compose 版尚未把 Electron 的每套主题选择器逐一映射产品主窗 Vault Git / IME 手工 PNG现有证据帧仅覆盖设置页等非主窗界面P7 三平台安装/公证macOS 公证与 Windows/Linux 安装包发布链路未在本条验证Vault MCP stdio 端到端扩展与其余 substantial 引擎/UI 也未包含在内目标状态parity 全达成仍为未达成。这些边界信息同样可从 next-compose/docs/feature-parity.md 与 next-compose/docs/evidence/2026-09-14-parity-gap/results.md 中追踪。结语DIFF-561 展示了一种值得借鉴的桌面应用增量开发范式每个行为都必须有对应测试或证据帧兜底每个守卫都必须能从 Presentation 纯函数单测验证。从 MCP 子进程往返、F03 格式化引擎到更新下载流、Vault 底栏与 F08/F11/F25 工具 UI再到 CSS 组件与设置页回归帧一整套“行为 → 实现 → 测试 → 证据”闭环让功能切片既可被 AI/Agent 理解也可被 CI 持续验证。对希望复刻同类工程实践、或深入 MooTool Next-Compose 源码的开发者建议从文中所列 Presentation 层文件与对应测试开始研读。赞分享桌面应用开发工具【免费下载链接】MooToolHandy tool set for developers项目地址https://gitcode.com/gh_mirrors/mo/MooTool点击查看免费下载相关推荐MooTool Next Compose 开发切片解析F17/F03 引擎守卫、Vault Git remote、MCP stdio 编码与设置导航切片DIFF-560MooTool Next Compose 开发切片解析F17/F03 引擎守卫、Vault Git remote、MCP stdio 编码与设置导航切片DI桌面应用开发工具MooTool Compose 版 F03 格式化工具文件 Tab 接线与 Vault MCP 双库分页解读DIFF-572 切片MooTool Compose 版 F03 格式化工具文件 Tab 接线与 Vault MCP 双库分页解读DIFF 572 切片 DIFF 572 是 M桌面应用开发工具MooTool next-compose F03 格式化验收JVM 解析器驱动的 Nginx/Java/XML/HTML 多语言格式化实战MooTool next compose F03 格式化验收JVM 解析器驱动的 Nginx/Java/XML/HTML 多语言格式化实战 本篇围绕 MooT桌面应用开发工具上一篇Kaset高级玩法均衡器、同步歌词与智能混音三大进阶功能完整指南下一篇如何编写第一条AI元素隐藏规则以Stevos-AI-Blocklist源码为例的CSS选择器过滤列表教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AtCoder Beginner Contest 478

AtCoder Beginner Contest 478

AtCoder Beginner Contest 478 A - Grapes 题意:有N个人,编号为1到N,现在要把M颗葡萄分给他们。每次按照1, 2, …, N的顺序,每人分一颗,分到第N个人以后再从第1个人开始,直到所有葡萄分完。最后输出每个人分…

2026/10/16 6:27:53 阅读更多 →
google-api-nodejs-client 的 ondemandscanning 模块演进全解读:从 CHANGELOG 版本脉络到容器镜像漏洞扫描实战

google-api-nodejs-client 的 ondemandscanning 模块演进全解读:从 CHANGELOG 版本脉络到容器镜像漏洞扫描实战

后端 【免费下载链接】google-api-nodejs-client Googles officially supported Node.js client library for accessing Google APIs. Support for authorization and authentication with OAuth 2.0, API Keys and JWT (Service Tokens) is included. 项目地址: h…

2026/10/16 6:27:53 阅读更多 →
用Python和SQLite自建个人财务数据中台:从记账到自由分析

用Python和SQLite自建个人财务数据中台:从记账到自由分析

1. 从"financial-services"到个人财务数据中台:我为什么自建了一套记账分析系统先说个背景。我一直在关注"financial-services"这个方向,但说实话,金融服务的概念太大了——从银行App到支付工具,从个人记账软…

2026/10/16 6:27:53 阅读更多 →

最新新闻

面向对象核心知识详解:从类与对象到封装继承多态

面向对象核心知识详解:从类与对象到封装继承多态

最近重新翻出自己几年前记的一套面向对象基础笔记,边看边感慨。当年跟着一套讲得很细的Java基础课,逐行敲代码、抄概念、画内存图的日子,其实才是真正把编程底子打牢的阶段。面向对象这四个字,很多新手一听就觉得抽象,…

2026/10/16 7:14:04 阅读更多 →
antenna-forge 的核心信条:为什么『绝不伪造结果』是电磁仿真平台不可妥协的底线

antenna-forge 的核心信条:为什么『绝不伪造结果』是电磁仿真平台不可妥协的底线

【免费下载链接】antenna-forge AI-driven inverse antenna design with real NEC2 openEMS in the loop. Try the live in-browser playground. 项目地址: https://gitcode.com/gh_mirrors/an/antenna-forge 点击查看 免费下载 antenna-forge(YAF&…

2026/10/16 7:14:04 阅读更多 →
Markdown转知识卡片:解决公众号手机端排版难题的利器

Markdown转知识卡片:解决公众号手机端排版难题的利器

作为一个常年用 Markdown 码字、又经常要打理手机端内容的人,我最烦的一件事就是:电脑上排得好好的文章,一到公众号后台粘贴就彻底翻车。代码块没有高亮、列表层级全丢、整段文字挤成一堵密不透风的墙,读者拿手机看两行就划走了。…

2026/10/16 7:14:04 阅读更多 →
SSM+Vue实战:学生作业管理系统开发全攻略

SSM+Vue实战:学生作业管理系统开发全攻略

每年到毕业季,总有学生为毕设选题和实现头疼。如果你正好在找Java方向的系统类毕设,或者想做一个能跑通前后端分离的完整项目,“基于SSMVue的学生作业管理系统”是个非常经典且性价比极高的选择。这个项目不复杂但五脏俱全,覆盖了…

2026/10/16 7:14:04 阅读更多 →
REPENTOGON 的 Lua Vector 类深度指南:运算符元方法、FromAngle 与 nil 安全修复

REPENTOGON 的 Lua Vector 类深度指南:运算符元方法、FromAngle 与 nil 安全修复

游戏开发插件系统 【免费下载链接】REPENTOGON Script extender for The Binding of Isaac: Repentance 项目地址: https://gitcode.com/gh_mirrors/re/REPENTOGON 点击查看 免费下载 Vector 是《以撒的结合:忏悔》(The Binding of Isaac: R…

2026/10/16 7:14:04 阅读更多 →
OCR自动标注工具实战:检测识别与人工复核的全流程解析

OCR自动标注工具实战:检测识别与人工复核的全流程解析

说到OCR自动标注,做过数据标注或者AI数据集相关工作的人应该都不陌生。不管是票据、合同、书页扫描件,还是截图、卡片、白底商品图,只要涉及文字信息结构化,第一步都是把图片里的文字区域框出来,再把文字内容读出来&am…

2026/10/16 7:13:04 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →