Repository navigation
Description
epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff
Filing gate: ③ the maintainer's direct order. Asked 「用浏览器试一下,目前连接智能体系平台最核心的功能是否建议优化相关的界面以及把这个菜单放到更明显的位置」, then on the walkthrough's suggestions: 「都同意,立卡」 (2026-11-06). Found in a real-user browser walkthrough of Connect an Agent on main 04f36b63f8 (the widget and its page metadata are unchanged on 8b9cc712ab), as an administrator and as a member, on a local test deployment.
Business reason. Connecting an AI client is something every person does for themselves: the page says each call runs as the caller, with the caller's permissions. It is the platform's main way for people to work through Claude, Doubao, Cursor and the rest. Today nobody meets it on the way: a member does not know it exists, and an administrator finds it among datasource and connector screens.
Reader. The UI lane dev. The entries come from packages/mcp/src/connect-ui.ts:100-139 (navigationContributions), the avatar menu is in ui/packages/app-shell/src/layout/AppHeader.tsx (the 个人资料 item at line 1268), Home's checklist is ui/apps/console/src/pages/settings/FirstRunChecklist.tsx, and the labels are nav_connect_agent and pages.connect_agent in packages/platform-objects/src/apps/translations/zh-CN.ts:30,73,195 and the en.ts twin.
Duplicates. Searched connect agent in:title (23 hits, all closed: the client cards, the Account door #16746, key naming, copy fixes), Connect an Agent home (373, none about placement) and first-run checklist (the checklist itself, #30206 / #30868, closed). None moves the entry.
Measured
| Who | Path today | What they see |
|---|---|---|
| Administrator | Setup → 集成 (the second-last of 8 groups) → item 36 of the 40 shown (35 of 39 on 8b9cc712ab, which drops 功能开关) |
Between 数据源 and 连接器凭据 |
Member (chen@example.test) |
Account → 开发者 → 连接智能体 | 开发者 is collapsed by default (expanded: false); Setup answers 403 |
| Everyone | Home, the avatar menu, the app switcher | No entry |
The avatar menu holds 个人资料, 我的组织, theme, language and notifications, and sign out: the person's own things, which is where this belongs.
Expected
- The avatar menu has an item that opens the page, for every signed-in person.
- Home shows a dismissible card that says, in plain words, that you can work in this system from Claude, Doubao and similar AI assistants, with one button to the page. It is hidden once dismissed or once the person has connected one.
- The administrator's first-run checklist on Home gains a row for it. Its done state is read from a real record (an authorization or an API key the person holds), like the other rows, never from a click.
- In Account the entry leaves 开发者 for a group of its own, expanded by default. In Setup it moves out of the bottom of 集成 to the top part of the nav.
- The page and its entries are called 连接 AI 助手 / Connect an AI Assistant. Studio already has 智能体 for the agents you build, and Setup has AI 与 Embedder, so the current name reads as one of those.
Nothing in the top bar: it is already full. Items 2 and 3 can follow #30894, since both need to know whether the person has connected anything.
Activity
objectstack-fleet commentedon Nov 6, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p2 ·
domain:ui· 2026-11-06T09:55Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 6, 2026
domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf
Claim: PM loop round 5 · 2026-11-06T11:03Z
Session:
session_01L9qibz5UZefuR7CExjD9VX(card thread, dev) · seatsession_01L9qibw7DekEe3wx5f3zphfAccount:
os-teslaBranch:
claude/project-thread-j4vink(a cloud card thread can push only its designated branch)Worktree:
objectstack-issue-30895Domain:
domain:uiSeat:
domain:ui#2File surface:
packages/mcp/src/connect-ui.ts(navigationContributions),ui/packages/app-shell/src/layout/AppHeader.tsx(avatar menu),packages/platform-objects/src/apps/translations/*.ts(nav_connect_agent,pages.connect_agent) and the Account / Setup nav definitions they target, the console i18n packs for the avatar item, their tests, root.changeset/;ConnectAgentWidget.tsx⛔Container & model: M,
mode:thread,model: default tier(dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (placement and naming of the Connect an Agent entry)
Thread-read: 6682141676
Premise: holds (
packages/mcp/src/connect-ui.tsL100–139 onorigin/mainstill contributesnav_connect_agenttosetup/group_integrationsandaccount/grp_account_developer; no avatar-menu item) · measured live first by the devSerial constraints cleared: #30894 (ui seat 3, split 6683276259) edits
ui/packages/app-shell/src/console/connect/**; this claim does not touch that directory. Expected 2–3 (Home card, checklist row) wait for #30894's "has connected" read and are a second PRPart of #30895.Scope this claim: Expected 1, 4, 5; the PR says
Part of #30895.objectstack-fleet commentedon Nov 6, 2026
domain:ui#2 · os-tesla · session_01L9qibz5UZefuR7CExjD9VX
os-dev-report
{ "issue": 30895, "status": "done", "branch": "claude/project-thread-j4vink", "pr": "https://github.com/objectstack-ai/objectstack/pull/30935", "session": "session_01L9qibz5UZefuR7CExjD9VX", "premise_still_valid": true, "summary": "Part of #30895 (Expected 1, 4, 5). The page and both nav entries are renamed Connect an AI Assistant in en/zh-CN/ja-JP/es-ES (source digests re-recorded). Account: new expanded grp_account_ai_assistant slot after Inbox, filled by the MCP contribution. Setup: the entry moves to group_overview behind System Overview (same manage_platform_settings gate). Console avatar menu: a Connect an AI Assistant item under Profile, drawn only while the served Account app carries the connect_agent page; label in all ten console locales. Path text made false by the move fixed in plugin.ts, keys.ts, server.json, mcp README and five docs pages (surface extended by the seat). Measured live before/after as admin and member, en and zh.", "tests": "mcp 56 files/681 tests pass; platform-objects 117/1591 pass; ui packages/i18n + app-shell/src/layout 237 files, 2431 pass, 13 skipped; cli 4 pin files pass; runtime keys 21 pass; ablation of the avatar page gate (ablation-replace, anchor 1->0) reds the MCP-off case (1 failed | 7 passed), restored blob == HEAD. Head 0264ecd7.", "gates": "dispatch-gates --commands: 100 derived, 100 run, all exit 0 (check-plugin-teardown-shape --self-test exit 3 until the pinned commit was fetched, then 0); --ran reconciliation: 100 derived, 100 run, 0 NOT-MEASURED, 0 UNRUN. Extra: check:app-nav-i18n exit 0 (account 13 ids), check:changeset-fixed exit 0, ui check:new-line-citations 0 new; typecheck mcp/platform-objects/runtime/cloud-connection/service-automation/cli and type-check @object-ui/i18n/@object-ui/app-shell exit 0. CI: in_progress at report time.", "line_budget": "38 files at 0264ecd7, +299 / -104 = 403 changed lines (under 3000)", "files_changed": 38, "deviations": "File surface extended by the seat (wording only): packages/mcp/src/plugin.ts, packages/runtime/src/domains/keys.ts, packages/mcp/server.json, four named docs pages, plus content/docs/deployment/environment-variables.mdx and packages/mcp/README.md (announced to the seat). Comment-only edits in packages/cloud-connection/src/cloud-connection-ui.ts and packages/services/service-automation/src/connector-credentials-ui.ts (their priority headers named the moved entry), and packages/cli/scripts/check-app-nav-i18n.mjs comments; listed in the PR body. Local test:repo not run (CI's).", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "4 reads (issue_read x3, pull_request_read x1); 0 write tools", "api_writes": "2 relay writes: pr_create (fleet-write run 42217903031, PR #30935) and this os-dev-report comment (post-stamped)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: #30894 / seat · ConnectAgentWidget.tsx registry label 'Connect an Agent' (palette label) left while #30894 holds that directory · noted, not filed" ] }objectstack-fleet commentedon Nov 6, 2026
domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf
ACCEPT → PR #30935 comment 6686013236 · 2026-11-06T13:31Z · head
34e84800(Connect an AI Assistant: rename, Setup Overview, Account group, avatar item; 403 lines, Tier S path,Part of #30895). Landing through the merge queue. Expected 2 and 3 follow in a second PR after #30894.objectstack-fleet commentedon Nov 6, 2026
domain:ui#2 · os-tesla · session_01L9qibw7DekEe3wx5f3zphf
Landed (part 1: rename, Setup Overview, Account group, avatar item) at 2026-11-06T14:01Z: PR #30935 merged as
78eb35253a(seat ACCEPT 6686013236 on head34e84800). The PR saidPart of #30895, so the card stays open.git grep -c grp_account_ai_assistant origin/main -- packages/platform-objects/src/apps/account.app.tsgit grep -n "group: 'group_overview'" origin/main -- packages/mcp/src/connect-ui.tsgit grep -c header-connect-ai-assistant origin/main -- ui/packages/app-shell/src/layout/AppHeader.tsxRelease:
session_01L9qibw7DekEe3wx5f3zphf(domain:ui#2, claim 6683345034) · because part 1 has landed and part 2 cannot start · back topm:queue, assignee cleared in this stroke.Resume-from:
main@78eb35253ae672b41ab78c6ee2cc6c0e7784f72aRemainder: Expected 2 (the Home card) and Expected 3 (the first-run checklist row) both need "has this person connected anything", which #30894 provides. #30894 is
pm:blocked(ui seat 3; server #30345 and #30918). The card's last PR (Fixes #30895) is dispatched once #30894 lands.objectstack-fleet commentedon Nov 7, 2026
domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr
Claim: PM loop round 1 · 2026-11-07T15:41Z
Session:
session_01FEkQ5pMhSEyeAKtt6btsBe(card thread, dev) · seatsession_01FEkQ5nLA7wiVY5YWjT9SvrAccount:
os-project-managerBranch:
claude/project-thread-l2jntkWorktree:
objectstack-issue-30895Domain:
domain:uiSeat:
domain:ui#1File surface: Home:
ui/apps/console/src/pages/settings/FirstRunChecklist.tsxand the Home page card, the shared "has connected" read inui/packages/app-shell/src/console/connect/**(built by #30898), their i18n strings and tests, root.changeset/Container & model: M,
mode:thread,model: default tier(dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (placement of the Connect an AI Assistant entry)
Thread-read: 6686623178
Premise: holds: part 1 landed (PR #30935); Expected 2 and 3 waited on #30894, closed 2026-11-07 (PR #31125)
Serial constraints cleared: second in this thread, after #30898's PR merges; the branch restarts on
mainthen (Resume-from of Release 6686623178 is superseded by that restart)Scope: Expected 2 (Home card) and Expected 3 (first-run checklist row read from a real record); PR says
Fixes #30895. Order:/mnt/project-files/pm-orders/ui/order-30898.md. Summons: the maintainer's 「开一个 devx 席位,开一个 spec 席位,开一个 ui 席位」 (this project, 2026-11-07).objectstack-fleet commentedon Nov 7, 2026
domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr
Progress · 2026-11-07T19:08Z · answering triage's knock 6711762389
#30895 is serial behind #30898 on the same card thread (claim's branch
claude/project-thread-l2jntk). It could not start until PR #31198 merged (2026-11-07T17:50Z); the seat sent the start at 2026-11-07T17:53Z, with the branch restarted onmainand the "has connected" read #30898 built to be reused, not copied. No commit is pushed yet.Next act: a draft PR with
Fixes #30895(Expected 2, the dismissible Home card; Expected 3, the administrator first-run checklist row read from a real authorization or API key).ETA: about three hours from this comment, for the draft PR and the dev report.
objectstack-fleet commentedon Nov 7, 2026
domain:ui#1 · os-project-manager · session_01FEkQ5pMhSEyeAKtt6btsBe
os-dev-report
{
"issue": 30895,
"status": "done",
"branch": "claude/project-thread-l2jntk",
"pr": "#31236",
"head": "68ff0b24",
"session": "session_01FEkQ5pMhSEyeAKtt6btsBe",
"premise_still_valid": true,
"summary": "Expected 2: a dismissible Home card for every signed-in person (one plain sentence, one button to Connect an AI Assistant), drawn only when MCP is on, the person has not closed it on this browser, and useConnectedAccess answered nothing connected (no authorized assistant, no working API key); no card while the read is out or failed. Dismissal measured first: Home has no server-side preference store, its two dismissible items use browser localStorage, so the card does too, keyed per person. Expected 3: first-run checklist row 7 connect_assistant, done from the same read (never a click), left out when unreadable or MCP is off, read only once the checklist draws. One read reused from PR #31198 (gains { enabled } and a failure-safe assistants read); the avatar menu's path rule moved to console/connect/connectAssistantPath.ts and is shared by all three entries. Eight new keys per pack; Clause-② measured yes (widening), same as the seat's corrected arm.",
"tests": "ui vitest home/ + connect/ + layout/ + console settings/ + packages/i18n/ on 68ff0b2: 318 files, 3263 passed, 13 skipped (new: card 9/9, checklist 7/7); type-check app-shell, i18n, console exit 0; ablations (restored blob == HEAD each): card shown while connected 3 failed / 6 passed; stored dismissal ignored 1 failed / 8 passed; row never done 2 failed / 15 passed; live showcase: admin en/zh (card + row not done, button opens the page, after an API key mint no card and row done 3 of 7), member zh (card, close survives reload, no checklist).",
"gates": "dispatch-gates --commands on 68ff0b2: 38 derived, 38 exit 0; --ran: 38 derived, 38 run, 0 NOT-MEASURED, 0 UNRUN (record: project files pm-orders/ui/30895-gates-ran.txt); eslint touched files 0 errors, new files 0 warnings. PR check-runs: in_progress at report time.",
"line_budget": "723 changed lines (+694 / -29, 22 files) vs 3000",
"files_changed": 22,
"deviations": [
"File surface: ui/packages/app-shell/src/layout/AppHeader.tsx (its copy of the Connect path rule moved to console/connect/connectAssistantPath.ts, behaviour unchanged) and ui/packages/app-shell/src/index.ts (exports useConnectedAccess, connectAssistantPath for the console) are outside the listed files.",
"Changeset also names @object-ui/console (patch): it is not private and ships dist.",
"After the branch restart a fresh pnpm install was needed (lint gained a metadata-core link on main) before the console closure would build.",
"Local test:repo not run (CI's)."
],
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "1 — issue_read x1 (claim read, reads only); 0 writes",
"api_writes": "2 — relay pr_create (fleet-write run 42405228431, PR #31236), this os-dev-report comment (post-stamped)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · an administrator with nothing connected gets both the Home card and the checklist row, each reading the two records once; noted in Acceptance notes, not filed"
]
}
Generated by Claude Code
objectstack-fleet commentedon Nov 7, 2026
domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr
Claim amendment · 2026-11-07T19:17Z · claim 6709202999 · the declaration, measured by the dev
Clause-②: yes (widening)
Metadata-protocol: none
The claim said
Clause-②: noas a default. The diff adds eight keys to every published@object-ui/i18nlocale pack (home.connectAssistant.*andconsole.firstRunChecklist.connectAssistant.*) and removes or rewords none, so it widens a published surface. The new@object-ui/app-shellexports are on a private package. The seat owes aTIER_DEFAULTreview of the declaration before landing. Everything else in the claim stands.objectstack-fleet commentedon Nov 7, 2026
domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr
ACCEPT → PR #31236 comment 6712049162 · 2026-11-07T19:34Z · head
68ff0b24d8f7246075ba39a7b6b46023b68ff439; declaration review PASS 6711875180. Landing by relaypr_ready+automerge_enable.objectstack-fleet commentedon Nov 7, 2026
domain:ui#1 · os-project-manager · session_01FEkQ5nLA7wiVY5YWjT9Svr
Landed · 2026-11-07T20:02Z
a0b40f2a29af9ed111f758f891acfcf3b2ea2d45onmaincompletedbyFixes #30895; no otherdomain:uicard left the open inventoryState:
pm:dispatchedremoved, assignee cleared.