症状:装好插件后调 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:
@@ -50,13 +50,16 @@ codex plugin add writer@deta
|
||||
bash <插件目录>/bin/deta-mcp.sh --profile writer
|
||||
```
|
||||
|
||||
需要云侧能力(项目列表 / 同步)时注入令牌:
|
||||
需要云侧能力(项目列表 / 项目同步 / 打开 Studio)时登录一次:
|
||||
|
||||
```bash
|
||||
node bin/deta-login.mjs # 登录 deta.city,写 ~/.deta/credentials.json 与 ~/.deta/env
|
||||
source ~/.deta/env # 让 DETA_TOKEN 进入宿主进程环境
|
||||
node <插件目录>/bin/deta-login.mjs # 账号密码 / 邮箱验证码由你本人输入
|
||||
# 写 ~/.deta/credentials.json 与 ~/.deta/env(均 0600)
|
||||
```
|
||||
|
||||
登录后**开新会话**即可——启动器自己按 `DETA_TOKEN` 环境变量 → `~/.deta/env` →
|
||||
`~/.deta/credentials.json` 的顺序解析令牌,不需要 source、不需要 launchctl、不需要重启应用。
|
||||
|
||||
## 安装(dsh)
|
||||
|
||||
```bash
|
||||
|
||||
@@ -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" "$@"
|
||||
|
||||
Reference in New Issue
Block a user