尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

面向 Agent 与开发者的 MiaoYan 仓库工程指南:构建、测试、CI 与高风险区域全解析

面向 Agent 与开发者的 MiaoYan 仓库工程指南:构建、测试、CI 与高风险区域全解析 桌面应用CLI【免费下载链接】MiaoYan⛷ Lightweight Markdown app to help you write great sentences.项目地址https://gitcode.com/gh_mirrors/mi/MiaoYan点击查看免费下载MiaoYan 是一个基于 Swift/AppKit 的轻量级 Markdown 编辑器macOS 原生应用本指南以仓库根目录的 AGENTS.md 为核心骨架结合 Package.swift、.github/workflows/ci.yml、Helpers/Diagnostics.swift 等源码证据系统讲解该仓库面向 AI Agent 与人类开发者的协作约定本地构建验证命令、单元测试接入、CI 流水线、错误上报机制、发布渠道以及当前维护者明确标注的高风险代码区域。读完本文你可以安全地在该仓库中定位问题、修改代码、跑通验证并理解每一次改动可能触碰的隐式约束。仓库定位与维护模式MiaoYan 是一个用 Swift 编写、基于 AppKit 的轻量级 Markdown 编辑器通过 GitHub Release、Sparkle 自动更新和 Homebrew 三种渠道直接分发下载。自 2026-09-28 起该开源仓库进入维护模式只接受严肃的缺陷修复it takes serious fixes only。所有新功能与界面工作集中在私有仓库tw93/MiaoYan-ProApp Store 版、iPhone/iPad 应用该仓库的任何内容不会回推到这里两边都需要的修复会以独立 commit 手工移植进来。这一点决定了本指南的基调在此仓库提交改动应当以修复缺陷、保持既有行为一致性为优先而非引入全新功能。技术栈一览从 Package.swiftswift-tools-version: 6.0与 AGENTS.md 可确认核心技术选型能力技术备注Markdown 解析swift-cmark-gfm1.0.2GitHub Flavored Markdown 语法语法高亮Highlightr2.3.0编辑器与预览代码高亮数学公式 / 图表LaTeX、Mermaid、PlantUML由预览渲染管线支持幻灯片模式Reveal.js---分隔符切分幻灯片自动更新Sparkle2.8.0直接下载版更新通道快捷键KeyboardShortcuts2.4.0用户可自定义快捷键自动格式化Prettier0.2.1编辑器内集成自动格式化平台声明为 macOS 11 与 iOS 18后者的 App Store 版本实际构建于私有仓库。笔记存储采用文件系统方案文件夹嵌套、文件系统监听、自动保存与版本历史编辑器提供实时预览、语法高亮、键盘快捷键与 Prettier 集成的自动格式化。仓库目录地图AGENTS.md 给出了明确的目录职责划分与 ARCHITECTURE.md 的顶层结构相互印证Controllers/视图控制器与窗口控制器AppKit。Views/UI 组件NSView/NSOutlineView/NSTableView子类。Business/模型与业务逻辑Storage、Note、Project、WikilinkIndex 等核心域。Helpers/工具与服务高亮、格式化、主题、诊断。Extensions/对 Foundation / AppKit 类型的 Swift 扩展。Resources/内置资源含DownView.bundle预览用的 HTML/CSS/JS。MiaoYan.xcodeproj/Xcode 工程与版本设置pbxproj。Package.swiftSwift Package 依赖声明与支持平台。scripts/本地构建、发布与工程维护脚本scripts/release-ci/负责发布说明渲染、appcast、公证与打包辅助。skills/miaoyan/对外发布的 Agent Skill受版本管理描述 MiaoYan 的 Markdown、PPT 与miaoCLI 接口面。.github/RELEASE_NOTES.mdGitHub Release 与 appcast body 的公开发布说明来源。.github/workflows/仅含ci.yml发布构建不由受版本管理的 release workflow 驱动。本地构建与验证命令AGENTS.md 给出的标准命令集是任何改动进入 CI 前的准入清单# 1. Debug 构建Swift / 工程改动的默认验证方式 xcodebuild -project MiaoYan.xcodeproj -scheme MiaoYan -configuration Debug build # 2. 清理 xcodebuild clean # 3. 跑单元测试注意 CODE_SIGNING_ALLOWEDNO xcodebuild test -project MiaoYan.xcodeproj -scheme MiaoYan -destination platformmacOS CODE_SIGNING_ALLOWEDNO # 4. 静态检查--strict 是 CI 门槛 swiftlint lint --strict swift-format lint --recursive . --strict # 不加 --strict 的本地通过仍可能被 CI 拦截 # 5. 构建发布产物Developer ID、公证、Sparkle bash scripts/build.sh # 6. 仅在 pbxproj 重置后重新接线测试 target 时使用 ruby scripts/add_tests_target.rb关键原则优先使用范围最窄的相关命令Swift 或工程改动一律以完整 App 构建作为默认验证。需要注意swift-format的--strict不是可选项——项目的 .swift-format 关闭了代码库刻意违反的规则PascalCase 枚举成员、retroactive NSTextStorageDelegate、块注释、forEach剩余的告警是真实的会直接卡住 CI。新增源文件的 pbxproj 注册四个位置该项目使用经典 pbxproj groups没有文件系统同步组filesystem-synchronized groups。新增一个源文件必须在MiaoYan.xcodeproj/project.pbxproj中手动注册四处PBXBuildFile条目PBXFileReference条目所属 group 的children列表target 的PBXSourcesBuildPhasefiles 列表。做法是模仿一个现有同层条目并为每个新对象使用全新的 24 位十六进制唯一 ID。这一步极易遗漏是新手贡献者最常见的失败点。单元测试实践单元测试位于MiaoYanTests/下覆盖面聚焦纯逻辑接口ImageLinkParser、WikilinkIndex.updateNote、String扩展等对应仓库中的 ImageLinkParserTests.swift、WikilinkIndexTests.swift、StringExtensionsTests.swift 等测试文件。UI 流程不做 XCUITest而是靠构建后的人工冒烟验证。新增测试的规范步骤创建MiaoYanTests/SubjectTests.swiftXCTest若测试方法触碰MainActor隔离类型则给方法加MainActorsetUp()覆写不能是MainActor需要在测试方法内部构造隔离对象。与 App 源码一样手动注册到 pbxproj 的同一四个位置但挂到MiaoYanTestsgroup 和MiaoYanTeststarget 的PBXSourcesBuildPhase参照现有NoteFrontmatterTests.swift条目。scripts/add_tests_target.rb在 target 已存在时是空操作它只在 pbxproj 重置后做引导且它依赖的xcodeprojgem 在本机并未安装。本地跑xcodebuild test ...通过后推送。为什么必须带 CODE_SIGNING_ALLOWEDNO本地测试命令必须带CODE_SIGNING_ALLOWEDNO因为MiaoYan.app使用的开发签名身份与MiaoYanTests.xctest使用的逐开发者身份最终得到不同的 Team ID导致 dyld 拒绝把测试 bundle 加载进宿主 App。这不是本地特例.github/workflows/ci.yml对每次xcodebuild调用都传了同一标志。CI 流水线解读.github/workflows/ci.yml在每次 PR 与 push 到main时运行共四个 jobbuild-macmacOS Debug 构建 单元测试运行于macos-15固定DEVELOPER_DIR为 Xcode 16.3先-resolvePackageDependencies再xcodebuild build随后xcodebuild test全程CODE_SIGNING_ALLOWEDNO免签名输出经xcbeautify转为 GitHub Actions 格式。lintSwiftLint swift-format双 --strictbrew install swiftlint后跑swiftlint lint --strict再安装 swift-format 并跑swift-format lint --recursive . --strict。任何 warning 都是合并门槛。release-notes-smoke发布说明渲染冒烟在 ubuntu 上跑scripts/release-ci/notes_to_html.sh与render_release_body.sh渲染.github/RELEASE_NOTES.md并断言输出非空。这样坏掉的发布说明文件会在发布前而不是发布中被发现。version-consistency版本三元组一致性仅在 tag pushrefs/tags/V*时触发从project.pbxproj提取所有MARKETING_VERSION与CURRENT_PROJECT_VERSION值逐一断言等于去除V前缀的 tag。注意它收集的是去重后的全部值而非第一个匹配因为 V3.5.1/#524 事故正是单个 target 失同步造成的详见下文发布说明规范。CI不运行公证与 Sparkle 签名脚本——它们需要维护者托管的签名密钥只在维护者本机执行。错误上报机制trackError 单一漏斗AppDelegate.trackError(_:context:)是运行时错误的唯一上报入口Controllers/AppDelegate.swiftDEBUG仍打印到 stdout保留给 Xcode 控制台工作流。RELEASE路由到 Helpers/Diagnostics.swift写入一条.fault级os_log同时写入~/Library/Logs/MiaoYan/diagnostics.log的 JSON 行环形缓冲上限 50 条每条含ts/ctx/domain/code/desc字段。50 条的容量约对应 50 KB 文件足够容纳一次典型事故的可粘贴诊断块。接入新失败路径时应当调用AppDelegate.trackError(error, context:)而不是print(...)或try?静默吞掉context字符串是维护者排查时唯一的 breadcrumb。实际调用点遍布各处例如 ViewControllerEditor.swift 的格式化失败、ViewControllerAction.swift 的重命名失败以及编辑器所有者漂移守卫 ViewController.swiftcontext: ViewController.textDidChange.ownerGuard。工程约定与工作规则AGENTS.md 将产品偏好与硬性代码规则并列是贡献者必须遵守的隐性约束。产品偏好付费用户视角默认按 App Store 付费版的精致度做每次视觉/交互改动先问对得起付费用户吗。预览边界图片、视频、iframe 必须保持在max-width: 100%内宽表格允许在.table-scroll内滚动但不得撑宽页面PDF/PNG 导出必须把表格适配到输出宽度导出内容不能滚动。改表格布局时要同时复核初始渲染、增量更新与重复导出。设计参考UI/CSS 抄不出来时参考维护者已满意的样式~/www/weekly、~/www/tw93.github.io不要凭空发挥。视觉方向macOS 26 风格 sidebar玻璃态、透明、最新一代 SF Symbols是长期方向但不要整体重设计——一次整机改造已被维护者否决打磨侧栏/按钮应做小步增量间距、对齐、hover、focus、字重。快捷键约束cmd-数字已占满 0–51 侧栏、2 笔记列表、3 Toggle Preview、4 Toggle Presentation、5 TOC、0 Actual Size。新增前先grep keyEquivalentN Resources/Localization/Base.lproj/Main.storyboard核对绑定只存在于 storyboard代码里没有 keyBindings 表。工作规则UI 更新保持在主线程。除非不变量明显且局部否则避免 force unwrap。新代码优先AppEnvironment.current.service而非直接访问单例。.swiftlint.yml 中的no_direct_singleton_in_new_code自定义规则在配置里是severity: warning但 CI 跑--strict会把它提升为合并门槛存量调用点已豁免grandfathered不要把新文件加进豁免列表。文件写入限定在用户文档或 App 控制的路径内。没有明确用户需求不引入网络调用、shell 执行或宽泛的文件访问。编辑器核心、预览管线与既有 storyboard 场景保持 AppKit仅全新的独立面板可通过NSHostingView承载 SwiftUI不得借此把 SwiftUI 推进EditTextView/MPreviewView/ViewController。删除流程必须可恢复笔记与附件应走与当前上下文匹配的 App 废纸篓或系统废纸篓而不是直接消失。App 废纸篓可能解析为卷上系统废纸篓同一目录对已在此处的条目再次调用FileManager.trashItem会原地改名使其复现需用AppIdentifier.removedFromTrashKey标记并在 Trash 项目内排除该标记保证 Finder 恢复到普通项目后仍然可见。iCloud 同步与符号链接目录属于文件系统敏感面刻意解析路径避免循环或重复索引。高风险区域深度解析改动前必读AGENTS.md 用大量篇幅标注了当前风险区域——这是全文技术密度最高的部分任何修改触碰这些区域都必须理解其隐式不变量。编辑器缓冲区所有权#543在预览/演示/PPT 模式下EditTextView.note跟随列表选择而textStorage保留的是最后编辑的笔记内容二者合法地分叉。EditTextView.storageNoteViews/EditTextView.swift记录缓冲区属于哪条笔记所有整体存储赋值必须走publishStorage(_:owner:)Views/EditTextView.swift它同时写入字节并记录 owner所有整缓冲区持久化必须走saveTextStorageContent(to:)Views/EditTextView.swift它会拒绝跨笔记写入owner 与目标 URL 不一致时报错并调用trackError绝不允许仅凭EditTextView.note或表格选择来持久化缓冲区也绝不用EditTextView.note与自身比较作守卫——正是这个同义反复tautology导致了 V4.0.0 的内容互换事故。侧栏横向布局横向布局由SidebarProjectView.tile()独占Views/SidebarProjectView.swiftreload 与 resize 后outline 框架与第一列必须匹配 clip-view 宽度且 clip-view 水平原点必须保持为零。不要用事件特定的宽度重置替换这个不变量。Wikilink 与反向链接依赖 Business/WikilinkIndex.swift 及笔记加载、搜索、侧栏刷新行为。保持[[note]]解析、递归搜索与废纸篓排除一致测试见 WikilinkIndexTests.swift。iCloud 同步位于 macOS 存储与 Business/CloudSyncManager.swift。iCloud 不可用时要验证回退行为。废纸篓处理横跨 Business/Storage.swift、Business/Note.swift、侧栏拖放、附件清理与系统废纸篓回退。成功移除的笔记必须在其 watcher、编辑器、生命周期 flush 或上传回调再次保存之前退役retire对应Note实例对已消失文件的既有笔记写入必须失败关闭UI 行只能在文件系统操作成功后移除。版本历史位于 Business/NoteVersionManager.swift 与 Controllers/VersionHistoryViewController.swift。保持文件 IO 不在主线程、UI 更新在主线程。导出管线PNG 导出每次调用都必须准备当前 DOM、注入导出样式并等待媒体清理会移除这些样式所以缓存中的笔记内容不能证明后续导出已就绪。Mermaid 与 PDF 导出横跨 Business/HtmlManager.swift、Helpers/PdfExportController.swift、Extensions/MPreviewViewExport.swift。捕获前必须等待图片与 Mermaid 渲染完成测试见 MermaidExportTests.swift。笔记列表搜索Controllers/ViewControllerData.swift 先按文件夹范围过滤再把纯值NoteSearchCandidate交给 detached task 中的NoteContentMatcher后者从磁盘读取未加载的正文主线程只做快照与应用结果。绝不在主线程加载或小写化笔记正文标题匹配不带.md扩展名。异步加载异步笔记/图片/文件加载是刻意的不要为大型笔记或预览重新引入主线程阻塞读取。附件约定与图片上传附件遵循共享的i/约定图片放在笔记旁i/文件夹引用为![](/i/name)App Store iPhone 应用读取同一约定必须保持稳定。图片上传通过本地 PicGo/PicList HTTP 端点127.0.0.1:36677Helpers/ClipboardManager.swift。macOSInfo.plist的 ATS 经NSAllowsLocalNetworking放行该端点不要放宽回NSAllowsArbitraryLoads。Markdown 预览通过loadFileURLfile://加载而非本地 Web 服务器所以 ATS 不约束预览渲染。Markdown 渲染单一漏斗renderMarkdownHTMLBusiness/Markdown.swift是预览、分栏、导出、PPT 与动作的唯一 markdown→HTML 漏斗。后渲染变换如 GitHub Alerts 引用块改写为 callout必须放在该函数末尾绝不能在各个调用点分别做。Alert 样式位于DownView.bundle/css/typography.css深色覆盖在theme-dark.css.darkmode *颜色规则强制显式重述深色值。Frontmatter 剥离是逐表面不变量每个输出笔记或 markdown 内容的表面macOS 预览/导出、appcast/发布说明渲染、任何未来导出都必须剥离开头的 YAML frontmatter新渲染表面应在同一 commit 中加上剥离逻辑---date/image---曾原样泄漏进 appcast body。Note.cleanMetaData是规则本身。CRLF 陷阱\r\n是一个 Swift 字素range(of: \n---)永远无法匹配它需同时搜索\n---与\r\n---。TypographyCleaner 受保护区域Helpers/TypographyCleaner.swiftEdit → Clean Typography绝不能改写受保护区域围栏/行内代码、数学、链接目标、wikilink、裸 URL、frontmatter。扩展分段解析器不要绕过它。Helpers/HtmlToMarkdown.swift 仅在存在块结构标签时才转换粘贴的 HTML保持纯文本粘贴对来自编辑器复制的代码的权威性不要移除这个门槛。本地化新增项新菜单项需要 storyboard 条目加上 ObjectID 键控的.title行且要写入全部四个Main.stringses/ja/zh-Hans/zh-Hant新 toast 需要以英文文本为 key 写入全部四个Localizable.stringsBase 没有 Localizable.strings英文回退到 key 本身。漏掉一个文件会静默地把英文发到该语言。发布渠道与版本一致性本仓库只发布直接下载版GitHub Release 资产加 appcast 条目由 Sparkle 从https://miaoyan.app/appcast.xml原地更新并被 Homebrew 接收。用scripts/build.sh构建Developer ID、公证、Sparkle。Mac 与 iPhone 的 App Store 构建只来自私有tw93/MiaoYan-ProApp Store 用户永远不会看到本渠道的版本与 appcast。两个关键事实appcast.xml位于 miaoyan.app 站点而非本仓库scripts/release-ci/update_appcast.sh生成条目scripts/build.sh打印 enclosure 行。enclosure URL 默认是miaoyan.app/Release/新条目必须改指向已发布的 GitHub Release 资产历史条目保留原 URL。两条安装路径都取发布资产而非 tag tarballhomebrew-cask 的url形如releases/download/V4.3.0/MiaoYan_V4.3.0.zipappcast enclosure 同形。没有任何东西固定archive/refs/tags/*.tar.gz的哈希所以无 release 的 tag 可删可重打而不破坏消费者而删除有 release 的 tag 会立刻弄坏brew install --cask miaoyan因为 cask 点名该资产。字体与预览渲染的隐式规则字体菜单偏好控制器被复用菜单打开时才刷新按已安装家族集合分类缓存不是按数量重建菜单时保留选中的存储家族。默认字体TsangerJinKai02TsangerJinKai02-W04再次成为编辑器、预览与界面的默认字体——但仅按名称因为它未随包分发再分发需要仓耳授权个人非商业使用免费。未安装前全部用FontConfiguration.fallbackFontPingFang渲染已存储的字体选择永不被改写迁移或字体缺失都不改写ViewController监听NSFont.fontSetChangedNotification选中字体一出现就应用。下载按钮打开字厂直链.ttfURLFontCatalog.retiredBundledDownloadURLMiaoYan 从不托管该文件。字距单一数值UserDefaultsManagement.letterSpacingEm0.02em同时驱动编辑器 kern、界面标签按各标签字号缩放与 typography.css 中的.heti。之前固定 0.5pt/0.6pt 与 0.04em 是 2022 年为 LXGW WenKai 调的会把 PingFang 与所有拉丁字母拉散三者必须一起改。两种拼写Business/FontConfiguration.swift 的默认与回退是 PostScript 名TsangerJinKai02-W04、PingFangSC-Regular而字体弹窗写入的全是家族名PingFang SC因弹窗由availableFontFamilies构建。任何比较存储值与默认值、或与弹窗行匹配的逻辑都必须先经FontCatalog.familyName(forStored:)解析两侧——直接比原始字符串曾让预览的拉丁排序在用户打开弹窗后失效。Latin 归属FontCatalog.fontStack(forStored:)决定谁负责 Latin判断标准是用户是否选中了该字体而非是否 CJK 字体。PingFang回退的 Latin 交给ui-sans-serif, system-ui, -apple-system用户选中的字体自己带队整行仓耳今楷一类的 Latin 与其中文配套。CSS 兼容下限CSS 属性的最低版本须高于MACOSX_DEPLOYMENT_TARGET当前 12.0不同属性最低版本不同时保留支持性回退并在两个引擎上验证无变量行为。粗体与代码字体预览对粗体保留所选字体不要重新引入更重字体的替换V4.3.1 曾把 W05 换进标题与加粗文字导致变淡维护者要求换回 W04。正文用-webkit-font-smoothing: subpixel-antialiasedantialiased加在html上曾让每段都变细。代码字体只作用于围栏代码块pre code且不在blockquote内行内代码与引用代码继承正文字体。存储默认是FontConfiguration.followTextFont编辑器内用编辑器字体、预览内用预览字体栈先查UserDefaultsManagement.codeFollowsText再决定是否把codeFontName当作字体。编辑器中的原始 HTML 标签用CodeBlockHighlighter.highlightInlineHTML着色绝不用highlightCode那会给它们代码字体和.codeBlock标记。PPT 字体ppt.html只加载 reveal 样式表不加载base.css/typography.css所以--text-font*变量到不了它--r-main-font是 reveal 唯一读取的变量。改预览字体时必须同时检查previewStyle()的 PPT 分支。发布说明规范Release NotesTag 格式大写Vx.y.z。一次发布一批节奏约每月一次V4.0.0→V4.1.0→V4.2.0 分别间隔 29 与 28 天版本发布后后续工作等待下一批。只有本版本引入的回归或用户别无他法的修复才值得追加 tagV4.3.0 与 V4.3.1 相隔 1.4 小时发布导致所有 Sparkle 用户一个下午更新两次是反面教材。版本三元组对齐MARKETING_VERSION与CURRENT_PROJECT_VERSION均在MiaoYan.xcodeproj/project.pbxproj必须与发布 tag 对齐。Sparkle 用 appcast.xml 的sparkle:version对比CFBundleVersion映射自CURRENT_PROJECT_VERSION而非CFBundleShortVersionString两者一旦分叉用户会陷入无限更新提示循环V3.5.1 事故#524。发布说明来源.github/RELEASE_NOTES.md 是公开发布说明的唯一来源# V{x.y.z} {Codename} {emoji}标题 中文编号列表 ---分隔 与中文一一对应的英文编号列表。scripts/release-ci/render_release_body.sh将其渲染进 GitHub release body 与 appcast 内容代号遵循scripts/release-ci/generate_release_content.sh中的列表。发布标题形如V4.0.0 Valstrax 起草前先gh release view上一个 release照抄其 body 形态而非凭记忆重写。发布收尾用gh api添加六个正向 reaction1、laugh、heart、hooray、rocket、eyes并读回确认绝不添加-1或confused。Sparkle 签名直接下载版必须用 MiaoYan release key而非默认的 Sparkle Keychain 账户。推送 appcast 改动前用scripts/release-ci/verify_sparkle_signature.sh对照已发布 ZIP 与 App 内嵌的SUPublicEDKey验证签名仅签名修正的 appcast 只在 ZIP 字节与长度不变时有效。DMG、ZIP 与 Sparkle 元数据携带同一版本appcast 指向的 ZIP 必须是签过名的那个文件绝不能用重新压缩的副本。发布自动化依赖维护者托管的签名、公证与 Sparkle 凭据不要记录或提交本地凭据路径、私钥文件名或机密值。调查顺序定位问题时的标准路线当任务范围不明确时AGENTS.md 规定了从宽到窄的调查顺序ARCHITECTURE.md——真实的顶层依赖图Controllers/AppDelegate.swiftControllers/MainWindowController.swiftControllers/ViewController.swift再收窄到Helpers/、Views/、Business/、Extensions/下的相关文件仅当涉及构建、签名、target 成员或版本行为时才查看相关 Xcode 工程设置。除非任务明确针对它们否则避免对build/、.build/、dist/与内置 Web 资产做宽泛扫描。验证清单提交前自检AGENTS.md 的 Verification 节给出了按改动类型的验收标准Swift 改动跑上述 Debugxcodebuild命令。UI/交互修复启动构建产物、实际走一遍改动流程再报告完成绿色构建不是视觉证据。若首次修复不奏效停止猜测先加#if DEBUG运行时日志取证再改下一处代码。Lint/格式改动跑 SwiftLint 与 swift-format 检查。发布/签名改动验证版本对齐并检查相关仓库脚本不要假设存在受跟踪的release.yml。发布说明改动检查 .github/RELEASE_NOTES.md 与受影响的scripts/release-ci/渲染器。导出改动把 Mermaid、图片、PDF 分页与异步就绪行为放在一起验证。纯文档改动检查链接与命令准确性。这份清单加上本文梳理的构建命令、测试接入流程、CI 门槛、错误上报约定与各高风险区域的不变量构成了在 MiaoYan 开源仓库中安全协作的完整操作手册——无论贡献者是 AI Agent 还是人类开发者。赞分享桌面应用CLI【免费下载链接】MiaoYan⛷ Lightweight Markdown app to help you write great sentences.项目地址https://gitcode.com/gh_mirrors/mi/MiaoYan点击查看免费下载相关推荐Vim 仓库开发协作指南面向 AI Coding Agent 与贡献者的贡献规范、构建测试与代码风格全解析Vim 仓库开发协作指南面向 AI Coding Agent 与贡献者的贡献规范、构建测试与代码风格全解析 本文以 Vim 官方仓库根目录的 AGENTS.m开发工具代码编辑器WPScan 仓库开发指南面向 AI Agent 的架构解析、测试与构建实践WPScan 仓库开发指南面向 AI Agent 的架构解析、测试与构建实践 本文以仓库根目录的 AGENTS.md https://link.gitcode网络安全漏洞扫描渗透测试应用安全CLI面向 AI 编码 Agent 的 Vim 仓库开发指南构建、测试与代码规范全解析面向 AI 编码 Agent 的 Vim 仓库开发指南构建、测试与代码规范全解析 本指南以 macvim 仓库根目录的 AGENTS.md https://l开发工具桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表