Cortadel Doctor
端到端安装诊断。执行以下所有检查并报告全部结果——不要因为第一次失败而停止。对于任何检查,绝对不要使用cortadel-plugin/scripts/lib.mjs的api()辅助函数:它会将所有失败(非2xx、超时、网络错误)吞噬为null,这对于一个需要区分401和零结果的诊断来说完全错误。请使用原始的curl(或直接使用MCP工具),以便真实状态码和错误体保持可见。
执行
检查1——配置解析
解析插件自身钩子会解析的相同必需值(base_url、user_id、api_key),优先级为CLAUDE_PLUGIN_OPTION_<KEY>第一层,CORTADEL_*环境变量第二层——这与cortadel-plugin/scripts/lib.mjs的cfg()/readOption()优先级一致:
for pair in "CLAUDE_PLUGIN_OPTION_BASE_URL:CORTADEL_URL" \
"CLAUDE_PLUGIN_OPTION_USER_ID:CORTADEL_USER_ID" \
"CLAUDE_PLUGIN_OPTION_API_KEY:CORTADEL_API_KEY"; do
opt="${pair%%:*}"; fallback="${pair##*:}"
val="${!opt:-${!fallback:-}}"
if [ -n "$val" ]; then echo "$fallback: resolved"; else echo "$fallback: NOT SET"; fi
done
如果三个值都解析为非空值,则通过;如果任何一个为空,则失败——并报告其余检查为“跳过,无配置”。切勿打印API密钥的实际值,仅报告是否解析成功。
如果相关,向用户明确说明:CLAUDE_PLUGIN_OPTION_*按文档说明被注入到钩子的子进程中。它是否在技能自身的shell执行中可见,本仓库中未确认——请检查两个层级并报告每个值实际由哪个层级解析,而不是假定市场层级在这里可访问。
检查2——服务器健康(无需认证)
GET /api/health完全不需要凭证——它是正确的第一个网络探测,与您自己的API密钥是否有效无关:
curl -s "$CORTADEL_URL/api/health"
报告顶层的status(ok或degraded),如果存在,则报告checks映射(例如checks.memgraph.ok、checks.embeddings.ok)。degraded/503响应是正常的、非异常的结果,需要报告——而不是停止运行后续检查的理由。
检查3——认证
curl -s -o /tmp/cortadel-doctor-auth.json -w "HTTP %{http_code}\n" \
-H "Authorization: Bearer $CORTADEL_API_KEY" \
"$CORTADEL_URL/api/v1/memories?user_id=$CORTADEL_USER_ID&size=1"
200→ 通过。401→ 失败——API密钥缺失或无效。403→ 失败——密钥有效但与user_id不匹配。- 其他 → 失败——报告状态码和响应体。
检查4——实时读取
如果检查3返回了200,则读取/tmp/cortadel-doctor-auth.json:确认它能解析为JSON,并且包含items数组和total计数(MemoryListPagedResponse的形状)。将total报告为安装的记忆数量——这是服务器暴露的唯一聚合数字;没有单独的统计端点,因此这是任何地方可用的全部“统计”信息。
如果本会话中也连接了cortadel MCP服务器,则额外调用mcp__cortadel__search_memory({ topK: 1 })(无query——浏览模式),作为通过MCP表面的第二条独立的实时读取路径,而不是REST。单独报告它:REST通过而MCP失败(或相反)有助于缩小安装中哪一半实际损坏。如果当前会话中MCP工具不可用,则跳过此子检查——不要使其失败。
展示
将所有四项检查一同报告,每项检查按PASS/FAIL/WARN显示,例如:
Config resolution PASS base_url, user_id, api_key all resolved (CORTADEL_* tier)
Server health PASS status=ok
Auth PASS HTTP 200
Live read PASS total=142 memories; MCP search_memory: PASS
如果任何检查失败,添加具体的后续步骤,与docs/plugin.md的故障排除部分保持一致:401 → 检查CORTADEL_API_KEY;403 → 检查CORTADEL_USER_ID是否与密钥的用户匹配;健康降级 → 指向出错的checks.*条目。