From ef6a174255ced119138f9d4769e33e678c530144 Mon Sep 17 00:00:00 2001 From: ringo Date: Sun, 20 Sep 2026 14:12:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(launcher):=20=E6=B3=A8=E5=85=A5=20ANT=5FWOR?= =?UTF-8?q?KSPACE=5FBRIDGE=5FURL=EF=BC=88=E4=BA=91=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=86=99=E5=85=A5=E5=89=8D=E7=BD=AE=EF=BC=89=EF=BC=8Cstudio=20?= =?UTF-8?q?0.3.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 缺该 env 时 build_model 无法写云项目、退回只写本地工作区(用户以为已同步)。启动器改为:显式 env → 本机 127.0.0.1:3180 探测(dev 网关)→ 生产 https://deta.city/workspace-api,并把解析结果打进启动行(网关桥=…)便于排查。 陷阱:探测写成 (exec 3<>/dev/tcp/...) 后不要紧跟 exec 3<&- —— 父 shell 无该 fd 时在 set -e 下会直接退出脚本(症状:启动行只剩一行提示、MCP 不启)。 --- plugins/studio/.codex-plugin/plugin.json | 2 +- plugins/studio/bin/deta-mcp.sh | 17 ++++++++++++++++- plugins/studio/package-lock.json | 4 ++-- plugins/studio/package.json | 2 +- plugins/writer/bin/deta-mcp.sh | 17 ++++++++++++++++- 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/plugins/studio/.codex-plugin/plugin.json b/plugins/studio/.codex-plugin/plugin.json index bedfacd..ecb5bc0 100644 --- a/plugins/studio/.codex-plugin/plugin.json +++ b/plugins/studio/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "studio", - "version": "0.3.7", + "version": "0.3.8", "description": "DETA Studio 插件:以 AML 为唯一事实源编辑建筑模型,编译为建筑模型并执行规则校验。", "author": { "name": "DETA", diff --git a/plugins/studio/bin/deta-mcp.sh b/plugins/studio/bin/deta-mcp.sh index 5b01f84..f8f0dde 100755 --- a/plugins/studio/bin/deta-mcp.sh +++ b/plugins/studio/bin/deta-mcp.sh @@ -100,12 +100,27 @@ if [ -z "${DETA_TOKEN:-}" ] && [ -f "$HOME/.deta/credentials.json" ]; then if [ -n "${DETA_TOKEN:-}" ]; then TOKEN_SOURCE="$HOME/.deta/credentials.json"; fi fi +# ── 网关桥(云项目工作区读写 / host-call 中继):显式 env → 本机网关 → 生产网关 ── +# 缺它时 build_model 无法把模型写进云项目(会退回只写本地工作区),用户会以为已同步。 +if [ -z "${ANT_WORKSPACE_BRIDGE_URL:-}" ]; then + if (exec 3<>/dev/tcp/127.0.0.1/3180) 2>/dev/null; then + ANT_WORKSPACE_BRIDGE_URL="http://127.0.0.1:3180" + BRIDGE_STATE="本机网关 ${ANT_WORKSPACE_BRIDGE_URL}" + else + ANT_WORKSPACE_BRIDGE_URL="https://deta.city/workspace-api" + BRIDGE_STATE="生产网关 ${ANT_WORKSPACE_BRIDGE_URL}" + fi + export ANT_WORKSPACE_BRIDGE_URL +else + BRIDGE_STATE="环境变量 ${ANT_WORKSPACE_BRIDGE_URL}" +fi + if [ -n "${DETA_TOKEN:-}" ]; then CLOUD_STATE="已注入(来源=${TOKEN_SOURCE})" else CLOUD_STATE="未注入——云类工具返回 auth_required 时调 login 工具(浏览器点一下即可);无该工具的形态用 ~/.deta/bin/deta login" fi -echo "[deta] 档位=${PROFILE} 运行时=${ROOT} 工作区=${WS} 工具面=${DETA_TOOL_SURFACE} 云令牌=${CLOUD_STATE}" >&2 +echo "[deta] 档位=${PROFILE} 运行时=${ROOT} 工作区=${WS} 工具面=${DETA_TOOL_SURFACE} 云令牌=${CLOUD_STATE} 网关桥=${BRIDGE_STATE}" >&2 exec node "$ENTRY" "$@" diff --git a/plugins/studio/package-lock.json b/plugins/studio/package-lock.json index b9ba5d9..70d1632 100644 --- a/plugins/studio/package-lock.json +++ b/plugins/studio/package-lock.json @@ -1,12 +1,12 @@ { "name": "deta-studio-plugin", - "version": "0.3.7", + "version": "0.3.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "deta-studio-plugin", - "version": "0.3.7", + "version": "0.3.8", "license": "Proprietary" } } diff --git a/plugins/studio/package.json b/plugins/studio/package.json index 2b872ef..422f76b 100644 --- a/plugins/studio/package.json +++ b/plugins/studio/package.json @@ -1,6 +1,6 @@ { "name": "deta-studio-plugin", - "version": "0.3.7", + "version": "0.3.8", "description": "DETA Studio:AML 建筑模型读写与编译校验(Codex 插件 / dsh 组合包 双壳)", "type": "module", "license": "Proprietary", diff --git a/plugins/writer/bin/deta-mcp.sh b/plugins/writer/bin/deta-mcp.sh index 0c0fc07..5cd9ee5 100755 --- a/plugins/writer/bin/deta-mcp.sh +++ b/plugins/writer/bin/deta-mcp.sh @@ -100,12 +100,27 @@ if [ -z "${DETA_TOKEN:-}" ] && [ -f "$HOME/.deta/credentials.json" ]; then if [ -n "${DETA_TOKEN:-}" ]; then TOKEN_SOURCE="$HOME/.deta/credentials.json"; fi fi +# ── 网关桥(云项目工作区读写 / host-call 中继):显式 env → 本机网关 → 生产网关 ── +# 缺它时 build_model 无法把模型写进云项目(会退回只写本地工作区),用户会以为已同步。 +if [ -z "${ANT_WORKSPACE_BRIDGE_URL:-}" ]; then + if (exec 3<>/dev/tcp/127.0.0.1/3180) 2>/dev/null; then + ANT_WORKSPACE_BRIDGE_URL="http://127.0.0.1:3180" + BRIDGE_STATE="本机网关 ${ANT_WORKSPACE_BRIDGE_URL}" + else + ANT_WORKSPACE_BRIDGE_URL="https://deta.city/workspace-api" + BRIDGE_STATE="生产网关 ${ANT_WORKSPACE_BRIDGE_URL}" + fi + export ANT_WORKSPACE_BRIDGE_URL +else + BRIDGE_STATE="环境变量 ${ANT_WORKSPACE_BRIDGE_URL}" +fi + if [ -n "${DETA_TOKEN:-}" ]; then CLOUD_STATE="已注入(来源=${TOKEN_SOURCE})" else CLOUD_STATE="未注入——云类工具返回 auth_required 时调 login 工具(浏览器点一下即可);无该工具的形态用 ~/.deta/bin/deta login" fi -echo "[deta] 档位=${PROFILE} 运行时=${ROOT} 工作区=${WS} 工具面=${DETA_TOOL_SURFACE} 云令牌=${CLOUD_STATE}" >&2 +echo "[deta] 档位=${PROFILE} 运行时=${ROOT} 工作区=${WS} 工具面=${DETA_TOOL_SURFACE} 云令牌=${CLOUD_STATE} 网关桥=${BRIDGE_STATE}" >&2 exec node "$ENTRY" "$@"