Skip to content

chore(deps-dev): bump storybook from 8.6.15 to 8.6.17 - #772

Merged
github-actions[bot] merged 1 commit into
mainfrom
dependabot/npm_and_yarn/storybook-8.6.17
Feb 23, 2026
Merged

chore(deps-dev): bump storybook from 8.6.15 to 8.6.17#772
github-actions[bot] merged 1 commit into
mainfrom
dependabot/npm_and_yarn/storybook-8.6.17

Conversation

@dependabot

@dependabotdependabotBot commented on behalf of githubFeb 23, 2026

Copy link
Copy Markdown
Contributor

Bumps storybook from 8.6.15 to 8.6.17.

Release notes

Sourced from storybook's releases.

v8.6.17

8.6.17

  • Harden websocket connection

v8.6.16

8.6.16

  • No-op release. No changes.
Changelog

Sourced from storybook's changelog.

8.6.17

  • Harden websocket connection

8.6.16

  • No-op release. No changes.

8.6.14

8.6.13

8.6.12

8.6.11

8.6.10

8.6.9

8.6.8

... (truncated)

Commits
  • c6e550a Bump version from "8.6.16" to "8.6.17" [skip ci]
  • 9cf9d89 Core: Require token for websocket connections
  • 7e51515 Bump version from "8.6.15" to "8.6.16" [skip ci]
  • See full diff in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core) from 8.6.15 to 8.6.17.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v8.6.17/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v8.6.17/code/core)
---
updated-dependencies:
- dependency-name: storybook
dependency-version: 8.6.17
dependency-type: direct:development
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
@dependabot@github

dependabotBot commented on behalf of githubFeb 23, 2026

Copy link
Copy Markdown
ContributorAuthor

Labels

The following labels could not be found: automated. Please create it before Dependabot can add it to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@vercel

vercelBot commented Feb 23, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
objectuiReadyReadyPreview, CommentFeb 23, 2026 8:43am
objectui-demoErrorErrorFeb 23, 2026 8:43am
objectui-storybookErrorErrorFeb 23, 2026 8:43am

Request Review

@github-actions
github-actionsBot merged commit 610c1f6 into mainFeb 23, 2026
4 of 11 checks passed
@dependabot
dependabotBot deleted the dependabot/npm_and_yarn/storybook-8.6.17 branch February 23, 2026 08:01
@github-actions

Copy link
Copy Markdown
Contributor

❌ Console Performance Budget

MetricValueBudget
Main entry (gzip)** KB**KB
Entry file``
StatusFAIL

📦 Bundle Size Report

