错误与恢复
SDK 使用 GraphError reject,字段 code/phase/message/可选 nextAction,toJSON 返回安全结构。phase 为 config/load/query/match/document/lifecycle;nextAction 为 fix_input/check_config/refresh/narrow_scope/retry/contact_admin。不要按 message 做逻辑分支。
Tool Adapter 以 ok:false/error 返回;MCP 执行错误 isError:true,文本内容为机器可读 JSON,没有冒充成功的 structuredContent。协议请求错误由 MCP SDK 处理。静态空目录、no_match、unknown、partial 与异常不同。
模型执行器抛出的受支持 GraphError 会保留合法 nextAction,同时清洗原始错误消息。缺失或非法动作按错误码回退:上下文/输出超限为 narrow_scope,拒绝为 fix_input,选择ID无效为 refresh,隔离前提不足为 check_config,其他模型错误为 retry。配置错误可显式返回 check_config,暂时不可用可返回 retry;未知错误码或普通异常不能携带自定义动作穿透到调用方。SDK、Tool与MCP使用同一投影语义。
reload 失败通常正常返回 ok:false,不伪装新快照已发布;普通查询显式根错误整次失败。维护命令另有 status 和退出码,见CLI。
close终止活动match是CG_GRAPH_CLOSED/lifecycle,与timeout/cancel不同。模型无匹配是正常no_match;关系不完整是partial;reload失败是ok:false;不能把这四种情况都归为“模型失败”。
同样是失败,先找对外壳
下面SDK示例故意查询不存在能力,用于观察GraphError;在已安装本包的ESM项目保存为error.mjs运行,预期exit1,stderr是完整GraphError JSON:
Tool Adapter同一类查询失败的外壳形状为:
CLI检查不存在配置文件 capability-graph doctor --config deliberately-missing-config.json,实际stderr完整结构如下,exit1:
维护命令的planned/ok/conflict/failed、checks[].status及退出0/1/2/3,见CLI与维护。协议级坏请求可能由客户端SDK直接reject,不能把它当Graph执行isError或业务no_match。