OpenSquilla Windows 签名缓存安装包交接验收:verified-cache 模式的设计、预检与证据模型

📅 发布时间:2026/10/9 2:31:22
OpenSquilla Windows 签名缓存安装包交接验收:verified-cache 模式的设计、预检与证据模型
人工智能大模型AI Agent交互助手工具调用MCP 服务Agent 记忆RAG【免费下载链接】opensquillaOpenSquilla — Token-Efficient AI Agent with same budget, higher intelligence density项目地址https://gitcode.com/gh_mirrors/op/opensquilla点击查看免费下载本文基于 OpenSquilla 仓库中 desktop/electron/scripts/fixtures/packaged-cached-handoff/README.md 展开并结合 contract.mjs、runtime.mjs、signed-exit-observer.mjs 及 verify-release-windows-signed-update.ps1 等实现佐证。它向读者完整解释该验收单元下称缓存交接单元的动机、触发方式、运行前提、执行流水线、证据产物与安全边界可用于复现、审查或扩展 OpenSquilla 桌面端 Windows 更新链路的可信度测试。这篇指南面向 OpenSquilla 的发布工程、质量保障与桌面端维护者。读完你将能理解HandoffInputMode: verified-cache与默认download模式的区别复现一次完整的安装 A → 本地暂存签名 B → A 缓存恢复 → 真实 UI 点击 → 观察交接 → 操作员完成 NSIS → 验证 B的原生验收读懂handoff.json、cached-handoff-audit.json、.cache.json与.failure.json的证据语义并了解其失败护栏、进程身份模型与测试边界避免将一次成功的原生单元误当成对远程下载、公网发布、源回退的证明。一、什么是 signed cached handoff一个隔离真实下载的原生验收单元OpenSquilla 桌面端Electron包名opensquilla/desktop-electron见 desktop/electron/package.json在 Windows 上通过 NSIS 安装器完成 A → B 的原地升级。升级链路涉及下载、签名校验、缓存、退出交接handoff与安装器拉起等环节。为了在不触碰生产下载源、不发布任何公网版本的前提下单独验证本地已签名的 B 安装器被 A 恢复并真正交给 NSIS这条原生路径仓库提供了一组可选的验收单元其设计文档即为本文所依据的 README。该单元的核心定义据 packaged-cached-handoff/README.md安装一个已签名且已停止的 A将一个已签名、哈希钉住的 B 安装器本地暂存到合成配置文件的update-downloads目录使用同一个合成配置文件退出并重启 A通过真实渲染进程的Quit and install动作打开 NSIS观察整个交接不改变已安装 A/B 的程序字节也不改动生产更新器。也就是说该单元把下载从验收对象中剥离只验证签名 B 能被生产解析器选中、能被生产校验器验签、能被 A 从缓存恢复、能被真实 UI 交给 NSIS且 A 退出过程中所有受管进程Electron、Playwright 包装进程、Gateway、Gateway launcher都以受控方式消失。关键产物handoff.json会显式记录mode: signed-cached-handoff、inputMode: verified-cache、fixtureSource: local Actions artifact and local channel channel fixture并显式置downloadVerified: false、remotePublicationVerified: false见 contract.mjs 中stageVerifiedCachedHandoff的返回结构与 tests/test_ci/test_windows_signed_update_audit.py 的断言。这是它区别于真实下载验收的定位它证明缓存恢复与原生安装交互但不能证明一次真实的远端下载、SHA256SUMS 拉取、公网渠道发布、GitHub/OSS 回退或冷 CA 网络行为。二、如何触发从verify-release-windows-upgrade.ps1入口接管审计配置该单元由既有入口 .github/scripts/verify-release-windows-upgrade.ps1 驱动通过-SignedAuditConfigPath 绝对JSON路径传入审计配置。README 指出保留既有 signed audit 的全部字段仅在其上设置两个键{ HandoffInputMode: verified-cache, ProcessObservationMode: standard-user-polling }这段摘录不是完整配置。入口脚本 verify-release-windows-upgrade.ps1 会读取 JSON校验其为绝对路径仅允许InstallTimeoutSeconds、ProcessObservationMode、HandoffInputMode、DownloadSourceMode等附加键然后以arguments形式转发给 verify-release-windows-signed-update.ps1。后者第 13-19 行对ProcessObservationMode限定cim-trace/standard-user-polling对HandoffInputMode限定download/verified-cache默认download。两个模式开关的语义HandoffInputMode: download默认走真实或回环渠道上的下载路径downloadVerified为真但remotePublicationVerified恒为假。HandoffInputMode: verified-cache走本文所述缓存交接单元且与DownloadSourceMode: github-to-oss互斥——verify-release-windows-signed-update.ps1 会直接抛错Source fallback requires download input; cached input cannot verify network fallback. 对应测试 test_cached_input_rejects_network_fallback_before_native_writes 断言失败发生在任何本地写入之前且不产生证据目录。ProcessObservationMode: standard-user-polling以普通用户轮询 CIM 快照代替cim-trace的事件订阅要求从非提权 shell 启动若检测到当前进程提权Test-SignedAuditElevated脚本会在创建合成配置文件前抛错verify-release-windows-signed-update.ps1以保持 UAC 测试边界。完整的 signed audit 配置还必须钉住以下输入缺失即失败见 Get-SignedAuditPlan已安装的 AOpenSquilla.exe的 SHA256两个完整构建源 SHA各 40 位小写十六进制BaselineSourceSha与CandidateSourceSha规范的 B 安装器绝对路径及其 SHA256且文件名必须匹配OpenSquilla-stable-win-x64.exe本地 B 渠道清单ChannelManifestschemaVersion1、version/tag与 B 一致且prereleasefalse。三、运行前提非打包身份、原生配置文件与写视图预检README 明确列出了一组必须先满足的环境前提违反任何一条都会在写入证据、预热签名缓存或播种配置之前停止非打包 shell从普通桌面 PowerShell 启动且不要在 Codex 或其他 MSIX 应用内运行。脚本通过GetCurrentPackageFullName要求返回APPMODEL_ERROR_NO_PACKAGE15700任何其他返回值尤其是 122ERROR_INSUFFICIENT_BUFFER表示存在包身份都会直接拒绝Assert-SignedAuditNativeLauncher。配置文件必须是原生路径且当前不存在账号原生AppData/Roaming/opensquilla/desktop-electron必须不存在——NSIS Finish 不会继承 Playwright 的--user-data-dir。空父目录AppData/Roaming/opensquilla必须已存在。注意路径遵循 Electron 打包后的nameopensquilla/desktop-electron而不是 NSIS 的productNameOpenSquillaAppData/Roaming/OpenSquilla不存在不代表原生配置文件真的不存在Get-SignedAuditNativeUserData 与测试 test_native_profile_matches_the_packaged_electron_name。环境仓库 Python 在 PATH 上、src在 PYTHONPATH 上、Electron harness 已构建且依赖已安装standard-user-polling模式不要提权。停止的 A已安装的 A 不能正在运行其 PEProductVersion必须等于基线版本且OpenSquilla.exe哈希与钉住的 SHA256 一致。基线版本不能是0.5.3/0.5.4这两个版本走 manual 模式见 verify-release-windows-signed-update.ps1。其中最关键的是写视图双探针预检Invoke-SignedAuditWriteViewPreflightverify-release-windows-signed-update.ps1仅凭包身份与父目录 realpath 不足以确定真实写入视图因此在播种之前外层审计会用同一个被解析出的 Node 可执行文件和同样用于播种的冻结 Python 可执行文件各自在 Roaming 下创建两个全新的 UUID 兄弟目录交换固定的 nonce 标记并观察原生路径。随后清理会复查实际路径、文件身份与 nonce 内容只解除每个探针自己的标记并删除其空目录。若出现意外内容、重定向目标或清理不确定则保留探针路径并在播种前失败对应实现为 .github/scripts/verify-windows-native-write-view.mjs 与 Python 侧 .github/scripts/native-audit-write-view.py。该探针从不创建或复用OpenSquilla目录即便预检通过也只证明该启动上下文内这些新写入可见未来重定向仍可能发生——因此最终规范缓存路径守卫保持不变仍可能拒绝新播种的路径。四、ownership 标记与候选校验cached-handoff-audit.json外层审计创建合成保留配置后会写入一个哈希绑定的所有权标记cached-handoff-audit.json位于合成UserDataDir根下。其结构见 verify-release-windows-signed-update.ps1{ schemaVersion: 1, purpose: opensquilla-synthetic-cached-handoff-audit, auditId: 32位十六进制, seedLabel: signed-update-audit, userDataDir: 合成配置文件绝对路径, baselineVersion: 0.5.6, expectedVersion: 0.5.7, expectedSha256: 64位十六进制, sourceSha: 40位十六进制, baselineSourceSha: 40位十六进制, configSha256: 播种 config.toml 的 SHA256 }候选校验在 contract.mjs 的verifyCachedHandoffInputs中严格执行所有审计路径必须绝对、非符号链接、无重定向canonicalInputcontract.mjs标记必须schemaVersion1、purpose正确、auditId为 32 位十六进制、seedLabelsigned-update-audit、userDataDir与输入绑定且baselineVersion/expectedVersion/expectedSha256/sourceSha/baselineSourceSha逐一与输入一致contract.mjsconfig.toml必须是普通文件且其 SHA256 与标记中的configSha256一致——任何播种后变更都会在暂存前被拒validateCachedCandidate使用生产渠道解析器candidateFromUpdateChannel在本地渠道 fixture 上选择前向候选 B要求baselineVersion是新的稳定 A显式排除0.5.3/0.5.4、候选是稳定版本、安装器文件名等于渠道清单中的installercontract.mjs。五、本地暂存与生产校验器无验证覆盖的 staging 流水线候选通过校验后copyCachedHandoffInstaller会把 B独占复制COPYFILE_EXCL进合成配置文件下新建的update-downloads目录绝不合并且绝不复用已有缓存contract.mjs。随后stageVerifiedCachedHandoff调用生产缓存校验器verifyCachedInstallerdesktop/electron/src/windows-update-cache.ts执行描述符校验schemaVersion1、版本为规范稳定/rc、tag匹配、安装器文件名匹配、SHA256 为 64 位十六进制、字节数在安全上限4 GiB内前向版本判定isForwardVersion期望候选/期望 SHA256 绑定目录非符号链接、文件非符号链接、字节数与描述符一致、realpath 无重定向流式 SHA256 与描述符一致真实系统 PowerShell Authenticode 校验verifyWindowsInstaller来自 windows-update-security.ts签名失败抛WindowsUpdateSecurityError以及发布者、指纹、时间戳检查——随后才持久化规范描述符windows-update-cache.json。README 特别强调原生暂存不接受任何验证覆盖native staging accepts no verification overrides。校验通过后通过saveWindowsUpdateCache写入描述符返回cacheStagedAndVerified: true并明确downloadVerified: false、remotePublicationVerified: false。已签名应用之后在恢复缓存时与交给 NSIS 前会再次校验同一个文件见 desktop/electron/src/main.ts 的restoreWindowsUpdateCache与 desktop/electron/src/main.ts 的verify/launchInstaller阶段的revalidateReadyWindowsInstaller即即使下载来源不经过网络每一道执行关口仍重验字节。契约测试覆盖了大量负向路径test-packaged-cached-handoff-contract.mjs非规范基线0.5.3、0.5.4、非稳定、rc、篡改渠道清单、非规范文件名一律拒绝L57-L72标记过期/无关/哈希不符 → 暂存前拒绝L73-L79输入字节在校验后、复制前被改动 → 拒绝且不产生windows-update-cache.jsonL94-L100独占复制再次执行 →EEXISTL86-L93重定向的 Temp 会被规范化用于 fixture而审计输入中的别名路径被拒绝L101-L111。六、回环渠道语义503 是本单元的正常状态缓存交接单元由 test-packaged-real-update-flow.mjs 驱动。当--mode signed-cached-handoff时驱动只提供一个回环渠道若被请求则返回 503test-packaged-real-update-flow.mjs 的服务端逻辑 channelAvailablefalse。这意味着本单元不断言自动刷新曾运行或完成本单元不算作网络故障测试网络故障另有其测试本单元不发布也不伪装公网发布唯一被接受的候选来自本地、哈希钉住的缓存而不是伪造的成功下载。这也体现在驱动对signed-cached-handoff的强制参数上必须传--cached-installer 绝对路径与--baseline-source-sha否则拒绝启动test-packaged-real-update-flow.mjs。启动环境固定为OPENSQUILLA_DESKTOP_DISABLE_AUTO_UPDATE: 0、OPENSQUILLA_DESKTOP_UPDATE_CHANNEL_ROOT: 回环根、OPENSQUILLA_DESKTOP_ENABLE_WIN_INSTALL: 1、OPENSQUILLA_DESKTOP_ENABLE_WIN_UPDATE: 0test-packaged-real-update-flow.mjs。七、两次 A 生命周期缓存恢复 → 自然退出 → 重启身份对比本单元要求 A 先经历一次完整的缓存恢复 自然退出再重启并再次恢复缓存用于对比两次进程身份第一次 Afirst cycle必须显示一个已连接的、受管的 GatewayrestoreWindowsUpdateCache恢复后更新状态为downloaded、progress: 100、installMode: manual、canInstall: true并在日志写入update_windows_cache_restored必须恢复精确的B 缓存描述符与字节双重比对必须以干净的证据自然退出Gateway 退出与 committed-exit 日志齐备first.shutdown { gatewayExitLogged: true, committedExitLogged: true }见 test-packaged-real-update-flow.mjs。重启second cycle驱动直接用electron.launch重新启动 A--use-mock-keychain、--user-data-dir、OPENSQUILLA_DESKTOP_SECRET_STORAGE: plain避免改写凭据——test-packaged-real-update-flow.mjs然后assertCachedRestartEvidence要求contract.mjs两次electronPid不同、两次gatewayStartIdentity不同新进程与新的受管 Gateway 身份凭据字节desktop-credential.json的 SHA256 在重启前后完全不变第一次必须normalQuitVerified: true否则重启用到的旧证据无效两次都cacheRestored: true。测试 actual restart evidence requires a clean Quit, new process/Gateway identities and unchanged credentials 对应的 test in contract suite 逐一验证这些否定路径PID 复用、Gateway 身份不变、缓存未恢复、凭据变化均抛错。等待缓存恢复的观察器waitForRestoredCachecontract.mjs默认 60 秒超时、250ms 轮询若观察到真实签名/完整性错误signature_invalid/signature_unavailable/integrity_failed或status: error立即抛错且不做 Download 或校验重试只有到达downloaded状态才返回。对应契约测试 an actual signature error stops observation without retrying verification 验证调用次数为 1。八、真实 UI 交接Quit and install 与 NSIS 边界只有上述断言全部通过才允许真实 UI 动作发起正常签名交接。驱动从不直接 spawn B 安装器NSIS 保持可见其作用域、目录、UAC、取消与 Finish/Run 必须单独观察。点击前签名驱动先捕获实际 Electron、Windows Playwright 包装进程、受管 Gateway 以及任何独立 Gateway launcher 的身份captureSignedHandoffProcessessigned-exit-observer.mjs并断言当前 A 的日志段内恰好一次Gateway 启动gateway_spawned额外的或重启的启动会被拒绝而不是被忽略每个角色wrapper/electron/gateway/gateway-launcher的启动身份都符合windows-creation-filetime:数值格式且可与进程对比受管 Gateway 记录与进程使用同一种创建时间身份。随后驱动点击真实 UI 的安装按钮[data-testiddesktop-update-relaunch]noWaitAfter: true。交接观察器observeSignedHandoffsigned-exit-observer.mjs在一个180 秒单一截止时间内同时观察 UI 点击与独立的退出/日志观察成功条件是实际 Electron 退出、包装进程以自然零码退出、所有 Gateway含 launcher退出新日志后缀必须包含本次尝试的有序desktop_exit_phase记录running→deferredverifying Windows update、deferred→drainingstopping Gateway、draining→committedWindows installer process started以及匹配候选的update_windows_installer_handoff记录版本、tag 都要精确匹配日志不能被替换/截断也不能出现新的gateway_spawned。这些desktop_exit_phase与update_windows_installer_handoff记录分别由 desktop/electron/src/main.ts、desktop/electron/src/main.ts 在真实更新协调器中发出。校验逻辑signedHandoffLogEvidencesigned-exit-observer.mjs严格拒绝乱序、恢复、重复、候选版本不匹配或附加无关记录的任何日志序列对应测试 only this complete ordered install attempt can supply handoff log evidence。Playwright close 事件为何只是诊断性的README 明确了一个 Windows 特有陷阱Playwright 1.60 在 Windows 上会通过包装进程的 ChildProcessclose发出 ElectronApplicationclose而close也会等待管道 EOF一个仍然打开的 NSIS 向导可以在 A 及其包装进程退出后保留继承句柄。因此该 close 事件仅作诊断驱动先写独立的交接证明再只释放自己对该已退出包装进程的 stdio 引用最多等待五秒运输清理releaseExitedHandoffTransportsigned-exit-observer.mjs交接观察器在请求安装后绝不再发起第二次 Quit也绝不杀进程树绝不计入自己关闭流作为进程退出或安装完成的证据真实 ChildProcessclose跟踪器trackSignedChildClose在每个受管启动后立即注册仅关闭流不能替代那个移除 Playwright 退出钩子的事件。对应契约测试包括 a close event or one exited Gateway cannot substitute for all captured process exits、closed streams cannot substitute for the actual child close event 与 held transport is released only after independent proof and never becomes that proof。进程退出判定使用windows-creation-filetime创建时间身份而非裸 PID因此 PID 复用会被识别为recycled而不是exitedprocessExitObservationsigned-exit-observer.mjs。九、失败护栏resident fence、恢复 Gateway 与操作员诊断失败证据先行不成功的签名审计写入handoff.json.failure.json或ready-output对应的.failure.json包含原始错误、ok: false、handoffObserved: false与operatorQuitRequired: true见 test-packaged-real-update-flow.mjs 与preserveFailedDriverUntilExit的发布逻辑signed-exit-observer.mjs。驱动保持驻留以五秒观察间隔轮询直到每个固定进程身份都退出且自身运输实际关闭。不可绕过的驻留失败栅栏fence用setInterval保活引用防止 Node 提前退出、触发 Playwright 的强制退出钩子并且不会重试已经请求过的 Quit不会二次调用app.close不会终止任何进程不会改变 Playwright 的钩子查询错误、证据写入失败、迟到的运输错误都不能把这个栅栏解开成 Node 退出。对应契约测试 query, ownership, evidence write and transport failures remain behind the failure fence 与 failure evidence must persist before any process query or local pipe release 验证任何快照、刷新、发布或释放操作的失败都被保留在原始失败内且证据先于查询落盘。恢复 Gateway 与身份缺失一个通过鉴权的恢复 Gateway会被追加到固定身份列表复用的 PID 不会替换先前的记录signed-exit-observer.mjs 的refreshFailureGateway。缺少原始身份或恢复 launcher 无法钉住时置manualDiagnosisRequired: true、automaticReleaseAvailable: false。此时不要关闭驱动终端也不要重试操作员必须诊断身份缺口普通 Quit 单独无法自动清除它对应测试 missing original identities and unpinned recovery stay resident for operator diagnosis。该保护从 Playwright 返回受管 app 后开始Playwright 内部的启动初始化失败路径仍可终止其子进程属于独立的依赖边界。失败包装进程非零退出码或信号退出可安全清理运输但保留原始失败绝不会变成成功交接signed-exit-observer.mjs 对应测试。十、证据产物与语义边界handoff.json、.cache.json、.failure.json驱动将证据写入--ready-output指向的文件生产路径为$EvidenceRoot/handoff.json。handoff.json标识mode: signed-cached-handoff、本地 fixture 来源、源与文件哈希以及两次实际 A 进程观察cacheCycles。它显式记录downloadVerified: false和remotePublicationVerified: false。.cache.json边车文件与截图*.cache-stage.png含各自 SHA256保留中间状态test-packaged-real-update-flow.mjs。三条重要边界README 与测试双重约束失败证据与已写出的交接观察分离任何一条记录都不证明安装器已完成NSIS 完成需要操作员 attestation 与 B 安装验证。一个成功完成的单元只证明缓存恢复与真实原生安装/交互路径不能认证先前的真实下载、远程 SHA256SUMS 获取、公网渠道发布、GitHub/OSS 回退或冷 CA 网络行为外层结果中的gaps数组逐一列出verify-release-windows-signed-update.ps1。签名预检会预热证书缓存即使本单元成功外层审计仍以退出码 2 结束、聚合发布门保持关闭verify-release-windows-signed-update.ps1。download输入模式、signed-handoff与旧版 manual 下载断言仍然是独立验收。十一、外层审计对缓存产物的复核外层 PowerShell 审计在驱动返回后会对handoff.json做严格复核verify-release-windows-signed-update.ps1credentialSha256为 64 位十六进制stageinstaller-handoff、handoffObservedtrue、requiresPostInstallVerificationtrue、okfalse、modesigned-cached-handoff、fromVersion/toVersion、sha256、sourceSha与钉住值一致对verified-cacheinputModeverified-cache、fixtureSourcelocal Actions artifact and local channel fixture、candidateValidationproduction-parser-on-local-fixture、baselineSourceSha、auditId与标记一致、markerSha256等于标记文件实算哈希、installerSha256、manifestSha256一致cacheStagedAndVerified、cacheRestoreVerified、cacheRestartVerified必须为布尔truedownloadVerified与remotePublicationVerified必须为布尔false——**缓存输入不得声称下载或发布**是硬性契约对应测试 test_cached_input_is_bound_and_cannot_claim_download_or_publication。之后外层审计继续走既有路径操作员完成 NSIS 并确认 Finish/Run 自动启动FINISH-AUTOLAUNCH、对安装后的 B 做签名与版本复核、操作员用托盘 QuitQUIT、test-packaged-first-send-renderer.mjs对全新配置文件做首条消息探针、test-packaged-retained-interaction.mjs对保留配置文件做消息/工具/Stop/Quit/重启探针并以verify-release-profile-preservation.py复核保留数据未被后装探针改动verify-release-windows-signed-update.ps1。十二、CI 中的分级契约测试 vs 原生验收普通 CI只运行test-packaged-cached-handoff-contract.mjs惰性临时字节、生产候选/描述符解析、标记/哈希/路径校验、独占复制与纯观察断言。这些测试不暂存就绪的未签名安装器、不启动 Electron/NSIS、不声称原生验收测试文件头部注释明确inert files only。CI 计划将fixtures/packaged-cached-handoff/下的文件归类为 Windows 原生输入同时允许其可移植 Node 契约在 Linux desktop-static 车道运行.github/scripts/plan_ci.py并在 .github/ci/suites.v1.json 等处注册。契约套件覆盖held transport、缺失/未知/复用身份、写入失败与安全驻留。其惰性 Node 孙进程不能复现 Windows 上 NSIS 的句柄继承原生 NSIS 与失败交接的交互仍需它们自己的验收证据如cim-trace车道与真实 UAC/取消测试见 tests/test_ci/test_windows_signed_update_audit.py 的 quit/restart 场景。换句话讲契约测试证明逻辑正确原生 A→B 单元证明真实安装交互聚合发布门则把它们与下载、发布、回退等其余验收合并——一条都不能少。参考与深入阅读本单元设计说明desktop/electron/scripts/fixtures/packaged-cached-handoff/README.md契约与暂存实现desktop/electron/scripts/fixtures/packaged-cached-handoff/contract.mjs原生运行包装desktop/electron/scripts/fixtures/packaged-cached-handoff/runtime.mjs退出观察与失败栅栏desktop/electron/scripts/fixtures/packaged-cached-handoff/signed-exit-observer.mjs契约测试desktop/electron/scripts/test-packaged-cached-handoff-contract.mjs原生驱动desktop/electron/scripts/test-packaged-real-update-flow.mjs生产缓存校验器desktop/electron/src/windows-update-cache.ts生产侧缓存恢复与交接日志desktop/electron/src/main.ts、desktop/electron/src/main.ts外层签名审计脚本.github/scripts/verify-release-windows-signed-update.ps1入口包装.github/scripts/verify-release-windows-upgrade.ps1审计契约测试tests/test_ci/test_windows_signed_update_audit.py赞分享人工智能大模型AI Agent交互助手工具调用MCP 服务Agent 记忆RAG【免费下载链接】opensquillaOpenSquilla — Token-Efficient AI Agent with same budget, higher intelligence density项目地址https://gitcode.com/gh_mirrors/op/opensquilla点击查看免费下载相关推荐msphpsql部署指南从开发到生产环境的完整流程msphpsql部署指南从开发到生产环境的完整流程 msphpsqlMicrosoft Drivers for PHP for SQL Server是连接后端数据库OpenSquilla 代码签名策略全解析Windows Authenticode 签名、发布审计矩阵与用户验证指南OpenSquilla 代码签名策略全解析Windows Authenticode 签名、发布审计矩阵与用户验证指南 导读 本文以 OpenSquilla 开人工智能大模型AI Agent交互助手工具调用MCP 服务Agent 记忆RAG本地部署Cosign签名验证缓存设计实现高效的签名结果复用机制Cosign签名验证缓存设计实现高效的签名结果复用机制 容器镜像的签名验证是保障供应链安全的关键环节但频繁的重复验证会显著增加系统开销。Cosign作为容器供应链安全云原生应用安全上一篇WezTerm 实战技巧5 处配置玩转 GPU 加速终端复用器下一篇Windows Cleaner 完整指南C盘空间清理与定时自动维护创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考