Skip to content

feat(app-shell): Connect an Agent marks claude.ai (web) and Doubao cloud tasks as not available on a non-public address - #30973

Draft
objectstack-fleet[bot] wants to merge 1 commit into
mainfrom
claude/project-thread-rrq77k
Draft

objectstack-fleet[bot] wants to merge 1 commit into
mainfrom
claude/project-thread-rrq77k

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Tesla · project thread

Fixes #30897

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么:「连接 AI 助手」页显示的地址不是公网 HTTPS(http://、localhost、内网地址)时,claude.ai 网页版和豆包工作的云端任务会标出「此部署不可用」,一句话说明原因(写出该地址),并说明怎样才能用(把系统部署到公网 HTTPS 地址)。
  • 为什么改:公司在内网试用时照着 claude.ai 步骤粘贴地址,连接失败却没有可执行的原因;页面本来就知道自己显示的地址,可以先说清楚。
  • 风险与回滚:只在页面显示层判断地址,不改任何服务端行为;Claude Desktop、Claude Code、Codex、Cursor 等本地客户端的步骤不变;公网 HTTPS 地址下页面与之前完全一样。回滚即 revert 本 PR。
  • 先看:ui/packages/app-shell/src/console/connect/deploymentReach.ts(地址判定)、ConnectAgentWidget.tsx 里的 Unavailable 与两处使用、测试文件末尾新增的 describe。
  • 两分钟验证:本地部署打开 设置 → 连接 AI 助手:Claude 页签下 claude.ai 一栏出现虚线框「claude.ai(网页版):此部署不可用」,切到「豆包工作」出现「云端任务:此部署不可用」,切到 Codex 没有提示。
  • 需要你做的:无,席位落地。

What changes

  • deploymentReach.ts (new): isPublicHttpsAddress(address) — false for a non-https: address, localhost / *.localhost, a single-label host, .local / .internal, and loopback, private (10/8, 172.16/12, 192.168/16), link-local, CGNAT and unspecified IPv4 literals, plus ::1, fc00::/7, fe80::/10 and IPv4-mapped private IPv6. A host name with a dot is taken as public (the page cannot see the reader's DNS).
  • ConnectAgentWidget.tsx: when the MCP address is not public HTTPS, the claude.ai / Claude Desktop column shows an Unavailable note (title, one-sentence reason naming the address's origin, remedy) in place of the static reachability small print, and the Doubao Work steps gain the same note for cloud tasks. Claude Desktop's steps, Claude Code, Codex, Cursor, WorkBuddy and QwenWork are unchanged. On a public HTTPS address nothing renders differently from main.
  • i18n: five new keys under connectAgent.unreachable in all ten console packs (PR feat(i18n)!: the Console's language packs follow the platform locale table, keyed by its tags, and Traditional Chinese (zh-Hant) ships #30902 is not on main: today's zh.ts / pt.ts).
  • Root changeset .changeset/30897-connect-agent-unreachable-address.md (@object-ui/app-shell, @object-ui/i18n: patch).

Tests

In ConnectAgentWidget.keyName-13355.test.tsx (the component's one harness file), a new top-level describe: the address classification table (16 non-public, 5 public); on http://localhost:3000 the claude.ai note with the address and the Doubao cloud-task note render, Claude Desktop / Claude Code steps stay, Codex and Cursor carry no note; on https://crm.example.com no note renders and the original reachability line is back. The test t mock now echoes the address option beside name.

Acceptance notes

  • The page judges only the address it shows (the discovery-relative MCP route resolved against the console's origin). A public-looking domain that resolves to a private IP on the reader's network is taken as public: the page cannot see DNS.
  • The Doubao hint keeps its last sentence about cloud tasks needing public HTTPS; on a non-public address the note now says so first, for this deployment.
  • The fallback hints that say "create a key below" are unchanged here; Connect an Agent never says what an assistant can do once connected, or whether the connection worked #30898 rewrites that copy and will name Advanced.

Verification

Head 1851c124: branch restarted on main 6ddf8272 (PR #30943's merge), this card's commit re-applied cleanly; full pnpm build on that base (118/118).

Live check on a local deployment (showcase with the fresh flag, console Vite dev, admin)
  • before (main): on http://localhost the claude.ai column shows the address with a copy button and the static small print "claude.ai (web) connects from Anthropic's servers — the deployment must be reachable over public HTTPS"; the Doubao steps carry the same kind of static line. Nothing reacts to the address.
  • after: Claude tab — a note "claude.ai (web): not available for this deployment / claude.ai connects from Anthropic's servers, and they cannot reach http://localhost:5197: only a public HTTPS address is reachable from there. / Serve this system at a public HTTPS address (https:// on a domain the internet can reach) to make it available."; Doubao Work tab — "Cloud tasks: not available for this deployment" with the same reason shape and remedy; Codex tab — no note.
Local tests and gates
  • pnpm --dir ui exec vitest run packages/app-shell/src/console/connect/ packages/i18n/ packages/app-shell/src/__tests__/product-neutral-renderer.ratchet.test.ts → 99 files, 1565 passed, 13 skipped (widget file 12/12)
  • pnpm --filter @object-ui/i18n run type-check && pnpm --filter @object-ui/app-shell run type-check → exit 0
  • eslint packages/app-shell/src/console/connect/ → 0 errors (3 pre-existing no-explicit-any warnings); pnpm check:new-line-citations → 0 new
  • dispatch-gates --commands derived 36 commands on 1851c12; all 36 exit 0 (incl. node scripts/check-sdui-manifest.mjs, pnpm --dir ui exec vitest run scripts/ 170 files passed); --ran reconciliation: 36 run, 0 NOT-MEASURED, 0 UNRUN.

Generated by Claude Code

…t available on a non-public address

claude.ai (web) and Doubao Work's cloud tasks reach only a public HTTPS
address. On an http:// address, localhost, a single-label or .local host,
or a private, loopback or link-local IP, both now show a note with the
reason and what makes them available; the local clients are unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L9qibzWZSWpaweunqGyeA9
@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface labels Nov 6, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tooling Fix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Connect an Agent offers the claude.ai and cloud-task steps on a deployment those clients cannot reach, with only a line of small print

1 participant