ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Open CoDesign Core Fail-Fast 审计实战:从 105 项边界核查看 Agent 桌面应用的失败处理工程化

Open CoDesign Core Fail-Fast 审计实战:从 105 项边界核查看 Agent 桌面应用的失败处理工程化 人工智能AI 应用桌面应用【免费下载链接】open-codesignOpen-source Claude Design alternative. One-click import your Claude Code / Codex API key. Prompt → prototype / slides / PDF. Multi-model (Claude, GPT, Gemini, Kimi, GLM, Ollama). BYOK, local-first, MIT.项目地址https://gitcode.com/gh_mirrors/op/open-codesign点击查看免费下载本文以仓库中 .Codex/workspace/core_fail_fast_audit.md 这份审计文档为主体骨架结合packages/core、packages/providers、packages/shared与apps/desktop/src/main下的真实源码与测试系统讲解 Open CoDesign 如何通过 fail-fast快速失败策略消除把失败伪装成成功的隐性缺陷。读完本文你将掌握该项目的错误分类体系throw / typed error / explicit recovery / valid empty state / explicit migration 五类决策、各边界上的 105 项具体审计结论以及对应的验证命令与源码佐证路径。一、审计背景为什么需要一次 Fail-Fast 专项审计这份审计文档记录于 2026-04-27标题为Core fail-fast audit其核心目标是找出所有把一次核心操作的失败静默转换成成功的代码路径并逐条决定应该 throw、返回类型化错误、还是明确保留为空状态/迁移/恢复语义。审计范围横跨四个包/目录packages/coreAgent 运行时、工具、设计技能加载packages/providers多模型供应商封装、校验、OAuthpackages/sharedEDITMODE 协议、config schema、错误码apps/desktop/src/main下的 provider / auth / config / import / connection / generate 各类 IPC 边界审计启动时的 dirty 文件清单即审查起点文件关注点packages/core/src/agent.test.ts / agent.tsAgent 生命周期与凭据处理packages/providers/src/gemini-compat.test.ts / gemini-compat.tsGemini 模型 ID 归一化packages/providers/src/index.ts供应商 complete() 封装与错误映射文档为每一条审计结果定义了一张记录表ID | Path | Fail trigger | Current behavior | Risk | Decision | Fix | Test | Status。政策明确标为valid empty state、explicit migration、explicit recovery的行故意不 fail-fast因为它们不会把失败的核心操作转换成成功其余行则必须消除失败被吞掉的行为。二、五类决策模型Fail-Fast 的分层处理通读 105 条记录FF-001 ~ FF-105可以把项目的决策归纳为五类这也是理解整份审计的钥匙must throw协议违规、凭据缺失、配置损坏等必须立即以CodesignError携带ERROR_CODES抛出让调用方可见绝不允许降级为看起来成功。typed error resultIPC/网络这类面向渲染进程的边界返回类型化错误结果如{ ok:false, code, message }而不是让 IPC 进程崩溃也不是返回ok:true的空结果。explicit recovery明确声明的恢复/降级路径如目录 ENOENT 视为首次运行空状态允许保留但必须语义清晰、注释准确。explicit migration仅存在于 v0.1→v0.2 迁移边界的兼容逻辑如旧 schema 读取、safeStorage 迁移保留但只作为迁移不做运行时兜底。valid empty state / rename / document本身就是空即合法的函数契约如谓词辅助函数返回false或仅需改写误导性的fallback措辞。错误码的集中登记见 packages/shared/src/error-codes.ts所有CodesignError都携带ERROR_CODES中的字面量如IPC_BAD_INPUT、PROVIDER_AUTH_MISSING、ARTIFACT_PROTOCOL_INVALID、TOOL_EXECUTION_FAILED、KEYCHAIN_EMPTY_INPUT并通过ERROR_CODE_DESCRIPTIONS提供面向用户的文案与诊断分类ipc / provider / generation / snapshot / preferences / connection / other。三、协议与工具层让协议错误不再伪装成没有该功能3.1 EDITMODE / TWEAK_SCHEMA 标记块协议FF-001~003、FF-037packages/shared/src/editmode.ts 解析 Agent 在产物源码中声明的两个标记块TWEAK_DEFAULTSconst TWEAK_DEFAULTS /*EDITMODE-BEGIN*/{ key: value }/*EDITMODE-END*/;TWEAK_SCHEMA与前者并列的 UI 提示块color / number / enum / boolean / string 五种 entry。审计发现并修复的问题ID失败触发原行为/风险决策与修复测试FF-001EDITMODE 标记存在但内容是非对象 JSON 或非法 JSON返回null如同没有 tweak协议错误被隐藏成无 tweak 面板must throw抛CodesignError(ARTIFACT_PROTOCOL_INVALID)editmode.test.ts malformed marker rejectsFF-002存在裸const TWEAK_DEFAULTS {...}而无标记自动推断 token 并重写标记静默修补 Agent 协议违规移除裸常量推断与标记自动包裹只认规范标记bare const returns no block / replace unchangedFF-003TWEAK_SCHEMA标记存在但内容非法返回null畸形 schema 被隐藏抛ARTIFACT_PROTOCOL_INVALIDmalformed schema rejectsFF-037schema entry 的可选字段类型错误、enum 选项混入非字符串丢弃非法字段/过滤 enum 值协议被部分修复成另一种 schema错误类型的可选字段与非字符串 enum 选项一律视为非法 entrymalformed option/type tests从源码看parseEditmodeBlock()对标记内 span 依次做JSON 解析失败抛ARTIFACT_PROTOCOL_INVALID、必须是对象数组/null 也抛、每个 token 值必须是 string/number/boolean否则抛。parseTweakSchema()同样对每个 entry 调用validateEntry()任何非法 entry 直接抛错而不是跳过。值得注意的是 v0.2 中ensureEditmodeMarkers()已退化为原样返回——Agent 必须自己输出规范协议运行时不再代为修补。3.2 工具执行与产物校验FF-004、FF-042、FF-083、FF-096、FF-104ID失败触发风险决策/修复测试FF-004preview工具的宿主执行器抛错合成ok:false空结果工具崩溃看起来像普通预览失败抛CodesignError(TOOL_EXECUTION_FAILED)并携带 causepreview.test.ts executor throw rejectsFF-042scaffold目标/清单源路径通过前缀技巧或..逃逸声明根目录工具可越界读写却报告成功用path.relative做根包含校验逃逸时返回显式工具错误scaffold.test.ts root containment testsFF-083generate_image_asset持久化失败fs.createreject未 await写入未落盘就返回成功await 资产持久化写穿失败先于工具成功传播generate-image-asset.test.ts persistence failure testFF-096manifest.json可解析为 JSON 但非合法 scaffold manifest 形状未校验的 cast 导致后续属性访问抛裸TypeError加载时校验 manifest 形状runScaffold返回 manifest-unavailable 工具错误scaffold.test.ts malformed manifest-shape testFF-104ask工具输入含畸形 question、缺 prompts/options、非法 slider 区间、重复 id仅检查数组存在/数量畸形输入直达渲染桥UI 层挂起或失败深度校验每个 question 形状桥接前拒绝ask.test.ts malformed question tests以 packages/core/src/tools/preview.ts 为例makePreviewTool的execute用 TypeBox 校验输入validatePreviewInput并把整个执行体包在 try/catch 中任何异常统一改写为CodesignError(TOOL_EXECUTION_FAILED, { cause })而PreviewResult.ok:false只保留给预览确实失败这类业务结果两者不再混淆。3.3 图片生成与工作区二进制资产FF-084、FF-086~090、FF-097ID失败触发风险决策/修复测试FF-084资产路径内容是生成的data:image/...;base64,...URL把 data URL 字符串写进磁盘assets/*.png产出带 PNG 后缀的文本文件工作区/迁移写入时解码为二进制虚拟 DB/状态保留 data URL畸形 data URL 拒绝runtime/snapshots workspace asset testsFF-086图片生成端点返回 2xx 但 body 非 JSON裸SyntaxError从res.json()逃逸包装为CodesignError(PROVIDER_ERROR)并保留 causeimages.test.ts non-JSON response testFF-087端点返回非空但畸形的 base64 图片数据被归一化为成功的 dataUrl返回GenerateImageResult前校验 base64 载荷images.test.ts malformed image data testsFF-088Codex OAuth token 端点返回非 2xx抛出裸Error类型化失败被推迟到主进程包装层抛CodesignError(PROVIDER_ERROR)body 读取保留为显式诊断恢复oauth.test.ts non-2xx typed error testsFF-089base64 语法合法但与图片 MIME 签名不符任意非空 base64 都被当作成功图片资产供应商/工作区边界校验 PNG/JPEG/WEBP 已知签名provider/workspace signature testsFF-090data URL 首尾带空白未 trim 导致工作区把有效 data URL 当普通文本写入trim 后解析并持久化规范化 data URLworkspace/provider>赞分享人工智能AI 应用桌面应用【免费下载链接】open-codesignOpen-source Claude Design alternative. One-click import your Claude Code / Codex API key. Prompt → prototype / slides / PDF. Multi-model (Claude, GPT, Gemini, Kimi, GLM, Ollama). BYOK, local-first, MIT.项目地址https://gitcode.com/gh_mirrors/op/open-codesign点击查看免费下载相关推荐Open CoDesign v0.2 全量根因审查与修复实录构建链路、Agent 工具面、安全边界与打包瘦身实战Open CoDesign v0.2 全量根因审查与修复实录构建链路、Agent 工具面、安全边界与打包瘦身实战 本文基于 .Codex/workspace/人工智能AI 应用桌面应用Open CoDesign 开发指南AGENTS.md 驱动的桌面设计 Agent 架构、工具面与工程约束解读Open CoDesign 开发指南AGENTS.md 驱动的桌面设计 Agent 架构、工具面与工程约束解读 导读 本文以 Open CoDesign 仓库人工智能AI 应用桌面应用agents24 Python 错误处理实战指南从 Fail-Fast 输入校验到部分失败处理的完整异常设计体系agents24 Python 错误处理实战指南从 Fail Fast 输入校验到部分失败处理的完整异常设计体系 本篇指南以 agents24 仓库中 pytAI 插件AI 技能开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表