English
原生插件管理与诊断中心
macOS 候选版的侧栏使用 SwiftUI 显示插件管理和诊断中心,两页消费共享运行时 API。插件版本、权限、依赖、来源策略和项目执行权限仍由 TypeScript 运行时决定。
插件管理
- 发现:搜索目录、筛选已安装或可更新插件,查看版本、权限、依赖和 README。安装前显示完整计划,计划变化后必须重新确认。
- 已安装:启停、回滚、保留数据的移除,以及本地声明式插件目录的链接、重新读取和取消链接。取消链接保留源文件。
- 来源:预览目录及发布者信息后添加来源,查看来源错误,刷新或移除自定义来源。来源导入链接只填写草稿。
- 宿主组件:查看随 App 分发的组件,切换可选组件并在明确操作后重启运行时。外部代码扩展可选择本地
distribution.json、审阅后登记、启停及移除登记;所有操作均使用原生界面。
发现、已安装和插件详情显示声明中的专属图标。相对路径通过当前插件来源、包名和版本读取, 内联图像和 HTTPS 图像沿用同一展示组件;缺失、无效或读取失败时显示默认图标。 刷新目录或重新读取本地插件也会刷新同版本资源。外部图像请求不携带本机运行时凭据。
“检查更新”立即打开原生弹窗,分别显示检查中、无更新、检查失败、需要重新检查和应用结果。检查失败后清空上次的候选列表;插件或来源变化后,应用按钮停用,重新检查才能继续。一次应用会消费该检查结果,失败后的重试也需要重新检查。权限或依赖边界变化的插件仍逐个审阅。
网页内的 /marketplace/plugins/:sourceId/:packageName 详情入口会转到原生详情,保留来源和带 scope 的包名。后台网页迟到的路由不会抢走当前原生页面。诊断的插件入口复用同一详情流程。
发现与已安装列表支持系统行选择、双击打开详情和右键复制包名,也可使用底部的“查看详情”按钮。搜索会去掉首尾空白,在插件和来源分区保持一致;筛选或刷新移除已选项时清除选择。首次加载显示进度,空列表区分未安装、无匹配和读取失败,并提供清除筛选、查看来源或重试。刷新失败保留已有目录并提示结果已过期。
插件移除、回滚和来源移除的确认绑定当前运行时连接与目录。断开重连、相关目录事件、重新读取、切换分区或离开插件页都会清除未提交的确认;迟到的旧按钮不能操作新连接或覆盖新确认。点击确认同步消费本次审阅,再提交操作;回执失败时把目录标记为过期,须重新读取当前状态并再次审阅。移除仍保留用户数据及本地源文件。
外部宿主扩展
“添加外部扩展”打开系统 JSON 文件选择器。预览只读取声明并解析模块位置,不导入模块、不写入登记;原生弹窗显示扩展名称、ID、声明路径、模块的真实路径,以及同 ID 的已有登记。点击“信任并添加”才保存,下次重启运行时加载。此信任针对本地模块位置,允许这些位置的后续代码修改;它不是不可变代码摘要、沙箱或项目执行授权。
审阅结果有效期五分钟,最多同时保留八份,每次确认只消费一次。声明、解析出的模块位置或已有登记变化时拒绝保存;失败或结果未知后须重新读取并审阅。取消弹窗或离开页面使审阅失效,重连后的迟到响应不能恢复弹窗。启停与移除携带完整已显示登记,在运行时串行写入时比较,避免覆盖已被替换的扩展。移除只删登记,保留源文件及用户数据;当前已加载的代码仍需重启才停止生效。
随 App 提供的必需组件不能通过外部扩展入口覆盖;可选内置组件仍使用原有开关。外部登记接口只接受原生独立 bearer,网页 cookie 和内嵌网页桥接不能登记代码。项目继续默认 untrusted,扩展登记不会授予项目信任。
原生待办快捷操作
首页使用连续的系统内容背景。今日重点可收起并独立滚动;来源使用系统 Picker, 列表筛选与任务内容使用原生 List,选中态随窗口焦点和系统外观变化。 窄窗口将列表筛选收为顶部菜单,较窄的任务栏把快捷操作移到第二行; 分类与列表仍可组合筛选,来源图标、详情、状态确认和复制入口保持可用。
首页的今日重点、待办列表和插件工作台的工作项支持直接打开详情,并通过来源提供的状态候选修改状态。 来源图标沿用插件声明,界面不根据名称猜测业务图标。描述以可选择的纯文本显示,不执行 HTML 或读取其中的远端资源。
状态修改先展示事项名称、当前状态、目标状态和来源要求的必填字段;点击确认才提交一次。 确认前会重新检查插件操作、账号、事项状态和可用流转,过期或已变化时要求重新读取。 缓存快照只展示已载入信息,不能借助快捷操作写入。提交未得到明确回执时保留结果不确定提示,不自动重试; 确认后刷新来源并保留待办筛选。运行时重启和正常退出同样检查尚未结束的事项写入。
这些操作复用通用 Integration 契约。未声明读取或状态能力的来源不会由原生客户端补造操作; 来源自身仍负责权限、工作流条件和写入前的状态核验,客户端的重新读取不等于原子并发控制。
2026-10-27 的 Release 实机验收使用独立 profile 和仅写本地状态的测试来源,已确认完整详情、 取消后零写入、明确确认后单次写入和列表刷新;普通同步心跳保留确认页及搜索条件。 插件列表与详情的专属图标、缺失图标和损坏资源的默认图标均已截图核对。 真实账号来源另行验证了详情、工作流候选和必填字段阻止空值提交,未修改真实事项状态。 验收实例及其 sidecar 已关闭,日用原生版保持运行。
诊断中心
诊断页显示当前 Node 的路径和版本、错误/警告统计、来源状态、文件位置及处理入口。文本搜索、级别和来源筛选可以组合使用;“清除筛选”恢复全部结果。来源被移除后自动恢复全部来源筛选。
刷新失败时保留上次结果并标记过期。未完成、空、跳过或失败的来源不能被显示为全部检查通过。打开项目诊断只进入项目查看或审阅流程,不改变信任状态,也不执行命令。
诊断列表支持行选择和双击详情。原生详情弹窗提供完整消息、文件行列、诊断代码、来源说明和检查时间,可复制单条诊断,或打开对应处理页面。复制内容保留过期结果提示。刷新后详情读取同一 ID 的新结果;问题消失或运行时断开时关闭详情,筛选隐藏的问题不再保持列表选择。来源的失败说明也显示在来源折叠区中。
可重复验证
构建候选版后运行:
sh
pnpm build:macos
pnpm test:macos-management
pnpm test:macos-host-extensions也可给验证命令传入另一份 .app 的绝对路径。验证器使用包内 sidecar、临时 HOME/profile 和本地声明式插件,检查链接、README、启停、损坏诊断及处理目标、修复、取消链接、源文件保留和未信任项目零执行。它还确认匿名请求和网页 cookie 都不能访问原生宿主组件 API,并关闭自己的进程、清理临时文件。不访问真实账户或正式 profile,不下载远端插件。
外部宿主扩展验证器使用专用的本地代码 fixture,验证取消、明确登记、重启后加载一次、停用后的重启不加载、重新启用、移除及再次重启不加载。加载标记只写入临时目录;已有登记发生变化时拒绝旧请求,网页 cookie 无法调用任一写入接口。每次启动使用同一隔离 profile,项目保持未信任且运行记录为空,结束后清理自身进程和临时文件。
Swift 模型测试覆盖更新检查失败、过期结果、应用后的重新检查、断开后的迟到响应、组件读写交错、插件详情导航、搜索空白处理、移除/回滚确认失效及未知回执后的重新审阅、诊断筛选与选择、详情更新/关闭以及复制内容的定位和过期说明。运行方式见 原生候选验收。
2026-10-23 解锁后的 macOS 26.6.2 实机走查使用最新 Release 的独立应用副本、临时 profile 和本地声明式插件。已确认:
- 插件页布局与空状态、发现/已安装切换、系统目录选择器、链接与重启后保留、⌘F 聚焦搜索、中文粘贴查询及首尾空白、无匹配状态与清除筛选、列表选择后详情按钮启用,以及本地插件停用/重新启用。
- 来源页的内置目录与表单,公开内置来源的只读预览与取消;取消后没有新增来源。
- 宿主组件开关保存和“需要重启运行时”提示,外部扩展系统文件选择器的 Escape 取消;未登记或加载外部代码,测试开关已恢复。
- 诊断页的 Node 路径/版本、损坏插件的错误与文件路径、中文搜索、级别/来源组合筛选、清除筛选、来源详情展开。筛选为空仍显示全局错误统计,没有误报全部通过。
- 在仅暂停测试副本的 sidecar 后重新检查,真实请求超时显示错误与上次结果提示,原有诊断保留。恢复 sidecar、修复夹具并重新检查后,旧错误与过期提示消失,显示零错误及已完成检查无问题。
- 缩小窗口后的插件列表与来源表单布局,主要控件没有遮挡。
只链接自建声明式夹具,未执行项目命令、连接账户或修改正式资料。为逐项区分无障碍操作,启停开关和插件/来源行内操作补充了所属对象名称;新 Release 副本的 AX 树已确认插件、内置宿主组件及来源操作显示对应名称。AX 标签核对仍不能替代 VoiceOver 验收。
插件详情入口会稳定触发电脑控制服务自身崩溃,工具报告 Sky Computer Use native pipe closed before response;系统崩溃报告中的进程为 SkyComputerUseService,栈包含 Array.remove(at:) 断言,Craft Hub 和 sidecar 没有退出。重置工具不能读取仍打开的弹窗,重启测试副本后可继续普通页面走查。这不是锁屏,也不能据此确认详情已打开或判断为 Craft Hub 崩溃。详情与确认弹窗的焦点/Escape、安装计划变更、诊断处理跳转、输入法组合输入和 VoiceOver 仍待真实 UI 验收。中文粘贴测试不代表输入法验收。自动化模型与包内 API 验证不能替代这些检查。
同日 14:24 再次复核:独立验收副本的已安装插件、对象标签和列表选择正常,点击“查看详情…”后 AX 读取与单独截图均使电脑控制服务断开。两份新增系统报告仍是该服务的 SIGTRAP / Array.remove(at:),App 与 sidecar 仍存活;仅结束本次副本后两者均退出。未修改产品以绕过工具故障,未将这次重试计作详情或截图验收通过。
同日 16:50 后解锁复验,使用 acceptance-20261023-browser-policy/report.json 对应候选包的独立副本补验:更新弹窗正确显示无更新、禁用应用按钮,Escape 返回列表;系统目录选择器链接测试插件成功,重启后登记保留。损坏临时声明后诊断显示 1 项错误及路径,恢复声明并重启后显示 0 项错误和已完成检查无问题,两个页面的实际布局已截图核对。
本轮点击插件详情和诊断的“管理插件”入口后,电脑控制服务分别生成 16:56、16:59 的 SIGTRAP / Array.remove(at:) 报告;不能据此确认详情内容或处理跳转完成。原生 App 与 sidecar 均保持存活,只重启了本次隔离副本。详情、确认与完整键盘验收仍保留为待验收项,已请求人工核对详情内容与 Escape。未执行插件命令或修改正式资料。
同日 18:49 按维护者要求再次代为检查:插件列表、已选中对象与详情按钮可读取;点击详情后,观察、单独截图和重连均返回服务管道关闭。新增系统报告仍为 SkyComputerUseService 的 SIGTRAP / Array.remove(at:),测试 App 与 Node 持续存活。无法确认 README、权限区或 Escape 行为,本次没有新增通过项,也未因工具故障修改详情页。架构扫描确认该测试 App、其 Node、已安装原生版及 Electron 的 Mach-O 均包含 arm64;Sparkle 为通用二进制。报告在 interaction-trace-20261023-final/architecture-ui-recheck.json。
同日 21:37 使用当前交付包和简短 README 的另一份隔离插件再次定位:原生目录及两个测试条目可读取并截图,详情仍触发同一电脑控制服务断言,未能完成确认弹窗验收。继续使用该包内运行时和隔离的 HTTPS 目录/npm 仓库,验证依赖版本及权限变化后旧计划返回 409 且不新增下载、损坏归档不产生安装登记、恢复后按新计划真实下载并安装两个插件。项目及运行记录均为空,临时信任只传入测试子进程;未改产品或系统信任库。此处是包内安装链路证据,不能替代原生安装确认、取消及 Escape。完整隔离与清理记录见候选验收清单。
XCTest 插件详情复验(2026-10-24)
维护者明确允许使用 XCTest 后,复用此前的 Craft Hub Links Test.app 和本地“原生验收插件”,完成实际点击、截图及键盘验收。该旧 Release 副本为 arm64,deep/strict 签名校验通过;本轮没有替换产品二进制或改变插件声明,不作为最新候选包的重新构建验收。
- 从原生侧栏进入插件管理,选择“已安装”,点击“原生验收插件”打开详情。
- 截图核对名称、包名、
local来源及1.0.0版本。权限区显示声明中的commands;README 显示中文说明及“本地声明式目录”“取消链接保留源文件”两项内容,没有加载错误或遮挡。 - 实际发送 Escape 后,截图确认返回已安装列表;XCTest 断言详情 sheet 数量为零、“关闭”按钮消失、插件条目仍在且 App 保持前台。
成功结果为 apps/macos/build/plugin-details-xctest-20261024/Result-20261024-011043.xcresult,一个 UI 测试通过,耗时约 12.5 秒。attachments-011043/ 保存打开前、详情及 Escape 后三张截图;final-acceptance-report.json 记录二进制摘要、资料比较和进程清理。首次按 bundle ID 查找失败、第二次把侧栏文字当作 AX label 查找失败的记录均保留;最终按 .app 路径启动,并使用实际 AX value 定位。两次失败均未进入详情。本轮不使用此前会崩溃的电脑控制服务。
清理脚本通过 finally 和信号处理关闭临时 App、sidecar 及 XCTest 运行器,并按 PID、可执行路径和启动时间核对退出;日用原生 App 保持运行,应用包、插件源文件和资料保留。安装/移除确认、诊断详情及处理跳转、完整焦点顺序、组合输入和 VoiceOver 仍需单独验收;本次权限展示仅覆盖该插件声明的 commands。
XCTest 安装、移除与诊断补验(2026-10-24)
最新 closeout-20261024-candidate 的标准入口隔离副本通过完整 XCTest:安装审阅的 Escape/取消不新增下载;依赖从 1.0.0 变为 1.1.0 并新增 read-project-files 后,先显示变化提示和新权限,重新确认才安装。移除的 Escape/系统 Cancel 保持安装状态,确认后仅目标消失、依赖仍在。
损坏本地声明后,诊断详情实际显示错误、插件名称、文件位置和检查时间;Escape 关闭,重新打开并点击“管理插件”进入对应插件详情。截图核对中文 README、commands 权限及包名/来源/版本;修复夹具后刷新显示零错误和零警告。一个端到端用例约 63.1 秒通过,13 个检查点保持零项目、零运行记录。
证据为 apps/macos/build/closeout-ui-20261024/Result-20261024-171431.xcresult、对应报告及 screenshots/ 七张窗口截图。系统初始化超时和四次脚本时序/定位失败保留;修正的是验收脚本,产品代码未改。每轮临时 App、sidecar 和 XCTest 运行器均已清理,日用及另行要求保留的体验实例保持运行。完整焦点、组合输入、VoiceOver、其他诊断目标及权限组合仍须后续验收,详见 工程收尾与剩余清单。