Repository navigation
fix(app-shell,plugin-chatbot,i18n): AI build surface UX — land on the running app, a task-named composer, one usage meter, a gauge that is not a spinner, a localized scope chip (objectui#11658) - #11662
Merged
Conversation
…d and names the target app by its label; the in-app composer names the task (objectui#11658 items 5, 2)
Item 5: both extend-mode chip sites (the proposed-plan card and the live
design panel) read the locale pack's `chatbot.plan.extendTarget` sentence
instead of the English literal the component defaulted to, and name the
target app by the label the host resolves (`resolveAppLabel`); the machine
name moves to the tooltip. A host `planExtendLabel` still wins.
Item 2: inside an app (the build agent scoped to a package) the composer
placeholder is `console.ai.askOrChangeApp`, never "Ask {agent}".
Co-authored-by: Claude <noreply@anthropic.com>
…ip's host-side app label (objectui#11658 items 2, 5) Co-authored-by: Claude <noreply@anthropic.com>
…gauge no longer reads as a loading spinner (objectui#11658 items 3, 4) Item 3: the popover shows the pool's used share as one percentage (`console.ai.usage.poolUsed`); the build / data-Q&A split is no longer drawn and its three keys (`meterBuild`, `meterAsk`, `breakdownTitle`) leave all ten packs. `useAiUsage` still reads `breakdown` strictly off the wire. Item 4: the header glyph is a closed, tone-coloured outline around a pie wedge instead of a stroked arc over a faint track, so low usage reads as a quantity, not a spinner. Co-authored-by: Claude <noreply@anthropic.com>
…on the running app with the properties panel collapsed (objectui#11658 item 1) The built-moment transition passes `STUDIO_RUN_LANDING` router state with its navigation to the Interfaces pillar, which reads it once at mount: the canvas opens in run mode with the properties aside collapsed, and the first switch to Design re-opens the aside the landing collapsed. Every other arrival, the explicit "Design in Studio" door included, opens on Design as before. Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Claude <noreply@anthropic.com>
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
hotlong
marked this pull request as ready for review
October 6, 2026 00:27
hotlong
enabled auto-merge
October 6, 2026 00:28
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #11658
This fixes the five AI build surface items from the 2026-10-05 cloud acceptance run (the objectui half of cloud#2627, cloud#2634 and cloud#2435 item 8). Each item can be accepted on its own. The rulings on the card were applied as written.
What changed, per item
/studio/PKG/interfaces. The?surface=dashboard:NAMEpart is added afterwards by the Interfaces pillar'suseSurfaceDeepLinkmirror when it auto-opens the first nav leaf. The cloud build envelope supplies only the package id.STUDIO_RUN_LANDINGfrom the newstudioLanding.ts. The Interfaces pillar reads it once, at mount. It opens the canvas in 运行 / Run with the properties aside collapsed.editPackageId), the placeholder isconsole.ai.askOrChangeApp. In zh it reads 「问问数据,或让我改改这个应用…」 and in en "Ask about your data, or ask me to change this app…". This applies to the console dock in a running app, the Studio dock and/ai/build?package=. The cold-start build surface and the ask agent keep their placeholders.console.ai.usage.poolUsed(for example "19% used").meterBuild,meterAskandbreakdownTitleare removed from all ten packs.useAiUsagestill readsbreakdownstrictly from the wire. Nothing renders it any more (see Acceptance notes).MeterGauge, which replacesMeterRing) is a closed outline in the tone colour around a pie wedge that fills clockwise from 12 o'clock. Before, it was a stroked arc over a faint 25%-opacity track. At low usage that drew a short open arc, which is the outline of a spinner. A pie inside a closed outline reads as a quantity at any fraction.chatbot.plan.extendTargetinstead of the English default "Adding to existing app". The two sites are the proposed-plan card andBlueprintProgressPanel, and they share oneuseExtendChiphook.resolveAppLabelprop onChatbotEnhanceddoes this, and ChatPane passes one built from the metadata apps. The machine name moves to the chip's tooltip.planExtendLabelstill takes precedence.Mechanism assumptions (from the dispatch)
AiChatPage.tsx, the one that callspaneNavigate. The cloud side does not need to change.console.ai.askAgentis read at one source site, ChatPane'splaceholderprop. ChatPane has three hosts: the full-pageAiChatPage, the consoleChatDock(ChatDockConversation), and the Studio dock (StudioAiCopilot). Fixing that one site covers all of them.ChatbotEnhanced: theplanExtendLabeldefault and theBlueprintProgressPanelextendLabeldefault. A third occurrence was in a JSDoc. All three are gone.Verification (at the head this PR was opened on)
StudioDesignSurface.runLanding-11658.test.tsx(item 1, pillar)AiChatPage.builtLandsRunning-11658.test.tsx(item 1, producer, with the "Design in Studio" door as the control)AiChatPage.appContextComposer-11658.test.tsx(item 2, plus the host half of item 5)AiUsageIndicator.test.tsxblocks "the popover figure (one meter)" (item 3) and "the gauge glyph (not a spinner)" (item 4)ChatbotEnhanced.extendChip-11658.test.tsx(item 5). This pins that the zh chip contains no ASCII-only literal: it has no Latin-letter run at all, and the target label in the fixture is Chinese.git checkout HEAD. The restore was proven by the on-disk blob hash equalling the HEAD blob and by an emptygit diff HEAD, and the tests went green again.type-checkfor@object-ui/i18n,@object-ui/plugin-chatbotand@object-ui/app-shell, afterturbo run build --filter='@object-ui/app-shell^...'.packages/plugin-chatbot/andpackages/i18n/, andpackages/app-shell/(results are in the report comment).check:i18n-keys,check:i18n-drift,check:i18n-dead-keys,check:new-line-citations(0 new citations),changeset:check,check:changeset-claims,check:pending-changeset-literals, andnode scripts/check-changeset-presence.mjs.eslint --no-inline-configover the 20 changed.ts/.tsxfiles. Its one error,react-hooks/static-componentsin the DataPillar header, already exists on the base file and is suppressed inline in normal runs. Linting each of the four touched source files at base and at head gives identical per-rule counts. The repo-widepnpm lintis left to CI./studio/PKG/interfaces?surface=dashboard:NAME, now in Run.Acceptance notes
packages/app-shell/src/views/studio-design/(StudioDesignSurface.tsx, the newstudioLanding.tsand its test). That is outside the claim's listed globs. I took it as "the post-build navigation site it finds", because the dispatch asks for the objectui half of the default tab and the collapsed panel, and both are state of the Interfaces pillar.useAiUsagestill parsesbreakdownstrictly, and no renderer reads it now. The wire contract was left alone. If cloud drops the field, its parser test is the place to retire it. No one owns that follow-up.Generated by Claude Code