PackageSizeGzipped
auth (AuthContext.js)0.31KB0.24KB
auth (AuthGuard.js)1.17KB0.53KB
auth (AuthProvider.js)7.36KB1.78KB
auth (ForgotPasswordForm.js)4.00KB1.44KB
auth (LoginForm.js)4.20KB1.45KB
auth (PreviewBanner.js)0.90KB0.50KB
auth (RegisterForm.js)5.66KB1.59KB
auth (UserMenu.js)3.40KB1.22KB
auth (createAuthClient.js)2.78KB0.98KB
auth (createAuthenticatedFetch.js)1.24KB0.60KB
auth (index.js)1.18KB0.51KB
auth (types.js)0.59KB0.35KB
auth (useAuth.js)1.57KB0.57KB
collaboration (CommentThread.js)18.38KB4.49KB
collaboration (LiveCursors.js)3.17KB1.27KB
collaboration (PresenceAvatars.js)3.65KB1.42KB
collaboration (index.js)1.16KB0.50KB
collaboration (useCommentSearch.js)1.98KB0.88KB
collaboration (useConflictResolution.js)7.75KB1.86KB
collaboration (useMentionNotifications.js)1.81KB0.68KB
collaboration (usePresence.js)6.33KB1.84KB
collaboration (useRealtimeSubscription.js)7.91KB2.01KB
components (index.js)1847.17KB433.11KB
core (index.js)0.81KB0.32KB
create-plugin (index.js)10.13KB3.17KB
data-objectstack (index.js)38.87KB9.57KB
fields (index.js)92.37KB18.57KB
i18n (i18n.js)2.03KB0.77KB
i18n (index.js)1.79KB0.72KB
i18n (provider.js)3.21KB1.09KB
layout (index.js)97.78KB25.90KB
mobile (MobileProvider.js)0.92KB0.49KB
mobile (ResponsiveContainer.js)0.94KB0.38KB
mobile (breakpoints.js)1.51KB0.70KB
mobile (index.js)1.19KB0.53KB
mobile (pwa.js)0.97KB0.49KB
mobile (serviceWorker.js)1.48KB0.62KB
mobile (useBreakpoint.js)1.54KB0.65KB
mobile (useGesture.js)4.42KB1.27KB
mobile (usePullToRefresh.js)2.53KB0.85KB
mobile (useResponsive.js)0.71KB0.42KB
mobile (useResponsiveConfig.js)1.36KB0.63KB
mobile (useSpecGesture.js)1.77KB0.77KB
mobile (useTouchTarget.js)1.01KB0.54KB
permissions (PermissionContext.js)0.31KB0.25KB
permissions (PermissionGuard.js)0.89KB0.45KB
permissions (PermissionProvider.js)3.11KB0.87KB
permissions (evaluator.js)4.00KB1.23KB
permissions (index.js)0.85KB0.40KB
permissions (store.js)0.91KB0.42KB
permissions (useFieldPermissions.js)1.28KB0.52KB
permissions (usePermissions.js)0.99KB0.49KB
plugin-aggrid (AddressField-DjN2_Oa7.js)3.05KB0.76KB
plugin-aggrid (AgGridImpl-Dx7qLWE5.js)7.04KB2.33KB
plugin-aggrid (AutoNumberField-Cv75rRi8.js)0.28KB0.27KB
plugin-aggrid (FileField--Sh7TXn1.js)5.90KB2.10KB
plugin-aggrid (FormulaField-BTrEHvp3.js)0.52KB0.38KB
plugin-aggrid (GeolocationField-O2Zquk-4.js)4.46KB1.50KB
plugin-aggrid (GridField-D7USr6Uk.js)1.71KB0.68KB
plugin-aggrid (LocationField-Dvi2PlfB.js)0.93KB0.54KB
plugin-aggrid (MasterDetailField-CV5Y8pDE.js)3.86KB1.17KB
plugin-aggrid (ObjectAgGridImpl-iCFRNsdP.js)920.44KB203.73KB
plugin-aggrid (ObjectField-UmL0F44x.js)1.61KB0.77KB
plugin-aggrid (QRCodeField-BNtkxBkd.js)3.38KB1.23KB
plugin-aggrid (RichTextField-CkjlEAJt.js)1.16KB0.59KB
plugin-aggrid (SignatureField-C9-m1IYy.js)3.33KB1.29KB
plugin-aggrid (SummaryField-BuvV3onE.js)0.48KB0.37KB
plugin-aggrid (UserField-DNI1psi1.js)2.44KB0.93KB
plugin-aggrid (VectorField-D_abxOU0.js)0.79KB0.45KB
plugin-aggrid (index-2XWZiXSX.js)19.95KB5.03KB
plugin-aggrid (index.js)0.22KB0.16KB
plugin-ai (index.js)25.35KB6.39KB
plugin-calendar (index.js)49.03KB13.35KB
plugin-charts (AdvancedChartImpl-GErbMD6M.js)126.98KB26.25KB
plugin-charts (BarChart-C_I0OFbj.js)542.77KB135.30KB
plugin-charts (ChartImpl-CnD20l5F.js)3.19KB1.10KB
plugin-charts (index-Byep0tj1.js)15.23KB4.49KB
plugin-charts (index.js)0.19KB0.16KB
plugin-chatbot (index.js)1140.69KB333.05KB
plugin-dashboard (index.js)156.26KB40.27KB
plugin-designer (index.js)328.33KB65.94KB
plugin-detail (AddressField-Bi_9K5ey.js)2.98KB0.75KB
plugin-detail (AutoNumberField-BxnFqllo.js)0.28KB0.26KB
plugin-detail (AvatarField-C9FUxKb6.js)2.62KB1.07KB
plugin-detail (BooleanField-BCkmXd4D.js)1.13KB0.51KB
plugin-detail (CodeField-i_JEPSj1.js)0.74KB0.47KB
plugin-detail (ColorField-BQsJKzNa.js)1.23KB0.54KB
plugin-detail (CurrencyField-DSUtanfx.js)1.48KB0.73KB
plugin-detail (DateField-CAn-cbax.js)0.54KB0.37KB
plugin-detail (DateTimeField-BIzCSHQF.js)0.71KB0.42KB
plugin-detail (EmailField-Bk6yp-VU.js)0.81KB0.48KB
plugin-detail (FileField-BpW9a5Oq.js)5.50KB1.94KB
plugin-detail (FormulaField-CJkkwIK8.js)0.51KB0.38KB
plugin-detail (GeolocationField-DLF1NtE-.js)3.71KB1.21KB
plugin-detail (GridField-D_2YmoKb.js)1.68KB0.68KB
plugin-detail (ImageField-3ArGKB6o.js)2.83KB1.14KB
plugin-detail (LocationField-3bnKLoQg.js)0.95KB0.54KB
plugin-detail (LookupField-Bh0-xfDY.js)4.00KB1.38KB
plugin-detail (MasterDetailField-B_v8jiYi.js)3.39KB1.00KB
plugin-detail (NumberField-DbjXjbIC.js)0.68KB0.44KB
plugin-detail (ObjectField-Dw5lEPkB.js)1.64KB0.76KB
plugin-detail (PasswordField-D0yxmNpw.js)1.21KB0.62KB
plugin-detail (PercentField-BnwYQEvm.js)1.89KB0.84KB
plugin-detail (PhoneField-t10i5JOI.js)0.80KB0.48KB
plugin-detail (QRCodeField-C4g9y7Y6.js)2.35KB0.91KB
plugin-detail (RatingField-fQOqinqq.js)1.62KB0.66KB
plugin-detail (RichTextField-BhyWeaLY.js)1.15KB0.59KB
plugin-detail (SelectField-CS2Gu9Rn.js)0.90KB0.49KB
plugin-detail (SignatureField-vipzYcs6.js)2.97KB1.10KB
plugin-detail (SliderField-CssQLV9F.js)1.00KB0.49KB
plugin-detail (SummaryField-ugYPYxjP.js)0.47KB0.36KB
plugin-detail (TextAreaField-D6wWsnwh.js)1.09KB0.59KB
plugin-detail (TextField-C_DjLkJT.js)0.82KB0.42KB
plugin-detail (TimeField-Be3-n5Wq.js)0.50KB0.34KB
plugin-detail (UrlField-BjTRlLMx.js)0.98KB0.52KB
plugin-detail (UserField-DFMUacOQ.js)2.33KB0.90KB
plugin-detail (VectorField-CKg9jdGa.js)0.78KB0.44KB
plugin-detail (index-BbvBDEqN.js)1846.04KB432.18KB
plugin-detail (index.js)0.90KB0.51KB
plugin-editor (MonacoImpl-hfdmoz6k.js)18.15KB5.59KB
plugin-editor (index-CuYbY6xb.js)10.10KB3.32KB
plugin-editor (index.js)0.19KB0.15KB
plugin-form (index.js)66.73KB13.98KB
plugin-gantt (index.js)244.31KB58.97KB
plugin-grid (index.js)95.22KB24.91KB
plugin-kanban (KanbanEnhanced-_27OOHhL.js)32.31KB9.09KB
plugin-kanban (KanbanImpl-CgkoIanE.js)14.19KB4.18KB
plugin-kanban (index-CVyX-djg.js)31.17KB9.18KB
plugin-kanban (index.js)0.42KB0.26KB
plugin-kanban (sortable.esm-CNNHgHk5.js)71.43KB18.99KB
plugin-list (index.js)1810.20KB426.19KB
plugin-map (index.js)130.47KB31.67KB
plugin-map (maplibre-gl-DSpYxujd.js)1416.27KB302.72KB
plugin-markdown (MarkdownImpl-E6vCIsNj.js)256.68KB64.45KB
plugin-markdown (index-Dr10kVgr.js)9.63KB3.17KB
plugin-markdown (index.js)0.19KB0.15KB
plugin-report (index.js)65.85KB13.42KB
plugin-timeline (index.js)107.97KB25.07KB
plugin-view (index.js)135.39KB34.38KB
plugin-workflow (index.js)82.94KB17.11KB
react (LazyPluginLoader.js)3.77KB1.33KB
react (SchemaRenderer.js)8.21KB2.56KB
react (index.js)0.66KB0.38KB
tenant (TenantContext.js)0.31KB0.25KB
tenant (TenantGuard.js)1.04KB0.43KB
tenant (TenantProvider.js)2.76KB0.98KB
tenant (TenantScopedQuery.js)0.77KB0.44KB
tenant (index.js)0.75KB0.38KB
tenant (resolver.js)2.64KB0.76KB
tenant (useTenant.js)0.50KB0.32KB
tenant (useTenantBranding.js)0.62KB0.39KB
types (ai.js)0.20KB0.17KB
types (api-types.js)0.20KB0.18KB
types (app.js)2.78KB0.98KB
types (base.js)0.20KB0.18KB
types (blocks.js)0.20KB0.18KB
types (complex.js)0.20KB0.18KB
types (crud.js)0.20KB0.18KB
types (data-display.js)0.20KB0.18KB
types (data-protocol.js)0.20KB0.19KB
types (data.js)0.20KB0.18KB
types (designer.js)0.73KB0.39KB
types (disclosure.js)0.20KB0.18KB
types (feedback.js)0.20KB0.18KB
types (field-types.js)0.20KB0.18KB
types (form.js)0.20KB0.18KB
types (index.js)1.25KB0.58KB
types (layout.js)0.20KB0.18KB
types (mobile.js)0.20KB0.18KB
types (navigation.js)0.20KB0.18KB
types (objectql.js)0.20KB0.18KB
types (overlay.js)0.20KB0.18KB
types (permissions.js)0.20KB0.18KB
types (plugin-scope.js)0.20KB0.18KB
types (record-components.js)0.20KB0.19KB
types (registry.js)0.20KB0.18KB
types (reports.js)0.20KB0.18KB
types (tenant.js)0.20KB0.18KB
types (theme.js)0.20KB0.18KB
types (ui-action.js)0.20KB0.18KB
types (views.js)0.20KB0.18KB
types (widget.js)0.20KB0.18KB
types (workflow.js)0.20KB0.18KB

