fix(plugin): 云令牌改由启动器解析,清掉废弃的 MCP 授权指引
CI / contract (push) Has been cancelled

症状:装好插件后调 list_projects 返回 auth_required,模型被技能里"先让用户完成 MCP 授权(codex mcp login deta_mcp)"带偏,用户卡在登录环节。

根因两条:① 启动器只透传环境变量 DETA_TOKEN,而 Finder/Dock 启动的桌面应用不继承终端环境,登录助手写的 ~/.deta 凭据根本进不去宿主进程;② 技能/README 仍留着远程形态的 OAuth 指引,本机形态里那条命令不存在。

修复:启动器按 DETA_TOKEN 环境变量 → ~/.deta/env → ~/.deta/credentials.json 顺序解析令牌并在 stderr 报告来源(不打印值);技能改为"让用户跑登录助手 → 开新会话",并明确区分 MCP 侧云令牌与面板侧 deta.city 登录;两份 README 的登录流程改为"登录一次、开新会话即可"(无需 source / launchctl / 改 .zshrc / 重启应用)。studio 0.3.1 → 0.3.2。

实测(隔离 HOME):四种取令牌路径与优先级、缺令牌时的引导文案均符合预期。
This commit is contained in:
ringo
2026-09-20 12:02:24 +08:00
parent 7d3f9e2933
commit e7d372f939
9 changed files with 81 additions and 23 deletions
+25 -1
View File
@@ -68,6 +68,30 @@ export ANT_HEADLESS_WORKSPACE="$WS"
# ── 工具面:产品档位缺省全量面;DETA_SURFACE 可覆盖(如 engine)──
export DETA_TOOL_SURFACE="${DETA_SURFACE:-full}"
echo "[deta] 档位=${PROFILE} 运行时=${ROOT} 工作区=${WS} 工具面=${DETA_TOOL_SURFACE} 云令牌=$([ -n "${DETA_TOKEN:-}" ] && echo 已注入 || echo 未注入)" >&2
# ── 云令牌:显式环境变量 → ~/.deta/env → ~/.deta/credentials.json ──
# 桌面应用(Finder/Dock 启动)不会继承终端的 export,也不是每个人都有 launchctl 注入,
# 因此登录助手写下的凭据必须由启动器自己解析——这是"登录一次即可用"的关键路径。
TOKEN_SOURCE=""
if [ -n "${DETA_TOKEN:-}" ]; then
TOKEN_SOURCE="环境变量"
fi
if [ -z "${DETA_TOKEN:-}" ] && [ -f "$HOME/.deta/env" ]; then
# shellcheck disable=SC1090
. "$HOME/.deta/env" >/dev/null 2>&1 || true
if [ -n "${DETA_TOKEN:-}" ]; then TOKEN_SOURCE="$HOME/.deta/env"; fi
fi
if [ -z "${DETA_TOKEN:-}" ] && [ -f "$HOME/.deta/credentials.json" ]; then
DETA_TOKEN="$(node -e "try{const c=JSON.parse(require('node:fs').readFileSync(process.env.HOME+'/.deta/credentials.json','utf8'));if(c&&typeof c.token==='string')process.stdout.write(c.token)}catch(e){}" 2>/dev/null || true)"
export DETA_TOKEN
if [ -n "${DETA_TOKEN:-}" ]; then TOKEN_SOURCE="$HOME/.deta/credentials.json"; fi
fi
if [ -n "${DETA_TOKEN:-}" ]; then
CLOUD_STATE="已注入(来源=${TOKEN_SOURCE})"
else
CLOUD_STATE="未注入——云类工具将返回 auth_required:运行 bin/deta-login.mjs 登录后开新会话"
fi
echo "[deta] 档位=${PROFILE} 运行时=${ROOT} 工作区=${WS} 工具面=${DETA_TOOL_SURFACE} 云令牌=${CLOUD_STATE}" >&2
exec node "$ENTRY" "$@"