Size Limits

  • ✅ Core packages should be < 50KB gzipped
  • ✅ Component packages should be < 100KB gzipped
  • ⚠️ Plugin packages should be < 150KB gzipped

os-zhuang added a commit that referenced this pull request Jul 8, 2026
…st publish errors (cloud#771/#772) (#2351)
Trust-polish batch from the 2026-07-09 magic-flow acceptance run
(objectstack-ai/cloud#771, #772):
- The chat surface now speaks the CONVERSATION's language: a Chinese thread
under an English console got English canned approval messages ("Looks good —
build it as proposed."), English progress labels and English starter chips.
detectConversationLanguage() reads the latest user message (CJK → zh) and
wins over the UI locale; falls back to the UI language for fresh threads.
- Default agent tab prefers BUILD when the catalog offers it: the build
surface is the one that resumes its in-progress conversation, so landing on
the ask tab hid the user's build thread behind a tab switch ("my build chat
disappeared" → they rebuild from scratch — the user-side path of cloud#769).
Ask-only users are unaffected.
- Build persona stops masquerading as a data-Q&A box: its empty-state pitch
and starter chips are now build-flavoured (zh + en), instead of the ask
persona's "query and analyze your data" copy with metadata chips.
- Publish failure toast carries the real error: the handler threw
`new Error(String(failedCount))`, so users saw "Publish failed — 2". Now it
surfaces the first failed item's type/name/error (+N more) or the server
error message.
- The floating panel's publish success now pulses emitMetadataRefresh() (the
full-page AI route already did), so the launcher/app switcher lists the new
app WITHOUT a page reload — "open it from the launcher" was a lie until F5.
- Re-hydrated tool-call-only turns no longer render their internal
placeholder ("(called todo_write, propose_blueprint)") as prose; they
collapse to a quiet localized activity note.
Build green (turbo app-shell+plugin-chatbot), vitest 1242 passed.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
os-zhuang added a commit that referenced this pull request Jul 14, 2026
…lier handoff card (#2458) (#2496)
When the `ask` agent declines a build-shaped request, the ~20s wait before the
"Open in Builder →" card is the LLM's time-to-tool-call. During it the chat
could show dead air: a blank bubble, or the static "执行过程" activity note when
the backend streamed a `(called …)` tool-call placeholder mid-stream.
`ChatbotEnhanced` now renders the existing `ThinkingDots` indicator whenever a
streaming assistant turn has nothing VISIBLE yet — whitespace-only content, a
`(called …)` placeholder, or reasoning hidden in `summary` mode. The static
"执行过程" note is kept only for FINISHED (re-hydrated) tool-call-only turns
(#772 preserved). The `builderHandoff` card already renders at `output-available`
with no prose gate, so it surfaces the instant the tool result lands; the typing
cursor now only paints beside real streaming prose.
Tests: card renders while streaming before prose; live dots (not 执行过程) for a
mid-stream placeholder; 执行过程 note preserved for a finished placeholder turn.
Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/objectui that referenced this pull request Aug 10, 2026
…3837) (objectstack-ai#3897)
* fix(app-shell): 方案卡的 Building… 徽标随 UI 语言取值,不再被会话语言门控 (objectstack-ai#3837)
`AiChatPage` 用 `convZh`(会话语言)门控四个字符串,因为 cloud 确认门
(`service-ai-studio` `confirm-gate.ts` `APPROVAL_RE`)只认中英,发进线程的
文本必须与线程本身同语言(objectstack-ai#772/objectstack-ai#2884)。该门上方注释的后半句写明了另一半规
则:button LABELS stay on the UI locale。
`planBuildingLabel`(objectstack-ai#2632 引入)落在了这句的错误一侧,中文会话恒取硬编码的
`正在搭建…`,两个后果都已实测:
- **混合语言的卡片**:英文控制台里,中文会话的方案卡 `Proposed plan` /
`Build it` / `Built` / `Not yet built` 全英文,中间夹一个中文徽标。objectstack-ai#2458
第 4 条记录的是同一个病的反方向。
- **翻译永远读不到**:中文会话恒走字面量,`console.ai.planBuilding` 的 zh
值对中文读者无效。objectstack-ai#3546 切片四(PR objectstack-ai#3839)刚把该 key 补进十包,只能做围
堵 —— 把 zh 值写成与字面量逐字节相同并把两者钉在一起。
徽标现在与相邻十二个标签一样读 `t('console.ai.planBuilding', …)`:十个包全
部可达(德文控制台 + 中文会话渲染 `Wird erstellt…`),zh 包成为该中文措辞的
唯一来源(值不变,中文读者看到的字符串与改动前完全一致)。
三条出站文本(`planApproveMessage` / `planApproveDefaultsMessage` /
`changesConfirmMessage`)一行未动,仍随会话语言 —— 复核确认三者都交给
`onSendMessage`(`ChatbotEnhanced.tsx:1598`、`:2395`)、由门读取,正是
`convZh` 分支存在的那一类;全文件再无其它 `*Label`/`*Title` 被该门控住
(`convZh` 全部读点:定义 1 处 + 这三条)。
钉子:
- `packages/app-shell/.../AiChatPage.planCardLocale.test.tsx`(新增)真渲染
`ChatPane` + 真 `I18nProvider` + 真 `isConversationZh`,把
`ChatbotEnhanced` 换成 props 记录器:en 控制台 + 中文会话 → `Building…`
且卡上 `*Label` 无一含中日韩字符;de 控制台 + 中文会话 → `Wird erstellt…`
(三方语言证明是包在应答,而非两路三元);zh 控制台 → `正在搭建…`;三条
出站文本仍随会话。
- `packages/i18n/.../console-namespace-3546.test.tsx`:切片四埋的围堵钉按其
自述翻转 —— 从「字面量与 zh 包逐字节相同」改为钉住门已移除,并把不变量放
宽一步:`convZh` 只许门控出站 `*Message`,任何新读点都会红。
反向验证(方向先判后跑,与预判一致):还原三元 → 3 红 —— i18n 钉子按自定义
消息点名、en 控制台用例、de 控制台用例;zh 控制台用例与三条出站文本保持绿
(前者按设计逐字节相同,不具区分力,已在测试头注明)。
顺带:`conversationLanguage.ts` 模块头把 progress labels 也列进「随会话」,
该句在本改动后不再为真,收窄为「只治离开控制台发给 agent 的文本」。
写钉子时量到发送半边另有一个缺陷(zh 控制台 + 英文会话会把中文确认句发进英
文线程;`planAnswerMessage` 完全没有门控),不在本单范围,已立 objectstack-ai#3896。
测试:`packages/app-shell/src/console/ai` + `packages/i18n` 47 文件 654 通过;
两包 type-check 通过,全仓 `turbo run type-check` 78/78 通过;改动文件
eslint 零告警;`check-control-bytes` / `check-i18n-call-site-keys` /
`check-i18n-en-drift` 均通过(零 en 值变更)。
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
Co-authored-by: Claude <noreply@anthropic.com>
* test(app-shell): 钉子里的 agent 桩改用具名类型断言,不用 as never
评审可读性,零行为改动:`ChatPane` 的 agents 桩从 `as never` 改成
`as unknown as AgentDescriptor`(类型导入,运行期擦除;该模块在本文件里被
vi.mock,类型不受影响)。
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
Co-authored-by: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/objectui that referenced this pull request Aug 10, 2026
…ectstack-ai#3921)
objectstack-ai#772 / objectstack-ai#2884 立下的规则写在 `AiChatPage` 的门上:出站文本随**会话**语言,渲染
标签随 UI 语言。规则只实现了一半 —— 三条出站文本写作
`convZh ? '<中文字面量>' : t('console.ai.…')`,而 `t()` 读的是 **UI 包**,于是
「非中文」那一支答的是 UI 语言、不是英文;第四条 `planAnswerMessage` 连门都没过。
两个方向各一个已实测后果:
- **zh 控制台 + 英文会话发出中文。** zh 包定义了全部四个 key,所以 `t()` 是命中
而非落到英文 defaultValue:点 Build it,进英文线程的是 `确认,开始搭建。`。cloud
确认门(`service-ai-studio` `confirm-gate.ts` `APPROVAL_RE`)两种语言都认,构建
照走,agent 随后把整条线程转成中文 —— 即 objectstack-ai#2884 的症状、触发方向相反。
- **一键回答芯片两个方向都发 UI 语言。** 完全未门控:中文会话里发出
`For "…", go with: …`(objectstack-ai#772 开头那句抱怨的字面重演),zh 控制台下的英文会话里
发出中文句子。
四个站点现在统一走一个取值器 `outboundAgentText.ts`:中文会话取 `zh` 包该 key,
其余会话取 `en` 包该 key,永不读 UI 包。三个控制台 AI 界面(`/ai` 页、chat dock、
Studio copilot)都挂同一个 `ChatPane`,一并生效。
直接读两个包而不用 `t(key, { lng })` 是刻意的:i18next 的答案取决于宿主 app 装了
哪些 bundle 以及 `fallbackLng`,而 zh 查询静默回落到 en 正是上面那个错语言 bug。
取值器内的兜底表按语言分,并被钉成与两个包逐字节一致 —— 万一某个包不再定义该 key,
中文会话兜底到中文,绝不兜到英文。
标签未动:仍随 UI 语言。objectstack-ai#3837 那条「`*Label` 漂回会话门就红」的钉子现在同时守住
反向 —— 出站 `*Message` 被重新塞回 `t()` 也会红。
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants