@object-ui/plugin-chatbot 17.6.0 → 18.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2814 -0
- package/README.md +84 -28
- package/dist/AiPendingActionsInbox.d.ts +8 -2
- package/dist/AiPendingActionsInbox.d.ts.map +1 -1
- package/dist/ChatbotEnhanced.d.ts +235 -101
- package/dist/ChatbotEnhanced.d.ts.map +1 -1
- package/dist/FloatingChatbot.d.ts +1 -1
- package/dist/FloatingChatbot.d.ts.map +1 -1
- package/dist/chatMessageAdapter.d.ts +18 -6
- package/dist/chatMessageAdapter.d.ts.map +1 -1
- package/dist/elements/conversation.d.ts +1 -1
- package/dist/elements/conversation.d.ts.map +1 -1
- package/dist/elements/index.d.ts +10 -10
- package/dist/elements/message.d.ts +1 -1
- package/dist/elements/message.d.ts.map +1 -1
- package/dist/elements/prompt-input.d.ts +10 -2
- package/dist/elements/prompt-input.d.ts.map +1 -1
- package/dist/elements/tool.d.ts +13 -1
- package/dist/elements/tool.d.ts.map +1 -1
- package/dist/index.d.ts +48 -59
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3217 -1945
- package/dist/index.umd.cjs +3 -3
- package/dist/mapMessages.d.ts +309 -6
- package/dist/mapMessages.d.ts.map +1 -1
- package/dist/recordLink.d.ts +34 -0
- package/dist/recordLink.d.ts.map +1 -0
- package/dist/tool-display.d.ts +97 -26
- package/dist/tool-display.d.ts.map +1 -1
- package/dist/useAgents.d.ts +5 -0
- package/dist/useAgents.d.ts.map +1 -1
- package/dist/useAiApprovalsTranslation.d.ts +76 -0
- package/dist/useAiApprovalsTranslation.d.ts.map +1 -0
- package/dist/useAiModels.d.ts +3 -1
- package/dist/useAiModels.d.ts.map +1 -1
- package/dist/useHitlInChat.d.ts +2 -2
- package/dist/useHitlInChat.d.ts.map +1 -1
- package/dist/useObjectChat.d.ts +94 -27
- package/dist/useObjectChat.d.ts.map +1 -1
- package/dist/usePendingActions.d.ts +5 -0
- package/dist/usePendingActions.d.ts.map +1 -1
- package/package.json +11 -15
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,2819 @@
|
|
|
1
1
|
# @object-ui/plugin-chatbot
|
|
2
2
|
|
|
3
|
+
## 18.0.0
|
|
4
|
+
|
|
5
|
+
### Dependency floors
|
|
6
|
+
|
|
7
|
+
Computed from `.objectstack-sha` `06cab4849a8a`: the earliest published `@objectstack/spec` that contains it is `18.0.0`.
|
|
8
|
+
|
|
9
|
+
- `@objectstack/spec` (`dependencies`): `^18.0.0-next.1` → `^18.0.0`
|
|
10
|
+
|
|
11
|
+
### Major Changes
|
|
12
|
+
|
|
13
|
+
- 6f3299f: objectui moves to major 18, following `@objectstack/*` from 17 to 18 (objectui#12334). objectui's major is not a count of its own breaking changes: it tracks the major of the `@objectstack/spec` its packages depend on, so that the same major means compatible across the two projects. These packages already declare `@objectstack/*` on the 18 line (objectui#12030), so every package in the fixed release group crosses to 18 together. It is the one `major` that rule admits: objectui's own breaking changes ship as `minor`, described in their entries.
|
|
14
|
+
|
|
15
|
+
The 18 line is released from Changesets pre mode on the `next` tag (`.changeset/pre.json`), as `@objectstack/*` 18 is: these releases are `18.0.0-next.N` on the npm `next` dist-tag, and they do not move `latest`. The first `18.0.0` on `latest` comes when `@objectstack` 18 is generally available and this repository leaves pre mode.
|
|
16
|
+
|
|
17
|
+
What a consumer must do to take it is in the `@objectstack/*` 18 entry of this release (objectui#12030): move its own `@objectstack/*` packages to the 18 line at the same time.
|
|
18
|
+
|
|
19
|
+
### Minor Changes
|
|
20
|
+
|
|
21
|
+
- fc3c2cc: Five fixes on the AI build surface, from the 2026-10-05 cloud acceptance run (objectui#11658).
|
|
22
|
+
|
|
23
|
+
- **The first AI build lands on the running app.** The built-moment transition still moves the conversation into the Studio workbench at `/studio/PKG/interfaces`. The Interfaces canvas now opens in **Run** mode with the properties panel collapsed, where it used to open in Design with the panel open. One click on **Design** brings back the design overlays and the properties panel. Every other way into Studio, the "Design in Studio" button included, still opens in Design. The transition asks for this with router state, which the pillar reads once at mount; it is not a URL param, so a reload or a shared link opens the designer.
|
|
24
|
+
- **The in-app composer names the task.** Inside an app, the composer placeholder reads "Ask about your data, or ask me to change this app…". This covers the console dock in a running app, the Studio dock and `/ai/build?package=`. It used to read "Ask {agent}…", which showed as「向 构建 提问…」in Chinese. The cold-start build surface and the ask agent keep the placeholders they had. New key: `console.ai.askOrChangeApp`.
|
|
25
|
+
- **The AI usage popover shows one figure.** The popover shows the share of the single AI pool used so far (`console.ai.usage.poolUsed`, for example "19% used"). It no longer shows the build / data-Q&A split, because that split cannot honestly say which part a single-composer turn used. The keys `console.ai.usage.meterBuild`, `meterAsk` and `breakdownTitle` are retired from all ten packs. `useAiUsage` still reads `breakdown` from the wire and validates it strictly, but nothing renders it.
|
|
26
|
+
- **The usage gauge no longer looks like a loading spinner.** The header glyph is now a closed outline in the tone colour with a pie wedge inside it. It used to be a stroked arc over a faint track, which at low usage had the outline of a spinner.
|
|
27
|
+
- **The plan card's scope chip is localized.** The extend-mode chip on the proposed-plan card and on the live design panel reads the pack's `chatbot.plan.extendTarget` sentence, where it used to show the English literal "Adding to existing app". It names the target app by its label, and the internal name moves to the chip's tooltip. `ChatbotEnhanced` gains an optional `resolveAppLabel(appName)` prop, and the console passes one over its metadata apps. A host `planExtendLabel` still takes precedence, but the prop no longer defaults to an English string.
|
|
28
|
+
- 848ba0e: The chat launchers show a marker while a proposed plan awaits the user's approval (objectui#11666, item 6 of objectui#2458). A user who closed the chat with a blueprint still waiting on them used to get no sign of it from the launcher they return to.
|
|
29
|
+
|
|
30
|
+
What a user sees: while the newest proposed plan of a conversation still offers "Build it", the console's assistant button (the floating launcher on app pages and Home) and the ChatDock edge launcher Studio uses carry a small amber dot. Assistive tech reads it as the button's description, from the new `console.ai.dock.planAwaitingApproval` key in the active language. With no plan awaiting, neither launcher shows anything. The dot goes away when the plan stops awaiting: the user approves it, its build runs, or a newer proposal takes its place and is itself approved or built. Opening the chat clears nothing by itself, and neither does opening another conversation. Deleting the conversation from the `/ai` sidebar drops it.
|
|
31
|
+
|
|
32
|
+
Where the reading comes from: the chat's own plan card. `ChatbotEnhanced` derives "awaiting approval" from the same producer its card header and body read (`resolveProposalCardState` reads `pending`), and reports it to its host. The console's chat pane publishes that reading on the assistant bus, per conversation and per signed-in user, and the launchers read the bus. They import no chat code. The reading is exact for everything that happens in the tab. It does not see a decision made in another tab or on another device, and a page reload starts it empty until a chat on that conversation is opened again. The durable copy is the server conversation, which the launchers do not read.
|
|
33
|
+
|
|
34
|
+
**Clause-②: yes (widening).** Two published surfaces widen:
|
|
35
|
+
|
|
36
|
+
- `@object-ui/plugin-chatbot`: the exported `ChatbotEnhancedProps` type gains one optional member, `onPlanApprovalPendingChange`, a callback that takes one boolean and returns nothing. `ChatbotEnhanced` calls it once on mount and again whenever the boolean changes. Without it nothing changes.
|
|
37
|
+
- `@object-ui/i18n`: every built-in locale pack gains one key, `console.ai.dock.planAwaitingApproval`. The `en` pack is exported from the package entry, so the key also joins the translation-key type derived from it.
|
|
38
|
+
|
|
39
|
+
`@object-ui/app-shell` adds no export: the bus functions the pane and the launchers use (`publishPlanApprovalPending`, `usePlanApprovalPending`) ship inside `dist/` but are not on the package entry, and the exported `assistantBus` object and `AssistantSnapshot` type are unchanged. No prop, export or key is removed, and no existing member changes type.
|
|
40
|
+
- 6d5eb34: The chat build panel reads cloud's post-apply verification loop, and an unknown build phase no longer reads as "Building" (objectui#11988, the receiver objectstack-ai/cloud#2172's ruling A orders).
|
|
41
|
+
|
|
42
|
+
After `apply_blueprint` finishes, cloud's agent loop reports its verification hops on a second `data-build-progress` part with the id `build-verify`, beside the build tree. A hop is `{ phase: 'verify', hop, tool }` and the exit is `{ phase: 'done' }`. The receiver used to take the last `data-build-progress` part whatever its id, and turned every phase other than `data` and `done` into `structure`. So the first verification hop replaced the finished tree with "Building your app…".
|
|
43
|
+
|
|
44
|
+
- **The tree and the verification part are read apart, by part id.** The `build-verify` part never displaces the tree, whichever order the two parts arrive in. A message that carries only the tree maps and renders exactly as before.
|
|
45
|
+
- **The build panel shows a verification line under the tree.** It reads "Checking the change… step N" while a hop runs, with the hop's tool name as its tooltip, and "Checked the change" once the `done` frame arrives. A `build-verify` part on a message that has no build tree is not drawn as a tree.
|
|
46
|
+
- **Phases are read against the spec's vocabulary.** The receiver's phase table and frame type are typed by `@objectstack/spec/ai`'s own `BuildProgressPhase` and `BUILD_PROGRESS_FRAME_TYPE`, so a phase the spec adds or drops fails the type check here instead of drifting. The spec's runtime module is not imported, because it would put its whole AI schema module on the console's first load. A phase outside the vocabulary, or a frame without one, is now `unknown` and shows as a warning line ("Unknown build phase") on the tree header or on the verification line. It is no longer coerced to `structure`.
|
|
47
|
+
- **Type change.** `ChatBuildProgress.phase`, reached through `ChatMessage['buildProgress']`, widens from `'structure' | 'data' | 'done'` to `'structure' | 'data' | 'verify' | 'done' | 'unknown'`: the spec's phase vocabulary plus `'unknown'`, held equal to the spec's union by a compile-time test. `ChatBuildProgress` also gains an optional `verify` member, `{ phase, hop?, tool? }`. The published typings name no new `@objectstack/spec` symbol, so the package's spec range is unchanged.
|
|
48
|
+
- **New language-pack keys, in all ten packs:** `chatbot.build.verifying`, `chatbot.build.verifyStep`, `chatbot.build.verified` and `chatbot.build.unknownPhase`.
|
|
49
|
+
- c5406c2: Depend on the `@objectstack/*` 18 prerelease line (objectui#12030).
|
|
50
|
+
|
|
51
|
+
Every `@objectstack/*` range these packages declare in `dependencies` or `peerDependencies` moves from `^17.x` to `^18.0.0-next.0`, the `next` prerelease of `@objectstack/*` 18 (raised to `^18.0.0-next.1` by objectui#12370 before release).
|
|
52
|
+
|
|
53
|
+
**Breaking for consumers:** an install that resolves `@objectstack/spec` (or `@objectstack/client`, `@objectstack/formula`, `@objectstack/lint`) 17.x no longer satisfies these ranges. A consumer must move its own `@objectstack/*` packages to the 18 line, starting with `18.0.0-next.1` (objectui#12370), at the same time as it takes this release.
|
|
54
|
+
|
|
55
|
+
**objectui's own surface moves with it:**
|
|
56
|
+
|
|
57
|
+
- `element:record_picker`'s registration stops publishing the `object`, `filter`, `sort` and `limit` inputs, which spec 18 retires; a JSX page that writes one now gets `unknown-prop`.
|
|
58
|
+
- The `CapabilityMultiSelectField` widget's curated capability set (`@object-ui/fields`) follows spec 18: `manage_mailboxes` in, `manage_org_presentation` out.
|
|
59
|
+
- `element:number` and `element:repeater` nodes that bind no object are accepted, as spec 18's row and `PageComponentSchema` accept them; the two `ELEMENT_*_OBJECT_REQUIRED` refusals are gone.
|
|
60
|
+
|
|
61
|
+
**Retired with the spec:** `@objectstack/spec` 18 tombstones `object-grid`'s `defaultFilters` and refuses it by name, and `ObjectGrid` and `ObjectView` stop reading it (`table.defaultFilters` on an `object-view` included). A view that still carries it renders unfiltered: rename the key to `filter`, whose value is the same rule array.
|
|
62
|
+
- e723f58: Screen readers hear the names of more controls in the viewer's language (objectui#12145).
|
|
63
|
+
|
|
64
|
+
These controls carried an English `aria-label`, so under a non-English locale a screen reader announced their names in English: the docs portal's loading spinner, the record form page's breadcrumb, the `Spinner` status region, a data table's row menu button, the `pagination` renderer's previous and next links, the image crop preview, the percent slider, the record picker's grid, the AI composer's send and stop button and an attachment's remove button, the designer's undo and redo buttons, minimap, version history and back button, a dismissible record alert's close button, the bulk-action bar, and the mobile view switcher. Each name now comes from the language packs. English names are unchanged, with two small exceptions: the spinner now reads "Loading…", and the pagination links read "Previous page" and "Next page", the same words the data table pager uses. Sighted use is unchanged.
|
|
65
|
+
|
|
66
|
+
Added: eight language-pack keys in all ten packs: `help.loadingDocumentation`, `common.breadcrumb`, `table.rowActions`, `fields.image.cropPreview`, `fields.percent.slider`, `designer.canvasMinimap`, `designer.versionHistory` and `grid.bulkActions`. Every other name reuses a key that already holds the same words. The exported `en` pack, and so `TranslationKeys`, gains these eight members. `PromptInputAttachment` (exported through `AIElements`) takes an optional `removeLabel` prop that names its remove button; without it the button keeps its English name.
|
|
67
|
+
- ff9df88: Depend on `@objectstack/*` `18.0.0-next.1` (objectui#12370).
|
|
68
|
+
|
|
69
|
+
Every `@objectstack/*` range these packages declare moves from `^18.0.0-next.0` to `^18.0.0-next.1`; the console and the runner bundle `18.0.0-next.1`. A consumer moves its own `@objectstack/*` packages to `18.0.0-next.1` with this release.
|
|
70
|
+
|
|
71
|
+
**Accept sets that narrow with it.** `@object-ui/types` validates page action rows and view data bindings through the spec's own rows, so its faces (`safeValidateSchema` and `StrictAnyComponentSchema`) now refuse what `18.0.0-next.1` refuses. Each was accepted on `18.0.0-next.0`:
|
|
72
|
+
|
|
73
|
+
- `onSuccess` on an `action:button` / `action:icon` row, or an `action:group` / `action:menu` member, whose executor is the `url`, `navigation`, `modal`, `flow` or `form` built-in, or that has no executor at all. Write the hop on an `api` or `script` action (or a host handler name), or drop it.
|
|
74
|
+
- `onSuccess` beside `operation: 'update'`, and an `onSuccess` block carrying a key outside `{ navigate, openIn }`.
|
|
75
|
+
- `actionType: 'navigation'` on a row (and `type: 'navigation'` on a container member): write `'url'`.
|
|
76
|
+
- A `url` executor's `target` that is not openable, judged on the executor the runner runs, including a row whose `name` selects it.
|
|
77
|
+
- A view `data` binding with `provider: 'api'`: bind the object or static rows; an API call is the page element's binding.
|
|
78
|
+
- ac59073: **The AI build conversation stays on the conversation and reads more compactly** (objectui#12724).
|
|
79
|
+
|
|
80
|
+
- **No automatic navigation after a build.** When a build finishes, the page no longer moves you into Studio. The finished build card offers two buttons: 打开应用 / Open app (primary), which opens the app on its first navigation item, and 在 Studio 中查看 / View in Studio. Both are in-app navigations. The conversation is still bound to the built app, so Studio's copilot resumes the same thread.
|
|
81
|
+
- **One collapsed line per phase.** A turn's tool activity reads as one line, for example "设计方案 · 4 步 · 0:48 · 读取编写规范 · 列出对象 ×3 …". Repeated calls of a tool fold into one step with a count, and a chevron expands the per-tool rows. The rows open on their own while a step is running. The elapsed time shows only for a turn this page watched; a reopened conversation shows no time.
|
|
82
|
+
- **The finished build card.** Its header reads 「已搭建并上线 · APP」 / "Built and live · APP" once the build is published, and "Built APP" otherwise. Below the buttons, a line lists the build's next steps as things you can say, followed by the sentence 「之后的修改先存草稿,由你在 Studio 发布」. The progress bar is gone once the build is done. A whole-app build no longer repeats its next steps as a list on the draft card.
|
|
83
|
+
- **The plan card.** The header names the app the plan builds and shows 等待确认 / Awaiting confirmation until you decide. Each object gets a row with one chip per field from the plan's `blueprint.objects[].fields`. The plan's views get their own rows, and the reply hint sits beside 开始搭建 / 调整方案. A plan without field rows (for example one restored from the local cache) shows the object chips with field counts, as before.
|
|
84
|
+
- **The composer.** Outside an app, the build agent's placeholder reads 「描述你想搭建的应用,或要改的地方…」 / "Describe the app you want to build, or what to change…" and no longer names the agent. Inside an app it still reads "Ask about your data, or ask me to change this app…". The key hint reads 「↵ 发送 · Shift+↵ 换行」.
|
|
85
|
+
|
|
86
|
+
`@object-ui/plugin-chatbot`: `ProposedPlan` gains optional `appLabel`, `views` and `objects[].fields`, and `ChatbotLabels` gains an optional `newlineHint`. `@object-ui/i18n`: new `console.ai.describeAppToBuild`, `console.ai.newlineHint`, `console.ai.viewBuiltAppInStudio`, `chatbot.phase.*`, `chatbot.plan.awaitingConfirm` / `objectsAndFields` / `views` and `chatbot.build.builtAndLive` / `nextStepsLead` / `nextStepQuote` / `draftPosture` in every pack. `console.ai.designBuiltApp` is retired.
|
|
87
|
+
- 44cb469: **The AI build cards draw the plan and result details the build agent now sends** (objectui#12724).
|
|
88
|
+
|
|
89
|
+
- **The plan card.** Each object's fields are chips. A field whose sample data is held to a format shows it in mono type (「ISBN 13 位数字」, 「邮箱 邮箱格式」). A field the agent added on its own (you did not name it) has a dashed chip marked 「补充」 / "suggested". An object that declares its name field gets a 「名称:书名」 / "Name: Title" line. Each view shows one line saying what it does, for example 「列表 · 筛选 状态 = 逾期 且 归还日期 为空 · 按应还日期升序」. The assumptions are a bulleted list, and the count line ends with the sample data the build will stage (「示例数据 12 条/对象」).
|
|
90
|
+
- **The result card.** A finished build shows a 「核对通过 7/7」 / "Checks passed 7/7" chip and the lines the agent verified on the built app, objects in one column and views and sample data in the other. Those lines replace the list of staged artifacts. When the agent re-checks the build later in the same turn, the card shows that newer check. 打开应用 opens the app the build landed in, and 在 Studio 中查看 opens its package.
|
|
91
|
+
- **Step names.** The steps in the progress line read as short sentences in your language, for example 「记下后续检查项」 for the agent's to-do step and "List the existing objects" in English. Before, the English names were the tool names with their underscores removed.
|
|
92
|
+
|
|
93
|
+
Each of these reads a field of the build agent's plan or result. When an older agent does not send that field, the card looks as it did before.
|
|
94
|
+
|
|
95
|
+
`@object-ui/plugin-chatbot`: `ProposedPlan` gains optional `planCard` and `viewIntents`. `@object-ui/i18n`: new `chatbot.plan.suggestedField`, `chatbot.plan.nameField` and `chatbot.build.checksPassed` in every pack, and every pack's `chatbot.tool.*` values are reworded.
|
|
96
|
+
- 3da39ae: **The copilot's change card says when a change will be saved as a draft, and the applied card offers review and undo** (objectui#12894).
|
|
97
|
+
|
|
98
|
+
- **The change card.** When the copilot proposes a change, the card is headed 「修改方案 · 2 项」 / "Change plan · 2 changes" and lists one row per change: a + / ✎ / - symbol, the kind (字段 / 视图 …), the object and field it touches, and its type and parameters in small type (「number · 续借次数 · 默认 0 · 不必填」). For an app that is already live and holds records, the change is saved as a Studio draft: the card says so in an amber note, and its main button reads 「存为草稿」 / "Save as draft".
|
|
99
|
+
- **The applied card.** After you confirm, the card shows what happened, for example 「已存为草稿 · 2 项未发布」 with 「已有 12 条记录的续借次数为空」 and 「核对:结构 ✓」. It offers 「查看变更并发布」 / "Review changes and publish" and 「撤销」 / "Undo" when the host provides them. Undo discards every unpublished draft of the app package, so when other drafts are pending the button says how many, and the card asks before it runs.
|
|
100
|
+
|
|
101
|
+
Each of these reads a field the copilot's tools now send. When an older version does not send it, the card looks as it did before.
|
|
102
|
+
|
|
103
|
+
`@object-ui/plugin-chatbot`: `ProposedChanges` gains optional `posture` and `primaryAction`; `ReplayOutcome` gains optional `draftState`, `existingRows` and `appliedCard`; `ChatbotEnhancedToolInvocation` now references both types instead of repeating them; `ChatbotEnhancedProps` gains optional `onReviewDrafts` and `onDiscardDrafts`. `@object-ui/i18n`: new `chatbot.changes.*` keys in every pack.
|
|
104
|
+
- 76f91f8: feat(plugin-chatbot): a drafted result's Preview button appears for any draft kind, and the draft preview bar names what is pending on the surface it shows (objectui#12968)
|
|
105
|
+
|
|
106
|
+
Clause-②: yes — `ChatbotEnhancedProps` gains the optional `onPreviewDraft`.
|
|
107
|
+
|
|
108
|
+
**`@object-ui/plugin-chatbot`.** A drafted tool result whose items include no app now draws a
|
|
109
|
+
Preview button beside Publish and Review when the host passes `onPreviewDraft(items, { appSegment })`.
|
|
110
|
+
The click hands the host the drafted `{ type, name }` items and the owning package id, the app's route
|
|
111
|
+
segment. A draft set that includes an app keeps `onPreviewDraftApp`, unchanged, and a host that passes
|
|
112
|
+
no `onPreviewDraft` draws what it drew before. Preview publishes nothing. The confirm path previews
|
|
113
|
+
too: `detectReplayOutcome` lifts a drafted replay's `drafted[]` items into the exported `ReplayOutcome`
|
|
114
|
+
as the optional `items`, and the applied card (or, from an older cloud, the drafted badge) draws the
|
|
115
|
+
same Preview over them through the same `onPreviewDraft` / `onPreviewDraftApp` rule.
|
|
116
|
+
|
|
117
|
+
**`@object-ui/app-shell`.** In draft preview (`?preview=draft`), the DraftPreviewBar's message names
|
|
118
|
+
how many pending drafts belong to the surface it shows: an object's list, view or record, a page, a
|
|
119
|
+
dashboard or a report. The count is read from the same pending-drafts list as before. The preview's
|
|
120
|
+
deep-link table (`preview/draftSurface.ts`, `draftPreviewPath`) maps drafted items to the route that
|
|
121
|
+
shows them: a page to that page, a view to the object's list on that view, a field or object to the
|
|
122
|
+
object's default list, anything else to the app. The console wires it: `ChatPane` passes
|
|
123
|
+
`onPreviewDraft`, and a field, view or page draft's Preview opens the Live Canvas at that path, in
|
|
124
|
+
draft preview; `LiveCanvas` takes the full preview path beside the app segment (`path`). An app
|
|
125
|
+
draft's Preview opens the app as before.
|
|
126
|
+
|
|
127
|
+
**`@object-ui/i18n`.** `preview.draftBar.pendingHere`, a plural family, in all ten packs.
|
|
128
|
+
- 51269f0: The AI build chat's pending-drafts bar no longer covers the composer's input (objectui#12978).
|
|
129
|
+
|
|
130
|
+
On the full-page chat (`/ai/build`), with a pending draft, the bar that offers 发布 floated over the composer (`absolute bottom-20`): it sat on the input's first line, so the placeholder and the first line typed were hidden. It is now a row of the composer's own area, laid out in flow directly above the input, so the conversation gives up the room instead, at every width. The console dock mounts the same chat pane and gets the same row. The package's own Studio still draws no bar (objectui#12965).
|
|
131
|
+
|
|
132
|
+
**`ChatbotEnhanced` gains `promptHeaderSlot`** (optional `ReactNode`): a host's row rendered in flow at the top of the prompt area, above the input and outside its form. Unlike `promptOverlaySlot`, which stays absolute-positioned for palettes, it takes layout space. Content that renders nothing takes no space. Hosts that do not pass it render exactly as before.
|
|
133
|
+
|
|
134
|
+
**Clause-②: yes (widening)**: one optional prop, `promptHeaderSlot`, added to `ChatbotEnhancedProps` in `@object-ui/plugin-chatbot`. No export is added or removed, and no existing prop changes.
|
|
135
|
+
- b4e0787: The runtime chat contracts have their own names, apart from `@object-ui/types`' authoring `ChatMessage` / `ChatToolInvocation` (objectui#6349, batch 5). The shape `<ChatbotEnhanced>` renders is declared as `ChatbotEnhancedMessage`, and its tool invocations as `ChatbotEnhancedToolInvocation` — the names this package already published them under. `ChatbotEnhancedMessage` is no longer deprecated.
|
|
136
|
+
|
|
137
|
+
**Type changes, breaking for some consumers.**
|
|
138
|
+
|
|
139
|
+
- `ChatMessage` is no longer exported from `@object-ui/plugin-chatbot`. It denoted the same type as `ChatbotEnhancedMessage`, while `@object-ui/types` publishes a different `ChatMessage` (the JSON/SDUI authoring contract), so one name stood for two contracts across the two packages. Replace `import { type ChatMessage } from '@object-ui/plugin-chatbot'` with `ChatbotEnhancedMessage`; the shape is unchanged. The compiler names the replacement (TS2460: declared locally, exported as `ChatbotEnhancedMessage`). For authored messages, import `ChatMessage` from `@object-ui/types` and convert them with `toRuntimeMessages`.
|
|
140
|
+
- `ChatbotEnhancedToolInvocation` keeps its name and shape; only its declaration was renamed from `ChatToolInvocation`, a name this package's entry never exported.
|
|
141
|
+
|
|
142
|
+
The README and the plugin-chatbot docs page now teach `ChatbotEnhancedMessage`. No runtime behaviour changes.
|
|
143
|
+
|
|
144
|
+
### Patch Changes
|
|
145
|
+
|
|
146
|
+
- d39ac2e: The AI Approvals inbox shows the error, not an empty queue, when its read fails, and its poll stops on an answer that will not change (objectui#11736).
|
|
147
|
+
|
|
148
|
+
On a deployment with no AI service, the open edition answers `501` on `/api/v1/ai/pending-actions`. `AiPendingActionsInbox` rendered the error alert and, beneath it, "No actions waiting". That reads as a live approval queue that happens to be empty, on a deployment that has none. `usePendingActions` also re-armed its five-second interval whatever the read answered, so the page asked the dead endpoint every five seconds for as long as it stayed open.
|
|
149
|
+
|
|
150
|
+
- The inbox shows the empty state only when the read answered. When the read failed, the error alert stands alone.
|
|
151
|
+
- `usePendingActions` now arms each poll after the previous read settles, according to its answer:
|
|
152
|
+
- A refused read stops the poll. That is `501`, or any `4xx` except `408` and `429`, such as `401`, `403` or `404`. A manual `refresh()` that succeeds, the re-fetch after `approve` or `reject`, or a change to the hook's options starts it again.
|
|
153
|
+
- A transient failure backs the poll off. That is no answer at all, `408`, `429`, or a `5xx` other than `501`. The delay doubles with each consecutive failure, up to 120 seconds, or up to `pollInterval` if that is longer.
|
|
154
|
+
- A read that succeeds polls again after `pollInterval`, as before, and resets the backoff.
|
|
155
|
+
|
|
156
|
+
The policy is in the hook, so every caller of `usePendingActions` gets it, not only the inbox. With a working endpoint nothing changes: an empty queue still shows "No actions waiting", and the poll keeps its interval.
|
|
157
|
+
|
|
158
|
+
**Clause-②: no.** No export, prop, option, return member or language-pack key is added or removed, and no accepted input widens.
|
|
159
|
+
- 8f8f760: Three more controls pick with the shared `Select`, the control the rest of the console picks with (objectui#11865, the list view and the chatbot): `ListView`'s "Color by field" and its "Rows per page" selector (the fallback for views without a grid pager), and `ChatbotEnhanced`'s model picker.
|
|
160
|
+
|
|
161
|
+
The three were browser-native selects, so they looked and behaved differently from the console's other dropdowns. They now use the shared Radix `Select`: the same trigger, dropdown and keyboard behaviour. "Color by field" now matches its twin in the compact toolbar's View settings popover, which made the same change earlier.
|
|
162
|
+
|
|
163
|
+
What they write is unchanged. Each option gives the same value as before: "None" still clears the row-colour config, a field keeps the config's colours, each page size still reaches `onPageSizeChange` and refetches at that size, and each model still reaches `onModelChange` as its id. Re-picking the current option writes nothing. The model picker keeps its accessible name, the `model` label. A row-colour rule on a field the caller may not read still shows as "None" and is never offered.
|
|
164
|
+
|
|
165
|
+
One display change: a value none of a picker's options carries now shows as itself. The native select showed its first option instead: "None" for a row-colour field outside the list's columns, the first size for a page size in force that is not one of the options (an undeclared size, for instance), and the first model for a selected model the environment no longer offers.
|
|
166
|
+
|
|
167
|
+
**Clause-②: no.** No published face moves: the package entries export the same names, the two components take the same props, and no i18n key is added. What moves is the three controls' own markup, described above.
|
|
168
|
+
- d17952c: Studio no longer logs a red "Failed to load resource" line for things it already knows are absent (objectui#12508).
|
|
169
|
+
|
|
170
|
+
- **A draft-only object is not asked for its published layers.** The Data pillar used to read `GET /meta/object/NAME/layers` for every selected object, so the console showed a 404 right after "New object" saved a draft. For an object that has a pending draft and is not in the package's published list, the pillar now reads the draft and skips the layers. A published object is read as before.
|
|
171
|
+
- **A list view of a draft-only object is not asked for its published layers.** Opening such an object in the Interfaces pillar used to read `GET /meta/view/NAME.default/layers` and get a 404. Nothing of a draft-only object is published, so its views have no layer either, and the list-view panel no longer asks. A failed layer read (a 5xx or a network error) still shows as the panel's load failure.
|
|
172
|
+
- **No `/ai/models` request on a server without an AI service.** The chat pane now asks for the AI-model list only once the agent catalog names an agent. A server without `@objectstack/service-ai` answers that catalog empty, so the console no longer asks it and gets a 501. `useAiModels` also remembers a 501 for the session: it no longer retries it five times, and a later mount does not ask again. Other failures, such as a 503 while the server is still starting, are still retried.
|
|
173
|
+
- c83e3fe: `ChatbotEnhanced`'s `onDesignBuiltApp` doc comment now describes what the finished build card draws since objectui#12724: "Open app" (打开应用) is the primary action and "Design in Studio" (在 Studio 中查看) the secondary one, primary only when the host passes no `onOpenBuiltApp` (objectui#12842). It no longer cites an ADR section that does not exist. Comment only; no behaviour changes.
|
|
174
|
+
|
|
175
|
+
Clause-②: no
|
|
176
|
+
No prop, export or language-pack key moves.
|
|
177
|
+
- 6db875e: Opening the console no longer starts nine reads the page does not show in the same moment as the page's own reads (objectui#12980, part 3).
|
|
178
|
+
|
|
179
|
+
- **The bell.** The inbox and the pending-approvals count are read once the boot splash is gone and a frame has painted. Until they land the badge draws nothing, as it does while any read is in flight, and never a `0`. The Activity tab's feed, which the badge does not use, is read when the bell is about to open: a pointer over it, focus, or a click. Until then it does not ask whether `sys_activity` exists either, which inside an app is its own `meta/object/sys_activity` read.
|
|
180
|
+
- **The header's dashboard, page and report lists.** The header reads each only on the route type that names one, for the phone bar's title. Any other route reads none of them.
|
|
181
|
+
- **The navigation sync.** It reads the page and dashboard lists after the first paint. It still waits for both to load before it compares them.
|
|
182
|
+
- **The agent catalog.** `useAgents` sends `GET /api/v1/ai/agents` after the first frame has painted, not while the page mounts. The AI entry points stay hidden until the catalog answers, as before.
|
|
183
|
+
- **The user's language row.** The `sys_user` read that applies the signed-in user's language runs after the first paint. It stays a separate read because `GET /auth/me/localization` does not say whether its `locale` came from the user's column or from a fallback.
|
|
184
|
+
- **The console's locale list and the timezone prompt's settings read.** Both wait for the first paint. The locale list asks for the session at the moment it sends, so a sign-out while it waits sends nothing.
|
|
185
|
+
|
|
186
|
+
Nothing is added to a package entry: no export, prop or type member.
|
|
187
|
+
- 5f599db: The AI build plan card draws a stage field's lifecycle on its chip (for example 「借出 · 已还 ✓完成 · 逾期 ⚠」), read from the plan card's `lifecycle` key. A chip without the key draws as before (objectui#12994).
|
|
188
|
+
- 4b7ce47: The AI build plan card now draws a composed record title's line (for example 「名称:自动生成「{图书} · {读者} · {借出日期}」,表单里不出现」) in place of the plain 「名称:LABEL」 line, read from the plan card's `nameField.generated` key that objectstack-ai/cloud writes since cloud PR #3047. An object without the key draws as before.
|
|
189
|
+
- 6f877f1: An assistant answer reads well in the narrow assistant panel (objectui#13032). Headings inside a chat answer render at chat size (15–16px, bold, set apart by weight and spacing instead of the article-page 20–30px scale). Tables use 13px text and keep their first column frozen while the other columns scroll, and when the columns overflow the panel the table's expand control becomes a labelled, clearly visible "Expand" button. A finished answer taller than two heights of the conversation viewport is folded, with "Show full answer" and "Collapse" controls; an answer is never folded while it is still streaming. The scroll-to-bottom button now sits in its own row below the message list instead of floating over it, so it never covers text, a table or a heading. The four new strings ship in all ten locale packs.
|
|
190
|
+
- 633b8f1: A record link in an assistant answer opens that record inside the console (objectui#13037).
|
|
191
|
+
|
|
192
|
+
An answer names a record with one fixed link form, `/record/OBJECT/ID`, for example `[Wayne Enterprises](/record/account/acc_42)`. The href must match `^\/record\/([a-z_][a-z0-9_]*)\/([A-Za-z0-9_-]{1,128})$` exactly: the object name in the spec's object-name grammar and a record id of letters, digits, `_` or `-`. A click hands the object and the id to the chat's `onOpenRecord`, the opener the `open_record` card already uses, so the console resolves the app and its own mount and navigates in the same tab, with no link dialog.
|
|
193
|
+
|
|
194
|
+
Nothing else about links changes. An external link, any other same-origin path, and a record form carrying a query string, a fragment or more path keep streamdown's link-safety dialog and new tab, and so does the record form in a chat whose host gives no `onOpenRecord`. Nothing is added to the package entry.
|
|
195
|
+
- 912bfd4: The chat's step line no longer shows the agent's tool-loading step, and no longer counts it (objectui#13038).
|
|
196
|
+
|
|
197
|
+
On the build agent, a data question calls `load_tools` first to attach the data tools. That call read as "Load tools" (zh 「加载更多工具」) among the turn's steps, and it was counted in the step total. It is the agent's own plumbing, not a step the user asked for. The phase line and its expanded rows now leave it out, and the count drops by one. A phase that so far called only `load_tools` draws no line, instead of "0 steps". Every other step reads as before.
|
|
198
|
+
|
|
199
|
+
Nothing declares a tool as plumbing today, so the renderer keeps a private list holding `load_tools` only. Nothing is added to the package entry: no export, prop, type member or language-pack key.
|
|
200
|
+
- 1f1c4b5: Doc comments now name the runtime message type `ChatbotEnhancedMessage`, its name since objectui#6349 batch 5, instead of `ChatbotEnhanced.ChatMessage` (objectui#6349, batch 6).
|
|
201
|
+
|
|
202
|
+
No type or runtime behaviour changes.
|
|
203
|
+
- Updated dependencies [18d7b48]
|
|
204
|
+
- Updated dependencies [172acc3]
|
|
205
|
+
- Updated dependencies [f0496bd]
|
|
206
|
+
- Updated dependencies [c4c506b]
|
|
207
|
+
- Updated dependencies [9db9ff3]
|
|
208
|
+
- Updated dependencies [c096f03]
|
|
209
|
+
- Updated dependencies [d92b2a1]
|
|
210
|
+
- Updated dependencies [92f4e2b]
|
|
211
|
+
- Updated dependencies [b10c68e]
|
|
212
|
+
- Updated dependencies [bdc9049]
|
|
213
|
+
- Updated dependencies [e8c0b96]
|
|
214
|
+
- Updated dependencies [b92329c]
|
|
215
|
+
- Updated dependencies [2e818d0]
|
|
216
|
+
- Updated dependencies [fd060f0]
|
|
217
|
+
- Updated dependencies [fd060f0]
|
|
218
|
+
- Updated dependencies [8b14aec]
|
|
219
|
+
- Updated dependencies [2abec3a]
|
|
220
|
+
- Updated dependencies [9dfaca6]
|
|
221
|
+
- Updated dependencies [c000398]
|
|
222
|
+
- Updated dependencies [73b5d77]
|
|
223
|
+
- Updated dependencies [7b17705]
|
|
224
|
+
- Updated dependencies [fc3c2cc]
|
|
225
|
+
- Updated dependencies [f9f4a62]
|
|
226
|
+
- Updated dependencies [848ba0e]
|
|
227
|
+
- Updated dependencies [57d82cb]
|
|
228
|
+
- Updated dependencies [de96f3d]
|
|
229
|
+
- Updated dependencies [9ca3cac]
|
|
230
|
+
- Updated dependencies [c910630]
|
|
231
|
+
- Updated dependencies [ce464d9]
|
|
232
|
+
- Updated dependencies [e6dcd85]
|
|
233
|
+
- Updated dependencies [96fcf30]
|
|
234
|
+
- Updated dependencies [7a2c60b]
|
|
235
|
+
- Updated dependencies [834c559]
|
|
236
|
+
- Updated dependencies [22b503c]
|
|
237
|
+
- Updated dependencies [9fc68aa]
|
|
238
|
+
- Updated dependencies [d50f724]
|
|
239
|
+
- Updated dependencies [17acfbb]
|
|
240
|
+
- Updated dependencies [6be0f7a]
|
|
241
|
+
- Updated dependencies [89cc738]
|
|
242
|
+
- Updated dependencies [c0862c1]
|
|
243
|
+
- Updated dependencies [c0862c1]
|
|
244
|
+
- Updated dependencies [c0862c1]
|
|
245
|
+
- Updated dependencies [c0862c1]
|
|
246
|
+
- Updated dependencies [c0862c1]
|
|
247
|
+
- Updated dependencies [c0862c1]
|
|
248
|
+
- Updated dependencies [ded4494]
|
|
249
|
+
- Updated dependencies [d172f63]
|
|
250
|
+
- Updated dependencies [4c0de52]
|
|
251
|
+
- Updated dependencies [a80fef7]
|
|
252
|
+
- Updated dependencies [3bf8894]
|
|
253
|
+
- Updated dependencies [e06365c]
|
|
254
|
+
- Updated dependencies [1e1f09e]
|
|
255
|
+
- Updated dependencies [455c646]
|
|
256
|
+
- Updated dependencies [f34e877]
|
|
257
|
+
- Updated dependencies [f34e877]
|
|
258
|
+
- Updated dependencies [9844bbf]
|
|
259
|
+
- Updated dependencies [cef0eee]
|
|
260
|
+
- Updated dependencies [7ebff39]
|
|
261
|
+
- Updated dependencies [054fd84]
|
|
262
|
+
- Updated dependencies [5275d1f]
|
|
263
|
+
- Updated dependencies [7241a81]
|
|
264
|
+
- Updated dependencies [74add0c]
|
|
265
|
+
- Updated dependencies [aaba865]
|
|
266
|
+
- Updated dependencies [f1781be]
|
|
267
|
+
- Updated dependencies [fbad078]
|
|
268
|
+
- Updated dependencies [45d5853]
|
|
269
|
+
- Updated dependencies [4f4fc03]
|
|
270
|
+
- Updated dependencies [2312bd9]
|
|
271
|
+
- Updated dependencies [6d5eb34]
|
|
272
|
+
- Updated dependencies [c5406c2]
|
|
273
|
+
- Updated dependencies [c5406c2]
|
|
274
|
+
- Updated dependencies [d99b731]
|
|
275
|
+
- Updated dependencies [2571a3e]
|
|
276
|
+
- Updated dependencies [2a48bd4]
|
|
277
|
+
- Updated dependencies [8a55f0c]
|
|
278
|
+
- Updated dependencies [c7b30bd]
|
|
279
|
+
- Updated dependencies [20c6d35]
|
|
280
|
+
- Updated dependencies [417e245]
|
|
281
|
+
- Updated dependencies [69bca0a]
|
|
282
|
+
- Updated dependencies [023f00d]
|
|
283
|
+
- Updated dependencies [158c75d]
|
|
284
|
+
- Updated dependencies [7525045]
|
|
285
|
+
- Updated dependencies [5af42db]
|
|
286
|
+
- Updated dependencies [ce991bd]
|
|
287
|
+
- Updated dependencies [3c0f806]
|
|
288
|
+
- Updated dependencies [1071393]
|
|
289
|
+
- Updated dependencies [5f75cfa]
|
|
290
|
+
- Updated dependencies [6757a93]
|
|
291
|
+
- Updated dependencies [b7cd5c8]
|
|
292
|
+
- Updated dependencies [5330038]
|
|
293
|
+
- Updated dependencies [c9fc10b]
|
|
294
|
+
- Updated dependencies [dc6d28e]
|
|
295
|
+
- Updated dependencies [c0c2f79]
|
|
296
|
+
- Updated dependencies [0665c3b]
|
|
297
|
+
- Updated dependencies [d2500d8]
|
|
298
|
+
- Updated dependencies [e723f58]
|
|
299
|
+
- Updated dependencies [82bb1d5]
|
|
300
|
+
- Updated dependencies [f3d5408]
|
|
301
|
+
- Updated dependencies [b231607]
|
|
302
|
+
- Updated dependencies [b231607]
|
|
303
|
+
- Updated dependencies [466a219]
|
|
304
|
+
- Updated dependencies [6fb281d]
|
|
305
|
+
- Updated dependencies [54159d3]
|
|
306
|
+
- Updated dependencies [fa778e6]
|
|
307
|
+
- Updated dependencies [334f0cf]
|
|
308
|
+
- Updated dependencies [c08c933]
|
|
309
|
+
- Updated dependencies [92f979d]
|
|
310
|
+
- Updated dependencies [c4dd707]
|
|
311
|
+
- Updated dependencies [c4dd707]
|
|
312
|
+
- Updated dependencies [7578323]
|
|
313
|
+
- Updated dependencies [38bb373]
|
|
314
|
+
- Updated dependencies [923504f]
|
|
315
|
+
- Updated dependencies [5c2982a]
|
|
316
|
+
- Updated dependencies [97e7d4e]
|
|
317
|
+
- Updated dependencies [10aba37]
|
|
318
|
+
- Updated dependencies [5d3f437]
|
|
319
|
+
- Updated dependencies [51c661e]
|
|
320
|
+
- Updated dependencies [7af0ab3]
|
|
321
|
+
- Updated dependencies [b434f5f]
|
|
322
|
+
- Updated dependencies [9f282ef]
|
|
323
|
+
- Updated dependencies [fd4872f]
|
|
324
|
+
- Updated dependencies [f0532d8]
|
|
325
|
+
- Updated dependencies [cea429b]
|
|
326
|
+
- Updated dependencies [3092aca]
|
|
327
|
+
- Updated dependencies [82e5f53]
|
|
328
|
+
- Updated dependencies [d81e460]
|
|
329
|
+
- Updated dependencies [8106db1]
|
|
330
|
+
- Updated dependencies [068a540]
|
|
331
|
+
- Updated dependencies [ca45c6d]
|
|
332
|
+
- Updated dependencies [093d55b]
|
|
333
|
+
- Updated dependencies [b64fda3]
|
|
334
|
+
- Updated dependencies [a8051d6]
|
|
335
|
+
- Updated dependencies [72594f2]
|
|
336
|
+
- Updated dependencies [524136e]
|
|
337
|
+
- Updated dependencies [2b06a91]
|
|
338
|
+
- Updated dependencies [6f3299f]
|
|
339
|
+
- Updated dependencies [065a1cf]
|
|
340
|
+
- Updated dependencies [f2b17c6]
|
|
341
|
+
- Updated dependencies [52d6194]
|
|
342
|
+
- Updated dependencies [23bf859]
|
|
343
|
+
- Updated dependencies [1c72d77]
|
|
344
|
+
- Updated dependencies [2b4d3f1]
|
|
345
|
+
- Updated dependencies [d75f212]
|
|
346
|
+
- Updated dependencies [37db09f]
|
|
347
|
+
- Updated dependencies [ff9df88]
|
|
348
|
+
- Updated dependencies [70e843f]
|
|
349
|
+
- Updated dependencies [caac3b2]
|
|
350
|
+
- Updated dependencies [a2225f9]
|
|
351
|
+
- Updated dependencies [5c4deb5]
|
|
352
|
+
- Updated dependencies [a8e5b73]
|
|
353
|
+
- Updated dependencies [d9d9d98]
|
|
354
|
+
- Updated dependencies [c950345]
|
|
355
|
+
- Updated dependencies [21f9577]
|
|
356
|
+
- Updated dependencies [044f231]
|
|
357
|
+
- Updated dependencies [f8267df]
|
|
358
|
+
- Updated dependencies [9b82ced]
|
|
359
|
+
- Updated dependencies [3821a3a]
|
|
360
|
+
- Updated dependencies [3eb3ec1]
|
|
361
|
+
- Updated dependencies [92c2a69]
|
|
362
|
+
- Updated dependencies [646caea]
|
|
363
|
+
- Updated dependencies [1ffd6a2]
|
|
364
|
+
- Updated dependencies [5f8ecf6]
|
|
365
|
+
- Updated dependencies [8ed7e5a]
|
|
366
|
+
- Updated dependencies [6c4d00d]
|
|
367
|
+
- Updated dependencies [db8ce2f]
|
|
368
|
+
- Updated dependencies [726d8c9]
|
|
369
|
+
- Updated dependencies [f0e760a]
|
|
370
|
+
- Updated dependencies [a5bb7ac]
|
|
371
|
+
- Updated dependencies [f78efdd]
|
|
372
|
+
- Updated dependencies [8a8bcf3]
|
|
373
|
+
- Updated dependencies [f74638c]
|
|
374
|
+
- Updated dependencies [ef71a09]
|
|
375
|
+
- Updated dependencies [8614705]
|
|
376
|
+
- Updated dependencies [619e3f7]
|
|
377
|
+
- Updated dependencies [ca7a4c3]
|
|
378
|
+
- Updated dependencies [c9e6742]
|
|
379
|
+
- Updated dependencies [f62b6ff]
|
|
380
|
+
- Updated dependencies [608033b]
|
|
381
|
+
- Updated dependencies [611566b]
|
|
382
|
+
- Updated dependencies [efa9cb4]
|
|
383
|
+
- Updated dependencies [d66d7e8]
|
|
384
|
+
- Updated dependencies [15d8ca6]
|
|
385
|
+
- Updated dependencies [378896d]
|
|
386
|
+
- Updated dependencies [9d857c9]
|
|
387
|
+
- Updated dependencies [670ea10]
|
|
388
|
+
- Updated dependencies [ff215d9]
|
|
389
|
+
- Updated dependencies [71243db]
|
|
390
|
+
- Updated dependencies [a8add5c]
|
|
391
|
+
- Updated dependencies [33ee9de]
|
|
392
|
+
- Updated dependencies [4839f5c]
|
|
393
|
+
- Updated dependencies [a23e804]
|
|
394
|
+
- Updated dependencies [c7462e7]
|
|
395
|
+
- Updated dependencies [36e2f7b]
|
|
396
|
+
- Updated dependencies [ac59073]
|
|
397
|
+
- Updated dependencies [44cb469]
|
|
398
|
+
- Updated dependencies [e058d76]
|
|
399
|
+
- Updated dependencies [c999d4c]
|
|
400
|
+
- Updated dependencies [8df2608]
|
|
401
|
+
- Updated dependencies [5483297]
|
|
402
|
+
- Updated dependencies [ed43c79]
|
|
403
|
+
- Updated dependencies [260ef71]
|
|
404
|
+
- Updated dependencies [655e897]
|
|
405
|
+
- Updated dependencies [655e897]
|
|
406
|
+
- Updated dependencies [8d80845]
|
|
407
|
+
- Updated dependencies [69a408f]
|
|
408
|
+
- Updated dependencies [d2b21a1]
|
|
409
|
+
- Updated dependencies [5ff64ef]
|
|
410
|
+
- Updated dependencies [64acb7e]
|
|
411
|
+
- Updated dependencies [4ff5b6b]
|
|
412
|
+
- Updated dependencies [473e5a0]
|
|
413
|
+
- Updated dependencies [b279016]
|
|
414
|
+
- Updated dependencies [bb6c38c]
|
|
415
|
+
- Updated dependencies [26323c4]
|
|
416
|
+
- Updated dependencies [9753811]
|
|
417
|
+
- Updated dependencies [2727527]
|
|
418
|
+
- Updated dependencies [3da39ae]
|
|
419
|
+
- Updated dependencies [bc281f4]
|
|
420
|
+
- Updated dependencies [d637be3]
|
|
421
|
+
- Updated dependencies [2cfdc99]
|
|
422
|
+
- Updated dependencies [2cfdc99]
|
|
423
|
+
- Updated dependencies [1e6d83b]
|
|
424
|
+
- Updated dependencies [1e6d83b]
|
|
425
|
+
- Updated dependencies [6058bf8]
|
|
426
|
+
- Updated dependencies [c219165]
|
|
427
|
+
- Updated dependencies [a7ae252]
|
|
428
|
+
- Updated dependencies [fb501bc]
|
|
429
|
+
- Updated dependencies [30083da]
|
|
430
|
+
- Updated dependencies [7f9cc37]
|
|
431
|
+
- Updated dependencies [025130c]
|
|
432
|
+
- Updated dependencies [76f91f8]
|
|
433
|
+
- Updated dependencies [ea34d9b]
|
|
434
|
+
- Updated dependencies [8aa8e3e]
|
|
435
|
+
- Updated dependencies [024b7b6]
|
|
436
|
+
- Updated dependencies [cb80001]
|
|
437
|
+
- Updated dependencies [909c64e]
|
|
438
|
+
- Updated dependencies [9e7e1a5]
|
|
439
|
+
- Updated dependencies [2493e85]
|
|
440
|
+
- Updated dependencies [d0b9648]
|
|
441
|
+
- Updated dependencies [46dbf32]
|
|
442
|
+
- Updated dependencies [a928aaa]
|
|
443
|
+
- Updated dependencies [47508f3]
|
|
444
|
+
- Updated dependencies [61ed5ad]
|
|
445
|
+
- Updated dependencies [1b94d50]
|
|
446
|
+
- Updated dependencies [6f877f1]
|
|
447
|
+
- Updated dependencies [988aa9f]
|
|
448
|
+
- Updated dependencies [1ce0711]
|
|
449
|
+
- Updated dependencies [fb85637]
|
|
450
|
+
- Updated dependencies [9f1dd79]
|
|
451
|
+
- Updated dependencies [df71568]
|
|
452
|
+
- Updated dependencies [d11174a]
|
|
453
|
+
- Updated dependencies [2d8a8b7]
|
|
454
|
+
- Updated dependencies [cbac9d7]
|
|
455
|
+
- Updated dependencies [9eb1479]
|
|
456
|
+
- Updated dependencies [74e37aa]
|
|
457
|
+
- Updated dependencies [961b69f]
|
|
458
|
+
- Updated dependencies [52907d7]
|
|
459
|
+
- Updated dependencies [f466b0a]
|
|
460
|
+
- Updated dependencies [673a71c]
|
|
461
|
+
- Updated dependencies [616df65]
|
|
462
|
+
- Updated dependencies [58798ec]
|
|
463
|
+
- Updated dependencies [8803ca5]
|
|
464
|
+
- Updated dependencies [e70c21d]
|
|
465
|
+
- Updated dependencies [4b92c5a]
|
|
466
|
+
- Updated dependencies [06be396]
|
|
467
|
+
- Updated dependencies [3650d94]
|
|
468
|
+
- Updated dependencies [7c05f21]
|
|
469
|
+
- Updated dependencies [8cd4db4]
|
|
470
|
+
- Updated dependencies [daeb77f]
|
|
471
|
+
- Updated dependencies [eb4552e]
|
|
472
|
+
- Updated dependencies [3c3115e]
|
|
473
|
+
- Updated dependencies [55e90fd]
|
|
474
|
+
- Updated dependencies [9b75509]
|
|
475
|
+
- Updated dependencies [b13ea3c]
|
|
476
|
+
- Updated dependencies [d7e9e9a]
|
|
477
|
+
- Updated dependencies [cf62edf]
|
|
478
|
+
- Updated dependencies [0253416]
|
|
479
|
+
- Updated dependencies [5d77c09]
|
|
480
|
+
- Updated dependencies [3fd8625]
|
|
481
|
+
- Updated dependencies [1473757]
|
|
482
|
+
- Updated dependencies [d73d987]
|
|
483
|
+
- Updated dependencies [12ff256]
|
|
484
|
+
- Updated dependencies [26b0bd2]
|
|
485
|
+
- Updated dependencies [26b0bd2]
|
|
486
|
+
- Updated dependencies [d328698]
|
|
487
|
+
- Updated dependencies [d328698]
|
|
488
|
+
- Updated dependencies [b4e0787]
|
|
489
|
+
- Updated dependencies [088e0f7]
|
|
490
|
+
- Updated dependencies [78b07f4]
|
|
491
|
+
- Updated dependencies [f962cdc]
|
|
492
|
+
- Updated dependencies [b403bb3]
|
|
493
|
+
- Updated dependencies [8a25fee]
|
|
494
|
+
- Updated dependencies [4016370]
|
|
495
|
+
- Updated dependencies [12dc7b4]
|
|
496
|
+
- @object-ui/types@18.0.0
|
|
497
|
+
- @object-ui/components@18.0.0
|
|
498
|
+
- @object-ui/core@18.0.0
|
|
499
|
+
- @object-ui/i18n@18.0.0
|
|
500
|
+
- @object-ui/react@18.0.0
|
|
501
|
+
|
|
502
|
+
## 17.7.0
|
|
503
|
+
|
|
504
|
+
### Minor Changes
|
|
505
|
+
|
|
506
|
+
- b46c58f: BREAKING (`@object-ui/types`, `@object-ui/plugin-chatbot`): the authoring `ChatToolInvocation.state` union sheds the AI SDK's three runtime-only approval states — `approval-requested`, `approval-responded` and `output-denied` — so a schema-authored tool invocation can no longer claim an approval the runtime has nothing to back (objectui#10018, the residual clause of the objectui#8426 ruling, decision batch #86).
|
|
507
|
+
|
|
508
|
+
(The bump is `minor` by this repo's release model — objectui's major is pinned to the `@objectstack` family major, and its own breaking changes ship as `minor` with the breaking semantics stated here.)
|
|
509
|
+
|
|
510
|
+
**Break 1 — authored approval states are refused.** `ChatToolInvocation.state` (and so `ChatMessage.toolInvocations[].state` and `ChatbotSchema.messages`) no longer admits the three approval states, and the Zod mirror `ChatToolInvocationSchema` refuses them as an `invalid_value` at `state`. The refusal holds with or without an `approval` envelope: the envelope does not make a runtime-only state authorable. A chat runtime still produces these states — from the SDK's approval envelope, or promoted from an ObjectStack pending-action result — and still renders them; only the authoring face stops declaring them. Migration: author the state the tool call is actually in (`input-streaming`, `input-available`, `output-available`, `output-error`, or a legacy `partial-call` / `call` / `result`), and leave approval states to the runtime.
|
|
511
|
+
|
|
512
|
+
**Break 2 — `onSend` handlers typed against the authoring `ChatMessage[]`.** The messages a chat runtime hands back can carry those three states, so they are no longer a subtype of the authoring `ChatMessage`. `ChatbotSchema.onSend`'s `messages` is now typed as the authoring message widened by exactly those states, and `useObjectChat`'s `ObjectChatMessage` is no longer assignable to the authoring `ChatMessage`. A handler that declares its parameter as the authoring `ChatMessage[]` stops type-checking. Migration: let the parameter be inferred from the slot, or declare it as `ObjectChatMessage[]` from `@object-ui/plugin-chatbot` when passing `onSend` to `useObjectChat`.
|
|
513
|
+
|
|
514
|
+
Not breaking: `UseObjectChatOptions.initialMessages`, `SeamToolInvocation` and `toRuntimeToolState` now take the seam's state vocabulary (authoring plus runtime), which is the same set of values they accepted before, so every existing caller still compiles. `UseObjectChatOptions.initialMessages` also moves from the authoring `ChatMessage` to the exported `SeamChatMessage`, so nine optional runtime-only keys are now declared on that option: `buildProgress`, `blueprintProgress` and `charts` on a message, and `pendingActionId`, `draftReview`, `proposedPlan`, `proposedChanges`, `builderHandoff` and `replayOutcome` on each tool invocation. Nothing changes at runtime, because the hook's two builders behave exactly as before: local mode's `normalizeMessages` forwards `toolInvocations` whole (so the six tool-invocation keys survive) but copies only the base message fields (so `buildProgress`, `blueprintProgress` and `charts` are dropped), and API mode's `aiInitialMessages` rebuilds each message as SDK parts that carry none of the nine. Each key was already declared on `SeamChatMessage`; what changes is that a host passing one in an object literal is no longer told it is an excess property. No new name is exported: the three runtime-only states are named only by a non-exported alias in `@object-ui/types`, pinned equal to `ChatbotEnhanced`'s runtime union by `chat-message-contract.test.ts`. The effect on out-of-repo authors and hosts was not measured.
|
|
515
|
+
- e6203d7: An incremental edit is no longer read as a whole-app build. An `apply_edit` result says `kind: 'edit'` on its envelope, and its `drafted[]` may list the `app` artifact the edit re-staged, because an `add_object` op re-stages it for the nav merge. An `apply_blueprint` build carries no `kind`. The chat now takes the producer's field as the only thing that separates the two, instead of guessing a build from which artifact types were staged (objectui#10109):
|
|
516
|
+
|
|
517
|
+
- `detectBuiltAppPackage` returns `undefined` for an envelope that says `kind: 'edit'`, in both the drafted and the auto-publish (`status: 'published'`) postures.
|
|
518
|
+
- `DraftReview` has a new optional `kind?: 'edit'`, and `detectDraftResult` fills it from the envelope. The edit still gets its draft card, its items and its `packageId`, so one-click publish still works.
|
|
519
|
+
- `ChatbotEnhancedToolInvocation['draftReview']` (`ChatToolInvocation.draftReview`) is now typed as `DraftReview` instead of an inline copy of its fields, so it declares `kind` too. The two were field-identical before this change, and the published tool-invocation type now describes exactly what the chat mapper puts on it.
|
|
520
|
+
- `buildProgressFromDraftReview` builds no finished "Built X" panel for a draft review whose `kind` is `'edit'`, so a reloaded edit shows the same thing it showed live.
|
|
521
|
+
|
|
522
|
+
An envelope without `kind` behaves as before. `DraftReview.kind` declares only the value these readers act on, and an envelope that says anything else leaves it unset.
|
|
523
|
+
- 64dae8e: Six user-visible fixes across the maker surface, the assistant rail and the
|
|
524
|
+
dataset captions.
|
|
525
|
+
|
|
526
|
+
**The maker's start chips now promise only what ADR-0112 v1 builds
|
|
527
|
+
(cloud#1984).** Two of the five asked for automation the first version has no
|
|
528
|
+
flows or actions for — the ticket chip said 「状态流转」, the inventory chip said
|
|
529
|
+
「低库存预警」 — and the measured behaviour was not a refusal but a silent
|
|
530
|
+
degrade: a status kanban and a low-stock view. The chip promised an alert and
|
|
531
|
+
delivered a page. All five are reworded in all ten packs (and in the call-site
|
|
532
|
+
`defaultValue` fallbacks, which are a second copy of the same strings) to ask
|
|
533
|
+
for objects, fields, views, pages, dashboards and sample data, keeping each a
|
|
534
|
+
real business scenario — the ticket chip now asks for a status field and a board
|
|
535
|
+
grouped by it, the inventory chip for a view that filters below the reorder
|
|
536
|
+
point. A note beside the keys says to revert when v2 re-adds flows.
|
|
537
|
+
|
|
538
|
+
**Five newer AI tools get their step labels (objectui#7481).** A zh conversation
|
|
539
|
+
read `✓ Get authoring rules 已完成` between 「读取元数据结构」 and 「列出对象」:
|
|
540
|
+
`get_authoring_rules` (cloud#1837), plus `load_tools`, `open_record`,
|
|
541
|
+
`test_flow` and `toggle_flow`, are registered by the cloud AI runtime but are
|
|
542
|
+
newer than the pinned spec's tool registry, so they had no `chatbot.tool.*`
|
|
543
|
+
entry in any pack and fell through to the English title-caser.
|
|
544
|
+
|
|
545
|
+
**The assistant rail follows the thread when you send (objectui#7480).** The
|
|
546
|
+
rail and the full-page maker are the same component; what differs is width. A
|
|
547
|
+
reply that still ends on screen in the wide column runs two or three times
|
|
548
|
+
taller in a ~360px rail, so `StickToBottom`'s lock is escaped by the time the
|
|
549
|
+
user types and the new bubble, the tool steps and the streaming answer all land
|
|
550
|
+
below the fold. Every send path now re-arms the lock — including the plan-card
|
|
551
|
+
"Build it" and 确认修改 approvals, whose own code comments already named this
|
|
552
|
+
miss. Message APPENDS deliberately do not, so a user reading back through the
|
|
553
|
+
thread mid-answer is never yanked to the bottom.
|
|
554
|
+
|
|
555
|
+
**Console toasts move off the assistant composer (objectui#7482).** 「客户更新
|
|
556
|
+
成功」 sat on the ChatDock composer's send button and stayed there. One defect,
|
|
557
|
+
two symptoms: `apps/console` pinned the toaster to `bottom-right` — an override
|
|
558
|
+
that predates ADR-0057 P3a — so a toast both covered the button and, because
|
|
559
|
+
sonner pauses a toast's dismiss timer while the pointer is inside the toaster
|
|
560
|
+
region, never got to run its 4s timer with a pointer resting on the composer
|
|
561
|
+
underneath. The override is gone; the console takes `ConsoleToaster`'s own
|
|
562
|
+
documented top-right anchor, and the 4s success duration is now pinned.
|
|
563
|
+
|
|
564
|
+
**Built-in aggregate captions follow the locale everywhere (objectui#7534).**
|
|
565
|
+
objectui#7258 taught `buildChartSeries()` to resolve a server-minted default
|
|
566
|
+
measure through the locale map, so a chart legend read `计数` while the table
|
|
567
|
+
beneath it, the KPI caption, the pivot header and the dataset preview still
|
|
568
|
+
printed the server's hard-coded English `Count`. `buildDatasetFieldHelpers()`
|
|
569
|
+
takes the same optional `builtinAggregateLabels`, resolving through the one
|
|
570
|
+
`resolveMeasureLabel` order, and the five call sites pass it. Omitting the
|
|
571
|
+
argument reproduces the previous output byte for byte, and an author-declared
|
|
572
|
+
measure still keeps its own label verbatim (objectui#4106).
|
|
573
|
+
|
|
574
|
+
**The activity feed stops asking for an object the environment does not have
|
|
575
|
+
(objectui#7476).** A tenant environment has no `sys_activity`, so every page
|
|
576
|
+
load issued a request that 404'd. Everything downstream was already correct —
|
|
577
|
+
the adapter memoizes the missing collection, its logger demotes the failure, the
|
|
578
|
+
feed retires as an ANSWER and the panel renders its earned empty state — so what
|
|
579
|
+
is left is the request itself, and `data-objectstack` states the rule for it:
|
|
580
|
+
the cure for a doomed request is not issuing it. New `useObjectPresence` reads
|
|
581
|
+
the object registry the shell loads for the nav anyway; only a registry that has
|
|
582
|
+
ANSWERED and lists other objects without this one skips the read. Every
|
|
583
|
+
uncertainty — no provider, empty registry, still loading, errored — reads as
|
|
584
|
+
before, because a wrong skip would cost a real deployment its feed.
|
|
585
|
+
- 95bad12: feat(plugin-chatbot)!: `useObjectChat` drops the never-honoured `maxToolRoundtrips` option (objectui#5605)
|
|
586
|
+
|
|
587
|
+
**BREAKING (authoring).** `UseObjectChatOptions.maxToolRoundtrips` is removed, so a host
|
|
588
|
+
that passes it to `useObjectChat` no longer type-checks. The three chat registrations
|
|
589
|
+
(`chatbot`, `chatbot-enhanced`, `chatbot-floating`) no longer forward the key, and the
|
|
590
|
+
one-time console notice that authoring it used to log is gone. The authored key is now
|
|
591
|
+
refused by name in `@object-ui/types` (see that package's entry). The notice's reset
|
|
592
|
+
helper was never exported from the package entry, so no other export moves.
|
|
593
|
+
|
|
594
|
+
**Migration:** remove `maxToolRoundtrips`; cap tool loops on the agent
|
|
595
|
+
(`planning.maxIterations`).
|
|
596
|
+
|
|
597
|
+
The option never capped anything. The hook gives `useChat` no client tool loop, so every
|
|
598
|
+
tool round-trip of a turn runs on the server agent inside one streamed response, and the
|
|
599
|
+
value reached neither `useChat` nor the request body.
|
|
600
|
+
|
|
601
|
+
The stage-one deprecation (`.changeset/max-tool-roundtrips-deprecate-5605.md`) never
|
|
602
|
+
shipped: that changeset is still pending, and no `CHANGELOG.md` in this repository
|
|
603
|
+
mentions the key's deprecation.
|
|
604
|
+
- 52a43de: `ChatbotSchema` names the `chatbot` node's local-display and legacy
|
|
605
|
+
auto-response keys — a new, additive published surface (objectui#6169, the
|
|
606
|
+
#6172 family ruling: every component node has exactly one named, importable
|
|
607
|
+
authoring-face type).
|
|
608
|
+
|
|
609
|
+
`ChatbotSchema` (`@object-ui/types`) now declares ten keys that previously
|
|
610
|
+
existed ONLY inside an anonymous inline intersection local to
|
|
611
|
+
`packages/plugin-chatbot/src/renderer.tsx`'s `chatbot` registration, invisible
|
|
612
|
+
to anything outside that one file:
|
|
613
|
+
|
|
614
|
+
- `showTimestamp`, `userAvatarUrl`, `userAvatarFallback`, `assistantAvatarUrl`,
|
|
615
|
+
`assistantAvatarFallback`, `maxHeight` — display fields.
|
|
616
|
+
- `autoResponse`, `autoResponseText`, `autoResponseDelay` — the local
|
|
617
|
+
auto-response (demo/playground) fields, already live via a real consumer
|
|
618
|
+
(`packages/app-shell/src/console/ai/AiChatPage.tsx`).
|
|
619
|
+
- `onSend` — the send-callback, now typed on the published authoring face
|
|
620
|
+
rather than against the plugin's internal runtime message type. Its
|
|
621
|
+
`messages` element is the authoring `ChatMessage` widened by the three
|
|
622
|
+
runtime-only approval states a chat runtime hands back (objectui#10018).
|
|
623
|
+
|
|
624
|
+
Each was read-site-censused before being declared (renderer.tsx and/or
|
|
625
|
+
`useObjectChat.ts` reads every one); none were dead, so none took the
|
|
626
|
+
ADR-0049 retirement route. `disabled` — also present in the original
|
|
627
|
+
intersection — is NOT redeclared: it is already `BaseSchema.disabled`
|
|
628
|
+
(`boolean | string`), read generically for every node type, and redeclaring
|
|
629
|
+
it here would have narrowed away the inherited expression-string case.
|
|
630
|
+
|
|
631
|
+
**What an external consumer can now do that they could not before:** import
|
|
632
|
+
`ChatbotSchema` from `@object-ui/types` and get these ten keys with real,
|
|
633
|
+
checked types — previously any reference to them required either duplicating
|
|
634
|
+
the anonymous type by hand or falling back to `any`. The Zod mirror
|
|
635
|
+
(`@object-ui/types/zod`) gained the same ten keys in lockstep, so a `chatbot`
|
|
636
|
+
node parsed through it is now validated on these keys rather than silently
|
|
637
|
+
passed through unchecked (`BaseSchema`'s Zod mirror is `.passthrough()`).
|
|
638
|
+
|
|
639
|
+
`packages/plugin-chatbot`'s `chatbot` registration (`renderer.tsx`) now types
|
|
640
|
+
its `schema` prop as `ChatbotSchema` directly, dropping the anonymous
|
|
641
|
+
intersection. No behavior change: `renderer.tsx:87`'s
|
|
642
|
+
`body: schema.requestBody` forwarding — the subject of the already-merged
|
|
643
|
+
#6193 — is untouched, and the render function reads the exact same keys it
|
|
644
|
+
already read.
|
|
645
|
+
|
|
646
|
+
This is additive (new optional keys on an interface that already carried a
|
|
647
|
+
`[key: string]: any` index signature, and a new Zod-validated subset of
|
|
648
|
+
previously-passthrough keys), so it ships as `minor` even though it changes
|
|
649
|
+
published type surface: objectui's major is pinned to `@objectstack`'s
|
|
650
|
+
(`scripts/check-changeset-no-major.mjs`), and objectui's own breaking changes
|
|
651
|
+
ship as `minor` with the break spelled out — there is no break here to spell
|
|
652
|
+
out, only a widening from anonymous-and-unchecked to named-and-validated.
|
|
653
|
+
|
|
654
|
+
Out of scope, deliberately: the `chatbot-enhanced` and `chatbot-floating`
|
|
655
|
+
registrations' own anonymous intersections (different key sets, a decision
|
|
656
|
+
for a separate card in the same family), and the `surface` row on
|
|
657
|
+
`content/docs/plugins/plugin-chatbot.mdx`'s Properties table, which names a
|
|
658
|
+
key no registration in this package currently reads (filed separately).
|
|
659
|
+
- 7d8e546: `surface` becomes authorable on the `chatbot-enhanced` node, so the capability the docs
|
|
660
|
+
have been documenting is one an author can actually reach (objectui#6687, maintainer
|
|
661
|
+
ruling 2026-08-29).
|
|
662
|
+
|
|
663
|
+
`content/docs/plugins/plugin-chatbot.mdx`'s `Properties` table listed `surface`
|
|
664
|
+
(`'card' | 'plain'`, "bordered panel or a frameless full-page workspace"), but the key had
|
|
665
|
+
**zero read points**: none of the three `ComponentRegistry.register('chatbot*', ...)` sites
|
|
666
|
+
in `renderer.tsx` forwarded it, and `ChatbotSchema` did not declare it. `surface` was real
|
|
667
|
+
only as a prop of the React component — `ChatbotEnhanced.tsx` defines `ChatbotSurface`,
|
|
668
|
+
defaults it to `'card'`, and branches six layout decisions off `isPlainSurface` — so it was
|
|
669
|
+
reachable by a hand-written React host and by nobody writing metadata. An author who wrote
|
|
670
|
+
`surface: 'plain'` got the `'card'` default, with no error and no signal.
|
|
671
|
+
|
|
672
|
+
Measured on both declaration faces before the fix, each with a control that had to hit:
|
|
673
|
+
`schema.surface` appeared 0 times in `renderer.tsx` against `schema.placeholder` at 3 (one
|
|
674
|
+
per registration) and `schema.processVisibility` at 1; and `ChatbotSchema`
|
|
675
|
+
(`packages/types/src/complex.ts`) declared 34 keys, not this one. Two faces agreeing is
|
|
676
|
+
what made the zero a reading rather than a bad query.
|
|
677
|
+
|
|
678
|
+
The ruling adopted **wiring it** over deleting the row — the row names a real, shipped
|
|
679
|
+
capability, and hiding it back inside the component would withdraw it from authors. It also
|
|
680
|
+
matches this page's two existing resolutions of the same defect class, neither of which
|
|
681
|
+
deleted a row: `requestBody` (objectui#6193) kept its row and documented the seam, and
|
|
682
|
+
`maxToolRoundtrips` (objectui#5605) kept its row, marked it inert, and warns once at runtime.
|
|
683
|
+
|
|
684
|
+
- `chatbot-enhanced` declares `surface?: ChatbotSurface` on its inline schema-extension
|
|
685
|
+
type and forwards `schema.surface` to `<ChatbotEnhanced>`. The union is **imported** from
|
|
686
|
+
`ChatbotEnhanced.tsx` rather than re-spelled, so there is one contract rather than two
|
|
687
|
+
dialects that can drift (AGENTS.md #0.1).
|
|
688
|
+
- The key joins the registration's `inputs` (designer + autocomplete surface) with
|
|
689
|
+
`defaultValue: 'card'`, and deliberately **not** its `defaultProps` — mirroring
|
|
690
|
+
`processVisibility`, so nothing materializes the key onto new nodes.
|
|
691
|
+
- **The absent case is unchanged**: an unauthored `surface` is forwarded as `undefined`, so
|
|
692
|
+
`<ChatbotEnhanced>`'s own `surface = 'card'` default still applies. This is pinned as
|
|
693
|
+
hard as the authored direction, because it is what a careless
|
|
694
|
+
`schema.surface ?? 'plain'` or a `defaultProps` entry would silently regress for every
|
|
695
|
+
existing document.
|
|
696
|
+
- `chatbot` and `chatbot-floating` do **not** gain the key: they render `<Chatbot>` and
|
|
697
|
+
`<FloatingChatbot>`, which have no such chrome to switch. The docs row is therefore
|
|
698
|
+
scoped to say the key applies to the enhanced registration — the table never again claims
|
|
699
|
+
more than the registrations deliver.
|
|
700
|
+
|
|
701
|
+
`renderer.surface.test.tsx` pins all of it through the real SDUI host rather than a bare
|
|
702
|
+
component render, and asserts the rendered chrome rather than the forwarded prop, so a
|
|
703
|
+
regression where the key is forwarded but no longer acted on is still red.
|
|
704
|
+
|
|
705
|
+
⚠️ **Dated note, 2026-09-27 — `maxToolRoundtrips` no longer keeps its row — objectui#5605.**
|
|
706
|
+
Later in this same release `maxToolRoundtrips` is retired behind a tombstone: its props-table
|
|
707
|
+
row is gone, it no longer warns at runtime, and authoring it on any chat node is refused by
|
|
708
|
+
name with the agent's `planning.maxIterations` as the remedy. The sentence above that says it
|
|
709
|
+
"kept its row, marked it inert, and warns once at runtime" is kept as the reading of this
|
|
710
|
+
change; the objectui#5605 retirement entry states what an author gets now.
|
|
711
|
+
- d3499b3: `chatbot-floating` now fences its `<FloatingChatbot>` spread the same way its
|
|
712
|
+
two sibling registrations (`chatbot`, `chatbot-enhanced`) already do —
|
|
713
|
+
`{...toDomProps(props)}`, at the head of the element, instead of a raw
|
|
714
|
+
`{...props}` spread at the end. This is a deliberate,
|
|
715
|
+
user-visible behavior change, not a refactor:
|
|
716
|
+
|
|
717
|
+
- **A message sent through a floating chatbot now actually renders.**
|
|
718
|
+
Previously the authored `messages` seed (whatever array was on the node
|
|
719
|
+
when it was authored) silently overrode the live runtime messages on every
|
|
720
|
+
render, because the raw spread landed AFTER `messages={runtimeMessages}`.
|
|
721
|
+
Neither the user's own message nor an `autoResponse` reply ever appeared —
|
|
722
|
+
the identical send on `chatbot-enhanced` worked correctly. Fixed.
|
|
723
|
+
- **`displayMode`, `systemPrompt` and `model` stop leaking as DOM attributes**
|
|
724
|
+
on the panel's root element (`systemPrompt` / `model` are still read
|
|
725
|
+
normally, by name, for the request they configure — only the second,
|
|
726
|
+
unfiltered forward is gone). Closes objectui#4425's leak class on the one
|
|
727
|
+
`plugin-chatbot` registration that had not closed it yet.
|
|
728
|
+
- **Three undeclared keys go dark on `chatbot-floating` nodes:**
|
|
729
|
+
`processVisibility`, `surface` and `showAvatars` reached the panel's
|
|
730
|
+
`ChatbotEnhanced` through the raw spread even though `ChatbotFloatingSchema`
|
|
731
|
+
never declared them. `ChatbotFloatingSchema` documents this explicitly and
|
|
732
|
+
always has — the face never promised these keys — so this closes an
|
|
733
|
+
accidental channel rather than removing declared behavior. A document that
|
|
734
|
+
relied on any of the three to affect a floating node loses that effect;
|
|
735
|
+
author them on a `chatbot-enhanced` node instead, where they are part of
|
|
736
|
+
the declared, tested contract.
|
|
737
|
+
|
|
738
|
+
`@object-ui/types`: `ChatbotFloatingSchema`'s doc comment is updated to match
|
|
739
|
+
— no type-shape change, so nothing that imports the type needs to change.
|
|
740
|
+
- 0ea7054: Remove 37 runtime dependencies that no file in the declaring package consumes, and gate
|
|
741
|
+
the direction so the next one cannot land (objectui#8198).
|
|
742
|
+
|
|
743
|
+
`check:phantom-deps` judges imports that are not declared; nothing judged the reverse,
|
|
744
|
+
so a declaration could outlive its last consumer indefinitely. That is what happened to
|
|
745
|
+
`recharts` in `@object-ui/components` after objectui#7397 deleted its only importer — it
|
|
746
|
+
was removed by hand on objectui#7625, and nothing would have reported the next one. The
|
|
747
|
+
new `pnpm check:unused-deps` asks the reverse question over `dependencies` and
|
|
748
|
+
`optionalDependencies` of every released package.
|
|
749
|
+
|
|
750
|
+
**Potentially breaking, for consumers relying on hoisting.** Nothing these packages ship
|
|
751
|
+
changes: their Vite `external` predicates are path-based and never read `dependencies`,
|
|
752
|
+
so no built artifact moves. What changes is the install graph — a project that imports
|
|
753
|
+
one of the removed packages while depending only on the ObjectUI package that used to
|
|
754
|
+
drag it in will no longer resolve it. Declare it directly; that is the correct
|
|
755
|
+
dependency edge in either case. The removals, by package:
|
|
756
|
+
|
|
757
|
+
- `@object-ui/plugin-designer`: `@dnd-kit/core`, `@dnd-kit/sortable`, `@dnd-kit/utilities`, `@object-ui/fields`
|
|
758
|
+
- `@object-ui/plugin-chatbot`: `react-markdown`, `react-syntax-highlighter`, `remark-gfm` (and the orphaned `@types/react-syntax-highlighter`)
|
|
759
|
+
- `@object-ui/plugin-report`: `@object-ui/plugin-grid`, `clsx`, `react-i18next`, `tailwind-merge`
|
|
760
|
+
- `@object-ui/plugin-map`: `@objectstack/spec`, `lucide-react`, `zod`
|
|
761
|
+
- `@object-ui/runner`: `class-variance-authority`, `clsx`, `tailwind-merge`
|
|
762
|
+
- `@object-ui/core`: `lodash`, `zod`
|
|
763
|
+
- `@object-ui/layout`: `clsx`, `tailwind-merge`, and `react-dom` — which it pinned at an exact version in `dependencies` while also declaring it as a peer range, i.e. a library hard-depending on the renderer it asks its host to supply
|
|
764
|
+
- `@object-ui/plugin-dashboard`: `clsx`, `tailwind-merge`, and the same `react-dom` defect
|
|
765
|
+
- `@object-ui/plugin-ai`: `@object-ui/react`, `clsx`, `tailwind-merge`
|
|
766
|
+
- `@object-ui/fields`: `clsx`, `tailwind-merge`
|
|
767
|
+
- `@object-ui/console`: `@object-ui/react-runtime`, `sucrase`
|
|
768
|
+
- `@object-ui/auth`: `@object-ui/types`
|
|
769
|
+
- `@object-ui/plugin-calendar`: `@object-ui/fields`
|
|
770
|
+
- `@object-ui/plugin-editor`, `@object-ui/plugin-markdown`: `@object-ui/react`
|
|
771
|
+
- `@object-ui/react`: `react-hook-form`
|
|
772
|
+
|
|
773
|
+
Every one was verified by a whole-package grep before removal — the name appeared nowhere
|
|
774
|
+
under the package but its own manifest and CHANGELOG — and the whole workspace builds,
|
|
775
|
+
type-checks and tests green afterwards.
|
|
776
|
+
- 411a132: `uiMessagesToChatMessages` / `uiMessageToChatMessage` now accept `@ai-sdk/react`'s
|
|
777
|
+
`UIMessage[]` — the exact input the exported mappers are documented for
|
|
778
|
+
(objectui#8214).
|
|
779
|
+
|
|
780
|
+
**Not breaking.** The parameter type only got looser: every argument that compiled
|
|
781
|
+
before still compiles. `minor` rather than `patch` because a published signature
|
|
782
|
+
accepts input it refused before, which is a capability a consumer can newly rely on.
|
|
783
|
+
|
|
784
|
+
`mapMessages.ts`'s local `AnyPart` is written to absorb whatever a producer hands the
|
|
785
|
+
mapper — every other member is `string` / `unknown` — but `state` was typed against the
|
|
786
|
+
OUTPUT contract (`ChatToolInvocation['state']`, the tool-invocation lifecycle). The AI
|
|
787
|
+
SDK's own text and reasoning parts carry `state: 'streaming' | 'done'`, which is not in
|
|
788
|
+
that union, so the deliberately-permissive input interface was on that one property
|
|
789
|
+
STRICTER than the union it exists to absorb and the whole `UIMessage[]` assignment was
|
|
790
|
+
refused (TS2345). An app that followed the README and drove `useChat()` itself had to
|
|
791
|
+
add an `as never` / `as any` of its own, permanently disabling checking on that seam.
|
|
792
|
+
|
|
793
|
+
`AnyPart.state` is now `string`, and the one read site narrows through an `isToolState`
|
|
794
|
+
guard whose table is a `Record` over `ChatToolInvocation['state']` — so the output stays
|
|
795
|
+
exactly as checked as before, and the table cannot drift from the union it guards.
|
|
796
|
+
|
|
797
|
+
Small behaviour fix that falls out of the guard: a part carrying an unrecognized state
|
|
798
|
+
string (an AI SDK v4 snapshot's `'result'`, say) used to pass through verbatim into
|
|
799
|
+
`ChatToolInvocation.state`, fall past every branch in `getToolState`, and render a
|
|
800
|
+
finished call as "Running" forever. It now normalizes to `undefined`, which is the
|
|
801
|
+
documented "infer from `errorText` / `result`" case.
|
|
802
|
+
- 69a6fc1: feat(plugin-chatbot): `ChatbotEnhanced` takes an optional `surfaceContextTitle`, the tooltip of the surface-context chip
|
|
803
|
+
|
|
804
|
+
The chip that `surfaceContextLabel` renders above the composer now accepts an
|
|
805
|
+
optional `surfaceContextTitle`, rendered as the chip's `title`. A host can show
|
|
806
|
+
a readable label on the chip and keep an internal identifier reachable on hover.
|
|
807
|
+
The prop is additive: a caller that does not pass it renders the chip exactly
|
|
808
|
+
as before, with no `title`.
|
|
809
|
+
- 4dbab84: Build the chat runtime's discriminated tool parts at the PRODUCER, and delete the last
|
|
810
|
+
`as any` on the `useChat` call (objectui#8426; director seat, decision batch #86,
|
|
811
|
+
2026-09-08, option A — contract-first).
|
|
812
|
+
|
|
813
|
+
`useObjectChat`'s API-mode builder declared its part array as
|
|
814
|
+
`Array<Record<string, unknown>>` and pushed plain objects into it. That is not the
|
|
815
|
+
store's part union, and the mismatch was absorbed by a cast on the `messages` option
|
|
816
|
+
rather than reported. Measured 2x2 on this branch, each leg mutated on disk with hash
|
|
817
|
+
proof: with both that cast and the blanket one objectui#8378 removed gone, both
|
|
818
|
+
type-check programs turn red with one `TS2322` each — `Record<string, unknown>` is not
|
|
819
|
+
assignable to the store's part type. The builder now CONSTRUCTS each part, so the
|
|
820
|
+
option is checked and the cast is gone.
|
|
821
|
+
|
|
822
|
+
**Breaking, deliberately — `UseObjectChatOptions.initialMessages`.** A message's
|
|
823
|
+
optional `parts` member is now declared as the store's own part array instead of
|
|
824
|
+
`Array<Record<string, unknown>>`. Nothing in this repository sets it (the schema
|
|
825
|
+
renderer passes `schema.messages`; app-shell passes the output of
|
|
826
|
+
`hydratedMessagesToChatMessages`, whose literal declares no `parts`), so this is
|
|
827
|
+
visible only to a host that hands `useObjectChat` pre-built parts — which is exactly
|
|
828
|
+
the population the cast was hiding the mismatch from. Per this repo's version policy a
|
|
829
|
+
breaking change ships as `minor`; migration is to build real parts (or drop `parts` and
|
|
830
|
+
let the builder synthesize them from `content` / `toolInvocations`).
|
|
831
|
+
|
|
832
|
+
Three behaviour changes ride with it, each measured rather than assumed:
|
|
833
|
+
|
|
834
|
+
- **The three approval states are now reachable.** `approval-requested`,
|
|
835
|
+
`approval-responded` and `output-denied` require the runtime's `approval` envelope
|
|
836
|
+
alongside them; `ChatToolInvocation` gained that envelope in objectui#9229, and the
|
|
837
|
+
builder now constructs those arms from it. Before this, such an invocation was
|
|
838
|
+
emitted as an untyped object the store could not hold.
|
|
839
|
+
- **The legacy authoring states are folded, not passed through.** `partial-call`,
|
|
840
|
+
`call` and `result` are not runtime states; passing them through left the round-trip
|
|
841
|
+
reader refusing them, so the invocation came back with no state at all. They now fold
|
|
842
|
+
onto `input-streaming` / `input-available` / `output-available`.
|
|
843
|
+
- **The dead `toolName` member is no longer written onto a `tool-*` part.** Only the
|
|
844
|
+
dynamic-tool arm declares one, and the round-trip reader derives the name off the
|
|
845
|
+
part's `type`, so dropping it is behaviour-preserving.
|
|
846
|
+
|
|
847
|
+
An invocation that claims an approval state with no envelope to back it is not
|
|
848
|
+
constructible, and no envelope is invented for it: the state is derived from the data
|
|
849
|
+
the invocation does carry and the producer is told once, by name. An ObjectStack HITL
|
|
850
|
+
approval (`pendingActionId` plus a `pending_approval` result) is deliberately NOT
|
|
851
|
+
reported — it is carried by that id, and the mapper re-promotes the state from the
|
|
852
|
+
result on the way back out.
|
|
853
|
+
|
|
854
|
+
Also lifts the `approval` envelope in `mapMessages`' tool-invocation extraction, which
|
|
855
|
+
closes the disagreement objectui#9229 left behind: the hydrated path carried the
|
|
856
|
+
envelope while the live path dropped it. The lift lands in the same round as its first
|
|
857
|
+
reader, rather than earlier as a declared-but-unread key.
|
|
858
|
+
- 3a43a15: `ChatToolInvocation` gains an optional `approval` envelope, and the Console's
|
|
859
|
+
hydration mapper stops dropping it — together with `pendingActionId`
|
|
860
|
+
(objectui#8442).
|
|
861
|
+
|
|
862
|
+
Three AI SDK `state` values — `approval-requested`, `approval-responded` and
|
|
863
|
+
`output-denied` — are states the SDK's own tool-part union cannot express
|
|
864
|
+
WITHOUT an `{ id, approved?, reason?, isAutomatic?, signature? }` envelope.
|
|
865
|
+
`hydratedMessagesToChatMessages` built each invocation
|
|
866
|
+
from six fields and neither the envelope nor `pendingActionId` was one of them,
|
|
867
|
+
so a rehydrated pending approval arrived carrying a state that says "a human must
|
|
868
|
+
decide" and nothing a decision could be made with: `useHitlInChat` keys its index
|
|
869
|
+
on `pendingActionId` and skips any invocation without one.
|
|
870
|
+
|
|
871
|
+
The two halves arrive from different places and are lifted separately. The SDK
|
|
872
|
+
envelope is persisted ON THE PART and is narrowed to its declared shape rather
|
|
873
|
+
than cast (an `approval` with no usable `id` is refused, not passed through).
|
|
874
|
+
`pendingActionId` is never a part key — in rehydrated history it exists only
|
|
875
|
+
inside the tool RESULT — so it is derived with `detectPendingApproval`, the same
|
|
876
|
+
parse the live mapper uses, now exported from `@object-ui/plugin-chatbot` so the
|
|
877
|
+
two paths cannot disagree about one envelope rather than growing a second
|
|
878
|
+
dialect of it.
|
|
879
|
+
|
|
880
|
+
**`minor`, on the repo's written precedent — PM ruling, overriding the `patch`
|
|
881
|
+
this was drafted at.** The lane's runtime test answers no: the member is optional,
|
|
882
|
+
every value that parsed before still parses, and no chip, card or affordance
|
|
883
|
+
changes for data that carries no envelope. But that test is about stored data,
|
|
884
|
+
and what lands here is published SURFACE — two capabilities a consumer can newly
|
|
885
|
+
rely on: the `ChatToolInvocation.approval` member, and the `detectPendingApproval`
|
|
886
|
+
export. `.changeset/8214-chatbot-anypart-state-widen.md` settles that case in this
|
|
887
|
+
repo in those words: *"`minor` rather than `patch` because a published signature
|
|
888
|
+
accepts input it refused before, which is a capability a consumer can newly rely
|
|
889
|
+
on."*
|
|
890
|
+
|
|
891
|
+
The sequencing argument for `patch` was that objectui#8426's `minor` + `**BREAKING**`
|
|
892
|
+
carrier should not be spent early. ⛔ It does not hold, for two measured reasons.
|
|
893
|
+
**First, the level was never the signal.** This repo ships a breaking change AS
|
|
894
|
+
`minor`, so what distinguishes objectui#8426's half is the `**BREAKING**` carrier,
|
|
895
|
+
not the number beside the package — and that carrier is untouched by this
|
|
896
|
+
declaration. **Second, `.changeset/config.json` puts every package in ONE `fixed`
|
|
897
|
+
group**, so the released level is the maximum across all pending changesets
|
|
898
|
+
regardless of what this file says. Declaring `patch` here therefore buys no
|
|
899
|
+
smaller release and no preserved signal; it only makes the changelog line
|
|
900
|
+
under-describe what shipped. ⇒ the accurate declaration is the cheap one.
|
|
901
|
+
|
|
902
|
+
⛔ Nothing is narrowed here. The envelope stays optional on purpose, and this
|
|
903
|
+
card does not pair it with the approval states. That narrowing — the residual
|
|
904
|
+
clause of the objectui#8426 ruling — ships under its own name and its own
|
|
905
|
+
BREAKING banner: objectui#10018 sheds the three approval states from the
|
|
906
|
+
authoring `state` union, so an AUTHORED invocation cannot declare one at all,
|
|
907
|
+
with or without an envelope. On the runtime `ChatbotEnhanced.ChatToolInvocation`
|
|
908
|
+
an approval state may still arrive with no envelope — an ObjectStack
|
|
909
|
+
pending-action approval is carried by `pendingActionId` instead — and the
|
|
910
|
+
envelope stays optional there too.
|
|
911
|
+
- 270f282: Six hand-rolled em-dash placeholders now draw the shared `EmptyValue` from
|
|
912
|
+
`@object-ui/components` (objectui#8504), closing the *no accessible name* half
|
|
913
|
+
of the class objectui#8491 / PR #8503 opened.
|
|
914
|
+
|
|
915
|
+
**The accessibility defect.** Each site built its own `<span>` holding a bare em
|
|
916
|
+
dash. `EmptyValue` carries three things none of them had: a `data-slot` of
|
|
917
|
+
`empty-value`, an `aria-label` resolved through the i18n label hook, and
|
|
918
|
+
`select-none` / `no-underline` / `pointer-events-none`. So a screen-reader user
|
|
919
|
+
reaching one of these cells heard a naked punctuation mark, while a neighbouring
|
|
920
|
+
cell drawn by a type-aware renderer was announced as "No value". Two of the
|
|
921
|
+
sites make the inconsistency reachable inside one surface: the metadata list
|
|
922
|
+
renders column 0's placeholder *inside the row's `<Link>`*, where the
|
|
923
|
+
hand-rolled span inherited the link colour and stayed selectable, and the
|
|
924
|
+
dashboard record drawer sits next to renderers that already returned the shared
|
|
925
|
+
component.
|
|
926
|
+
|
|
927
|
+
The six: the metadata list's `defaultCell` and the Audit tab's lock column
|
|
928
|
+
(`@object-ui/app-shell`), the dashboard record drawer's empty `<dd>`
|
|
929
|
+
(`@object-ui/plugin-dashboard`), the import wizard's saved-mapping transform
|
|
930
|
+
cell (`@object-ui/plugin-grid`), the AI-approvals `JsonBlock`
|
|
931
|
+
(`@object-ui/plugin-chatbot`), and the Public Forms object column
|
|
932
|
+
(`@object-ui/console`).
|
|
933
|
+
|
|
934
|
+
**A deliberate visual change, not a no-op.** Five sites drop
|
|
935
|
+
`text-muted-foreground` (or `/60`) for the shared `text-muted-foreground/50`, so
|
|
936
|
+
every placeholder in the workspace is now one colour. The glyph is unchanged
|
|
937
|
+
everywhere. The sixth, `JsonBlock`, keeps its `text-xs` through `className`
|
|
938
|
+
because it stands where a `text-xs <pre>` would and has no shared neighbour to
|
|
939
|
+
match — its delta is the accessible name and the three affordances only.
|
|
940
|
+
|
|
941
|
+
**Two adjacent lines in the same file, taken deliberately.** The AI-approvals
|
|
942
|
+
drawer's `proposed_by` / `decided_by` fields fell back to a bare `'—'` text node
|
|
943
|
+
inside a plain `<div>` — a different source spelling of the same rendered
|
|
944
|
+
defect, individually verified on the card rather than swept up. They are
|
|
945
|
+
converted too. `formatRelative`'s `if (!s) return '—'` is not: that helper is
|
|
946
|
+
declared `: string`, so its fallback is not a node.
|
|
947
|
+
|
|
948
|
+
Filled values are untouched in every path.
|
|
949
|
+
- 6ce89da: The 确认修改 (confirm changes) card now carries a UI-owned terminal state after approval (#5695): `detectReplayOutcome` lifts the confirm-replay envelope (`replay_*` tool results) into 应用中 / 已生效 / 已暂存为草稿(含内联发布)/ 未生效(含 publishError 首行), rendered on the original card across the live, hydration/share, and localStorage-cache converters. A failed in-turn publish no longer rehydrates as an ordinary draft card with a live Publish button — the UI-rendered refusal is the layer a model cannot narrate over. New `console.ai.changesApplying/Applied/Drafted/Failed` keys in all ten locale packs.
|
|
950
|
+
- 63b4e0e: Fix the three breaks at the AI paywall moment (#7253), measured on a free plan's
|
|
951
|
+
second build iteration when the cloud guardrail refuses "Confirm changes" with a
|
|
952
|
+
429 `AI_DESIGN_QUOTA_EXHAUSTED`.
|
|
953
|
+
|
|
954
|
+
- **The upgrade CTA no longer opens a 404.** It used to open a client-composed
|
|
955
|
+
`${cloudBase}/apps/cloud-control/sys_environment`, which guessed the control
|
|
956
|
+
plane's console mount, app slug and route — all three wrong — and landed on
|
|
957
|
+
the API's `ENDPOINT_NOT_FOUND` JSON. `cloudInstallDeepLink` /
|
|
958
|
+
`cloudPricingDeepLink` are replaced by `cloudConsoleUrl()`, the
|
|
959
|
+
runtime-supplied cloud origin with no path appended; the control plane's own
|
|
960
|
+
root redirect decides the landing page. The former
|
|
961
|
+
`|| 'https://cloud.objectos.app'` default is gone: a runtime with no upstream
|
|
962
|
+
cloud now renders no upgrade link at all rather than pointing a self-hosted
|
|
963
|
+
user at the vendor's SaaS.
|
|
964
|
+
- **The confirm card gets an explicit failure state.** A quota refusal parks the
|
|
965
|
+
card on "not applied" with the server's own next step (reset tomorrow /
|
|
966
|
+
upgrade) plus the upgrade action, instead of silently rolling back to
|
|
967
|
+
"Confirm / Adjust" as though the click had never happened. Transient failures
|
|
968
|
+
(offline, per-minute rate limit) still roll back, because retrying is the
|
|
969
|
+
right next step there.
|
|
970
|
+
- **The composer is no longer refilled with an already-delivered message.**
|
|
971
|
+
Only text typed into the composer is restorable now; card-driven sends
|
|
972
|
+
(confirm, approve, suggestion chips) send canned text the user never typed and
|
|
973
|
+
no longer leave the previous prompt staged as if it needed resending.
|
|
974
|
+
- b842035: `useObjectChat().setMessages` now keeps the promise its declaration makes, and the
|
|
975
|
+
`chatResult as any` that was hiding the gap is gone (objectui#8342).
|
|
976
|
+
|
|
977
|
+
The member is declared `(messages: unknown[]) => void` and the hook returned
|
|
978
|
+
`@ai-sdk/react`'s own `setMessages`, which accepts only its `UIMessage[]`.
|
|
979
|
+
Parameters are contravariant, so that assignment is unsound — `tsc` reported it as
|
|
980
|
+
a TS2322 the moment the cast came off, and the declared type was telling every
|
|
981
|
+
consumer they could hand over an arbitrary array when the function underneath
|
|
982
|
+
could not take one. Nothing broke only because no caller had yet taken the type at
|
|
983
|
+
its word; one who did got a runtime failure the compiler had blessed.
|
|
984
|
+
|
|
985
|
+
The parameter stays `unknown[]`. This package does not republish the SDK's pinned
|
|
986
|
+
`UIMessage` on its own surface — the same call objectui#8214 made one file over
|
|
987
|
+
for `AnyPart.state`, and typing this member against the SDK would re-break it on
|
|
988
|
+
the next dependency bump. Instead the hook now wraps the SDK function and checks
|
|
989
|
+
every element first: an object with a string `id`, a `'user' | 'assistant' |
|
|
990
|
+
'system'` role, and a `parts` array — exactly the three members `UIMessage`
|
|
991
|
+
requires. `parts` is checked for array-ness only, because the part union is open
|
|
992
|
+
(a `data-*` part carries an author-defined payload) and restating it is the
|
|
993
|
+
coupling this change exists to avoid.
|
|
994
|
+
|
|
995
|
+
**Behaviour change, and the reason this is not a patch.** A value that is not a
|
|
996
|
+
chat message is now REFUSED, not filtered and not passed on: the call throws a
|
|
997
|
+
`TypeError` naming the offending index, and the SDK's store is left untouched
|
|
998
|
+
because the whole array is validated before anything is written. Filtering was
|
|
999
|
+
rejected deliberately — this is a re-hydration path where the caller's statement
|
|
1000
|
+
is "the thread is now exactly these messages", so dropping the failures would
|
|
1001
|
+
install a shorter thread that the `void` return makes undetectable. The declared
|
|
1002
|
+
TYPE does not move, so nothing that compiled stops compiling; what narrows is the
|
|
1003
|
+
set of values a consumer can successfully pass at runtime, which is the opposite
|
|
1004
|
+
direction from objectui#8214's widen.
|
|
1005
|
+
|
|
1006
|
+
`@object-ui/app-shell`'s `useReconcileOnError` is the one in-repo consumer. Its
|
|
1007
|
+
payload comes from `toUIMessages`, which emits exactly `id` / `role` / `parts`, so
|
|
1008
|
+
it passes the check unchanged; and it already calls through a `try`/`catch` that
|
|
1009
|
+
falls back to the ordinary error banner, so a future malformed server payload
|
|
1010
|
+
degrades to "show the error" rather than to a quietly-truncated transcript.
|
|
1011
|
+
- f157423: Studio workbench and AI tool cards speak the author's language (objectui#7254)
|
|
1012
|
+
|
|
1013
|
+
- The Interfaces breadcrumb, canvas caption and navigation rail show the
|
|
1014
|
+
metadata label plus a translated kind; the internal `type · name` pair moves
|
|
1015
|
+
to the tooltip. An unlabelled nav leaf now falls back to its object name
|
|
1016
|
+
instead of rendering an empty row.
|
|
1017
|
+
- The Studio top-bar package switcher reads the package's human name from
|
|
1018
|
+
either position the packages endpoint serves it in, instead of degrading a
|
|
1019
|
+
registry-shaped entry to its reverse-domain id.
|
|
1020
|
+
- The dashboard property panel is localized: the spec's authoring form is
|
|
1021
|
+
overlaid through the platform's own `metadataForms.<type>` convention, so
|
|
1022
|
+
section headings, field labels, hints and the `header` composite's sub-fields
|
|
1023
|
+
render in Chinese (developer vocabulary such as "Tailwind units" is replaced
|
|
1024
|
+
with something an author can act on, not transliterated).
|
|
1025
|
+
- AI tool cards: tool titles resolve through `chatbot.tool.<name>` (all thirty
|
|
1026
|
+
platform-provided tools, ten locale packs), the header status badge is
|
|
1027
|
+
localized, and the plan count strip is a real plural family instead of an
|
|
1028
|
+
English `+ "s"` concatenation.
|
|
1029
|
+
- The tool card's header badge and its body badge now come from one producer:
|
|
1030
|
+
a proposal that has been confirmed, built or published no longer keeps a
|
|
1031
|
+
header reading "Awaiting Approval".
|
|
1032
|
+
|
|
1033
|
+
### Patch Changes
|
|
1034
|
+
|
|
1035
|
+
- ac15833: fix(plugin-chatbot): a reloaded multi-step build no longer shows an empty 「执行过程」 block under every step (objectui#10899)
|
|
1036
|
+
|
|
1037
|
+
The conversation store persists each step of an agent turn as its own assistant
|
|
1038
|
+
row whose only text is a `(called …)` placeholder, so a reloaded build (the
|
|
1039
|
+
in-app dock, the Studio copilot) hydrates into one message per step. Each one
|
|
1040
|
+
rendered its tool row, then the italic 执行过程 note, then the message action
|
|
1041
|
+
bar — invisible until hover but full height — so every step read as an empty
|
|
1042
|
+
block with a large gap.
|
|
1043
|
+
|
|
1044
|
+
- The 执行过程 note is now only the fallback for a placeholder turn that shows
|
|
1045
|
+
nothing else. A turn whose tool row, build panel or design panel is on screen
|
|
1046
|
+
does not repeat it.
|
|
1047
|
+
- The copy / regenerate bar renders only for a turn with visible prose. A
|
|
1048
|
+
prose-less step has nothing to copy, and Copy used to copy the internal
|
|
1049
|
+
placeholder.
|
|
1050
|
+
- 7d82957: fix(plugin-chatbot): the proposed-plan card's actions wait until no turn is in flight
|
|
1051
|
+
|
|
1052
|
+
The proposed-plan card renders as soon as `propose_blueprint` returns, but the
|
|
1053
|
+
turn that proposed it keeps streaming after that, and the server stores each of
|
|
1054
|
+
its remaining steps as it goes. Build it, Adjust and the one-click answer chips
|
|
1055
|
+
were live the whole time. In a cloud E2E run the user clicked Build it inside
|
|
1056
|
+
that window. The next turn was sent while the previous one was still being
|
|
1057
|
+
stored, and the stored history interleaved the two turns.
|
|
1058
|
+
|
|
1059
|
+
These actions are now disabled while `isLoading` is true, on the structured plan
|
|
1060
|
+
card and on the fallback confirm card alike. `isLoading` is the signal that
|
|
1061
|
+
already turns the composer's send into a stop button. The actions come back once
|
|
1062
|
+
the response stream has been read to its end, and the buttons carry the native
|
|
1063
|
+
`disabled` attribute while they wait. The gate also covers two windows that a
|
|
1064
|
+
message's own `streaming` flag misses: a request that is out but has no reply
|
|
1065
|
+
yet, and a newer turn streaming below an older plan card.
|
|
1066
|
+
|
|
1067
|
+
Ordering replayed history by turn in the conversation store is a separate
|
|
1068
|
+
server-side fix.
|
|
1069
|
+
- be66b56: fix(plugin-chatbot): the confirm-changes card's actions wait until no turn is in flight
|
|
1070
|
+
|
|
1071
|
+
The confirm-changes card renders as soon as a tool such as `update_metadata`
|
|
1072
|
+
returns `changes_proposed`, but the turn that proposed the change keeps
|
|
1073
|
+
streaming after that. Confirm and Adjust were live the whole time, and Confirm
|
|
1074
|
+
sends its confirmation straight away, so a click in that window sent the next
|
|
1075
|
+
turn while the previous one was still in flight. The proposed-plan card's
|
|
1076
|
+
actions were fixed for the same overlap.
|
|
1077
|
+
|
|
1078
|
+
Confirm and Adjust are now disabled while `isLoading` is true, the signal the
|
|
1079
|
+
proposed-plan card's actions already wait on. They carry the native `disabled`
|
|
1080
|
+
attribute while they wait and come back once no turn is in flight. Because the
|
|
1081
|
+
signal is not tied to the card's own message, the gate also holds an older card
|
|
1082
|
+
while a newer turn is in flight below it, including a request that is out with
|
|
1083
|
+
no reply yet.
|
|
1084
|
+
|
|
1085
|
+
Only those two buttons change. The card's other states render as before: the
|
|
1086
|
+
Applying badge, the blocked state after an AI quota refusal, the Confirmed
|
|
1087
|
+
badge, and the reply hint shown when the host passes no `onSendMessage`.
|
|
1088
|
+
- 39f4309: Published typings from every `vite-plugin-dts` package now carry an explicit extension on
|
|
1089
|
+
every relative specifier, and a type error in the declaration build now fails the build
|
|
1090
|
+
instead of being printed and ignored (objectui#5439, objectui#5483).
|
|
1091
|
+
|
|
1092
|
+
**Consumers on `moduleResolution: nodenext` or `node16` may see NEW type errors, and that
|
|
1093
|
+
is the fix working.** These packages re-export mostly through NAMED re-exports —
|
|
1094
|
+
`export { useObjectChat } from './useObjectChat'`. TypeScript could not follow the
|
|
1095
|
+
extensionless hop, but it still DECLARED the name, so the symbol resolved to a silent
|
|
1096
|
+
`any`. Nothing errored; consumers simply got no types. With the extension emitted, the
|
|
1097
|
+
symbol carries its real type, and any call site that was relying on the `any` now type
|
|
1098
|
+
checks for the first time. This is the mode that produced the 21 residual `TS7006` on
|
|
1099
|
+
`@object-ui/app-shell` reported against objectui#5365 — a type hole that opened quietly,
|
|
1100
|
+
unlike objectui#5365's own `export * from './ui'` packages where the same defect surfaced
|
|
1101
|
+
immediately as `TS2305: has no exported member`.
|
|
1102
|
+
|
|
1103
|
+
410 extensionless relative specifiers across 19 packages were emitted before this change;
|
|
1104
|
+
the count is now 0 in all 22 packages that build typings through `vite-plugin-dts`.
|
|
1105
|
+
`@object-ui/fields` was already clean — its sources write explicit `.js` specifiers — and
|
|
1106
|
+
is wired so it stays that way.
|
|
1107
|
+
|
|
1108
|
+
The second half changes no emitted output today: 22/22 packages built green unmodified, so
|
|
1109
|
+
making the declaration step's exit code honest turns nothing red. It changes what a FUTURE
|
|
1110
|
+
regression does — print and exit 0, versus fail the build.
|
|
1111
|
+
- 01c9023: `AiPendingActionsInbox` speaks the session locale — every string in it, not only its timestamps (objectui#7173).
|
|
1112
|
+
|
|
1113
|
+
The AI HITL approval inbox held its own relative-time helper returning hardcoded
|
|
1114
|
+
English (`'just now'`, `` `${min}m ago` ``), so a zh / ja / ar session read English
|
|
1115
|
+
relative times on every row. It is the fifth spelling of that helper in the repo,
|
|
1116
|
+
and the file had **no translation wiring at all** — the unwired-component shape,
|
|
1117
|
+
not the lookup-swap shape.
|
|
1118
|
+
|
|
1119
|
+
It is therefore swept whole. objectui#7142 wired one string into an otherwise
|
|
1120
|
+
untranslated component and shipped something visibly half-done, and objectui#7149
|
|
1121
|
+
is what finishing that afterwards cost; the triage ruling on this card (2026-09-01)
|
|
1122
|
+
carried that forward as *sweep the file whole or leave it*. Everything the user can
|
|
1123
|
+
read now resolves from the locale packs: the card heading and description, the three
|
|
1124
|
+
tabs, the refresh button, all five status badges, the six column headings, the empty
|
|
1125
|
+
state, the row and drawer buttons, all nine drawer field labels, the outcome banner
|
|
1126
|
+
and the whole reject-reason dialog.
|
|
1127
|
+
|
|
1128
|
+
**No new rows for the four relative-time branches.** `detail.justNow`,
|
|
1129
|
+
`detail.minutesAgo`, `detail.hoursAgo` and `detail.daysAgo` already existed,
|
|
1130
|
+
translated, in all ten packs, and cross-package key borrowing is this repo's settled
|
|
1131
|
+
convention rather than an open question — `ObjectGrid`, `ObjectKanban`, `ObjectTree`,
|
|
1132
|
+
`ListView`, `ObjectView`, `NavigationOverlay`, `RecordAttachmentsPanel`,
|
|
1133
|
+
`RecordDetailView` and `apps/console` all resolve `detail.*` from outside
|
|
1134
|
+
`plugin-detail`. One phrase on one kind of control should not get a second
|
|
1135
|
+
translation that can drift from the first.
|
|
1136
|
+
|
|
1137
|
+
The rest of the sweep needed copy no pack had, so `@object-ui/i18n` gains an
|
|
1138
|
+
`aiApprovals` namespace: 38 keys, translated in all ten packs. It is deliberately
|
|
1139
|
+
separate from `approvalsInbox`, which is the human approval-**process** inbox — a
|
|
1140
|
+
different surface and a different feature, so no rows are shared with it. Four
|
|
1141
|
+
generic verbs are reused rather than forked (`common.refresh`, `common.cancel`,
|
|
1142
|
+
`common.loading`, `common.ok`).
|
|
1143
|
+
|
|
1144
|
+
**⛔ The five relative-time helpers are not unified.** They differ in real behaviour
|
|
1145
|
+
— `Math.round` here against `Math.floor` in `plugin-detail`, thresholds 45s/30d
|
|
1146
|
+
against 60s/7d, different tails — so normalising them is a behaviour change wearing
|
|
1147
|
+
a refactor's clothes and needs its own card. This inbox's arithmetic is untouched,
|
|
1148
|
+
and three rows in the new suite exist only to pin it: 50s renders `1m ago` (a 60s
|
|
1149
|
+
threshold would still say "just now"), 90s renders `2m ago` (`Math.floor` gives
|
|
1150
|
+
`1m ago`), and 20d renders `20d ago` (a 7d threshold would already show a date).
|
|
1151
|
+
|
|
1152
|
+
Two assembled English sentences became single interpolated keys — the outcome banner
|
|
1153
|
+
(`Approve for {{id}}: {{message}}`) and the drawer subtitle
|
|
1154
|
+
(`Tool {{tool}} on {{object}}`). Their word order differs per locale, which fragments
|
|
1155
|
+
around a `<code>` element cannot express, so the two identifiers lose their monospace
|
|
1156
|
+
styling. That is the deliberate cost of making those sentences translatable.
|
|
1157
|
+
|
|
1158
|
+
Evidence: an `en`-only assertion cannot discriminate here, because each key's `en`
|
|
1159
|
+
value is byte-identical to the literal it replaced. The suite asserts in **zh and
|
|
1160
|
+
ar**, and the provider-less path separately, in its own file (`createI18n` installs
|
|
1161
|
+
itself as react-i18next's module-level global, so a provider-less render in a file
|
|
1162
|
+
that has already mounted a provider silently reads that pack instead of the defaults
|
|
1163
|
+
map). No inline `defaultValue` anywhere (objectui#3517).
|
|
1164
|
+
|
|
1165
|
+
Two consequences of the sweep, both landed here rather than left for CI to find:
|
|
1166
|
+
|
|
1167
|
+
`packages/app-shell/src/console/ai/__tests__/ConversationsSidebar.test.tsx` froze its
|
|
1168
|
+
`vi.mock('@object-ui/i18n', ...)` factory to a hand-written object. Its import graph
|
|
1169
|
+
reaches `plugin-chatbot`, which now resolves `createSafeTranslation` at module scope, so
|
|
1170
|
+
the frozen surface made that read `undefined` and the file died during COLLECTION — the
|
|
1171
|
+
objectui#6849 shape, which does not look like a test failure. It now spreads
|
|
1172
|
+
`importOriginal()` and overrides only `useObjectTranslation`. Measured, not guessed: of
|
|
1173
|
+
the 41 frozen `@object-ui/i18n` factories in the repo, running every one of them showed
|
|
1174
|
+
this to be the only file whose graph reaches the package.
|
|
1175
|
+
|
|
1176
|
+
The ten pack blocks are locale DATA, and locale data lands in the console's eager
|
|
1177
|
+
`framework` chunk, so `scripts/check-eager-closure-budget.mjs` raises that chunk's
|
|
1178
|
+
ceiling from 512,000 to 524,000 gzipped bytes and re-pins its baseline onto a fresh
|
|
1179
|
+
measurement (502,405 to 514,863). Attributed by three console builds: the merge parent
|
|
1180
|
+
reads 510,192, this branch with the ten `aiApprovals` blocks cut reads 510,192 again, and
|
|
1181
|
+
this branch reads 514,863 — so the whole 4,671-byte delta is the pack data and nothing
|
|
1182
|
+
else. Headroom is kept at the line's own convention (9,137 bytes, 0.10x the regression
|
|
1183
|
+
the gate must catch) rather than widened; most of the overage was pre-existing drift, with
|
|
1184
|
+
the merge parent already at 510,192 of the 512,000 allowed.
|
|
1185
|
+
- c6198c2: **Breaking for authored metadata:** `ComponentInput.label`, `ComponentInput.defaultValue` and
|
|
1186
|
+
`ComponentInput.advanced` are RETIRED on both faces (objectui#7493 item ① and objectui#7781;
|
|
1187
|
+
maintainer ruling A of 2026-09-06, immediate, no deprecation window; ADR-0049 enforce-or-remove).
|
|
1188
|
+
They are the three keys the manifest serializer does not forward, and nothing read them on any
|
|
1189
|
+
publication or consumption path.
|
|
1190
|
+
|
|
1191
|
+
No manifest ever published them, so no consumer could ever have read them. `sdui-parser`'s
|
|
1192
|
+
serializer (`packages/sdui-parser/src/index.ts`) forwards exactly seven keys per input — `name`,
|
|
1193
|
+
`type`, `of`, `required`, `enum`, `binding`, `description` — so a value authored under any of the three
|
|
1194
|
+
never reached `sdui.manifest.json`, the generated JSX `.d.ts`, or a diagnostic; its boundary type
|
|
1195
|
+
has no slot for them; the registry's data-source seam reads `name` only; and neither the designer
|
|
1196
|
+
nor the app-shell inspectors consult registry `inputs` at all. A structural census over every
|
|
1197
|
+
`inputs:` array in the repository (re-measured on this change's merge-base, `name` 951 and `type`
|
|
1198
|
+
951 as the controls) counted the writes: `label` 908, `defaultValue` 245, `advanced` 9 — written on
|
|
1199
|
+
nearly every registration, read by nothing.
|
|
1200
|
+
|
|
1201
|
+
FROM → TO, per key — all three **TOMBSTONED, not removed**, because the route was measured on
|
|
1202
|
+
the built face before it was chosen: `ComponentInputSchema` is a non-strict `z.object`, and an
|
|
1203
|
+
undeclared key parses GREEN and is silently STRIPPED, so a deletion would have swallowed 1,162
|
|
1204
|
+
authored values in silence. The tombstone is what makes the refusal loud and by name.
|
|
1205
|
+
|
|
1206
|
+
- `label?: string` → `label?: never` on the interface, `retirementTombstone()` on the Zod mirror.
|
|
1207
|
+
Migration: delete the key. An input is identified by its `name` on every path that reaches it;
|
|
1208
|
+
nothing ever rendered a label for it.
|
|
1209
|
+
- `defaultValue?: any` → `defaultValue?: never` / `retirementTombstone()`. Migration: delete the
|
|
1210
|
+
key. The renderer's own fallback read IS the default; tell the author about it in `description`,
|
|
1211
|
+
which IS published. (Tightening the type to `unknown` was ruled out: it closes no error class,
|
|
1212
|
+
since nothing reads the value.)
|
|
1213
|
+
- `advanced?: boolean` → `advanced?: never` / `retirementTombstone()`. Migration: delete the key.
|
|
1214
|
+
No designer surface ever hid an "advanced" input; there is nothing to write instead.
|
|
1215
|
+
|
|
1216
|
+
The retirement kit: `?: never` on `ComponentInput` (`packages/types/src/base.ts`), so authoring one
|
|
1217
|
+
is a `tsc` error at the registration site; `retirementTombstone()` on `ComponentInputSchema`
|
|
1218
|
+
(`packages/types/src/zod/base.zod.ts`), so an authored value is REFUSED at parse time with
|
|
1219
|
+
`code: 'invalid_type'`, the key named in the issue `path`, and the migration note as the message
|
|
1220
|
+
(one string, both channels). Pinned in
|
|
1221
|
+
`packages/types/src/__tests__/component-input-retired-keys-7493.test.ts`, which also holds a
|
|
1222
|
+
tree-scoped absence census over every `inputs:` array under `packages/**` and `apps/**`.
|
|
1223
|
+
|
|
1224
|
+
Accept-set change, stated plainly for reviewers: a document that sets any of the three keys on a
|
|
1225
|
+
`ComponentInput` used to parse GREEN (the value was then dropped by the serializer) and now parses
|
|
1226
|
+
RED. Every in-repo authoring site — 1,199 keys across 110 registration files, the three standalone
|
|
1227
|
+
`ComponentInput[]` arrays and the two named input arrays `tsc` found included — is deleted in the same change, as the ruling's split rule
|
|
1228
|
+
requires; the `WidgetRegistry` seam no longer copies the widget-manifest values onto the synthesized
|
|
1229
|
+
`ComponentInput` (they fed nothing), and the data-source declaration `ELEMENT_DATA_SOURCE_INPUT`
|
|
1230
|
+
drops its `label`. The patch entries on the other packages record exactly that: their registrations
|
|
1231
|
+
stop authoring inert keys, with no runtime or published-manifest change.
|
|
1232
|
+
|
|
1233
|
+
The nine test files that read `defaultValue` off a registration were re-pinned against the
|
|
1234
|
+
renderer's ACTUAL default (its own fallback read, or the `defaultProps` it ships) instead of the
|
|
1235
|
+
declaration that went away; two assertions that only restated the shadow default were dropped with
|
|
1236
|
+
the reason on the line.
|
|
1237
|
+
|
|
1238
|
+
The in-repo zero is what was measured. Whether anything OUTSIDE this repository writes these keys
|
|
1239
|
+
is not measurable from here (the objectui#5674 limit); converting such a write from a silent drop
|
|
1240
|
+
into a named refusal is exactly what the tombstones buy. `WidgetInput`'s own `label` /
|
|
1241
|
+
`defaultValue` / `advanced` (the widget-manifest face) stay declared and writable — nothing has
|
|
1242
|
+
ruled on that face; that it now has no reader either is recorded as objectui#7911.
|
|
1243
|
+
- 3e377c9: Retire `ChatbotSchema.displayMode` — and its copy on `ChatbotFloatingSchema` — as an
|
|
1244
|
+
ADR-0049 retirement tombstone, and remove the `chatbot-floating` registration's
|
|
1245
|
+
"Display Mode" designer control and its `defaultProps.displayMode: 'floating'` seed
|
|
1246
|
+
(objectui#7654, maintainer ruling B of 2026-09-05, director decision batch #44).
|
|
1247
|
+
|
|
1248
|
+
⚠️ **BREAKING for anyone authoring `displayMode` against a chatbot face in TypeScript.**
|
|
1249
|
+
Ships as `minor` per the launch-window convention: objectui's `major` is a cross-repo pin
|
|
1250
|
+
to `@objectstack`'s so that "same major means compatible" holds across the two repos
|
|
1251
|
+
(`scripts/check-changeset-no-major.mjs`), and objectui's own breaking changes ship as
|
|
1252
|
+
`minor` with the break named where it lands — this entry is the channel that carries it.
|
|
1253
|
+
|
|
1254
|
+
## What was retired, and why
|
|
1255
|
+
|
|
1256
|
+
The node `type` — `chatbot-floating` versus `chatbot` / `chatbot-enhanced` — is the one
|
|
1257
|
+
selector of presentation. `displayMode` (`'inline' | 'floating'`) was a second spelling
|
|
1258
|
+
of that same choice, and no renderer has ever read it: `chatbot-floating` renders the
|
|
1259
|
+
trigger and panel unconditionally, and `chatbot` never looked at the key, so
|
|
1260
|
+
`displayMode: 'floating'` on a `chatbot` node produced no trigger and `'inline'` on a
|
|
1261
|
+
`chatbot-floating` node changed nothing. It was nevertheless declared on both faces,
|
|
1262
|
+
painted as a **Display Mode** control in the designer's property panel, and written as
|
|
1263
|
+
`'floating'` into every node the designer created — two surfaces teaching a switch that
|
|
1264
|
+
did not exist.
|
|
1265
|
+
|
|
1266
|
+
Re-measured on this branch's base rather than inherited from the card: a whole-repo
|
|
1267
|
+
`git grep` census over tracked files, build output excluded, returned the declarations,
|
|
1268
|
+
the doc comments and parity-ledger entries beside them, one historical CHANGELOG line and
|
|
1269
|
+
two unrelated `displayMode` props on `GridField` / `MasterDetailForm` — no read. The same
|
|
1270
|
+
pass over `floatingConfig`, a key that IS read, returned 79 lines, so the instrument was
|
|
1271
|
+
not blind.
|
|
1272
|
+
|
|
1273
|
+
FROM → TO:
|
|
1274
|
+
|
|
1275
|
+
- `ChatbotSchema.displayMode?: 'inline' | 'floating'` → **`displayMode?: never`**, an
|
|
1276
|
+
ADR-0049 retirement tombstone whose comment points at `type` as the replacement.
|
|
1277
|
+
- `ChatbotFloatingSchema.displayMode?: 'inline' | 'floating'` → **`displayMode?: never`**,
|
|
1278
|
+
the same tombstone. objectui#7655 declared the key on the floating face with
|
|
1279
|
+
`ChatbotSchema`'s own lines precisely so this retirement would find it on both faces;
|
|
1280
|
+
leaving the copy typed would have kept the published face teaching the switch.
|
|
1281
|
+
- `chatbot-floating` `inputs`: the **Display Mode** control is removed.
|
|
1282
|
+
- `chatbot-floating` `defaultProps`: `displayMode: 'floating'` is no longer written into
|
|
1283
|
+
designer-created nodes.
|
|
1284
|
+
|
|
1285
|
+
A control is restated, never deleted into a vacuum (`5f4514f7b`): the restatement of
|
|
1286
|
+
the removed control is the tombstone's guidance plus this note.
|
|
1287
|
+
|
|
1288
|
+
**Migration.** Delete `displayMode` from any TypeScript literal typed as `ChatbotSchema`
|
|
1289
|
+
or `ChatbotFloatingSchema`; the presentation you wanted is already chosen by `type` —
|
|
1290
|
+
`'chatbot-floating'` for the trigger-and-panel, `'chatbot'` / `'chatbot-enhanced'` for
|
|
1291
|
+
inline. **No JSON document needs editing** — see the next section.
|
|
1292
|
+
|
|
1293
|
+
## Stored documents: runtime validation of this key is unchanged — zero before, zero after
|
|
1294
|
+
|
|
1295
|
+
`displayMode` has never had a Zod arm — it sits in the `UnmirroredDeclared` ledger for
|
|
1296
|
+
both `complex.zod.ts#ChatbotSchema` and `#ChatbotFloatingSchema`, and `BaseSchema` is
|
|
1297
|
+
`.passthrough()` — so a stored document carrying `displayMode: 'floating'` (every node
|
|
1298
|
+
the designer ever created) parses green before this change and parses green after it,
|
|
1299
|
+
and the value is dropped at render time exactly as it always was.
|
|
1300
|
+
|
|
1301
|
+
That is deliberate, and it is why this tombstone has **no `retirementTombstone()`
|
|
1302
|
+
half**: minting a mirror arm to refuse the key would be the declared-but-unmirrored axis
|
|
1303
|
+
(objectui#6152), a different defect, and a parse outcome the ruling did not ask for.
|
|
1304
|
+
`packages/types/src/__tests__/chatbot-display-mode-retired.test.ts` pins both twins'
|
|
1305
|
+
shapes as a **tripwire** — the same shape `a3eb5d07a` gave `triggerIcon` — so that if
|
|
1306
|
+
objectui#6152 ever mints an arm for `displayMode`, the pin goes red and whoever lands the
|
|
1307
|
+
mirror adds the `retirementTombstone()` half at that time, flipping the control rather
|
|
1308
|
+
than deleting it.
|
|
1309
|
+
|
|
1310
|
+
## Why a tombstone and not a deletion — measured on this carrier
|
|
1311
|
+
|
|
1312
|
+
`ChatbotSchema` extends `BaseSchema`, which carries a `[key: string]: any` index
|
|
1313
|
+
signature, and on such a carrier deleting an optional member is **silent in every value
|
|
1314
|
+
shape**: the index signature defeats both excess-property checking and the weak-type
|
|
1315
|
+
check. Measured on this member with `tsc -p tsconfig.test.json`, a no-index-signature
|
|
1316
|
+
control carrier (`FloatingChatbotConfig`) lit in the same run:
|
|
1317
|
+
|
|
1318
|
+
| route | fresh `'floating'` | fresh `'bogus'` | widened `'floating'` |
|
|
1319
|
+
|---|---|---|---|
|
|
1320
|
+
| declared (before) | clean | `TS2322` | clean |
|
|
1321
|
+
| deleted | clean | **clean** | clean |
|
|
1322
|
+
| tombstoned (after) | `TS2322` | `TS2322` | `TS2322` |
|
|
1323
|
+
|
|
1324
|
+
Deleted, the member reads as `any` and even a wrong-typed value goes quiet. Tombstoned,
|
|
1325
|
+
**presence with any value** is a compile error — a channel deletion cannot produce on
|
|
1326
|
+
this carrier at all. On a `BaseSchema` carrier the two routes are loud-vs-silent, not
|
|
1327
|
+
louder-vs-quieter (the discriminator's carrier branch in its amended form, `5f8190c8c`).
|
|
1328
|
+
Prong 2 of that discriminator licenses the tombstone: the key was advertised in the
|
|
1329
|
+
3.3.0 release record (`CHANGELOG.md:578`) and its published comment taught it as the
|
|
1330
|
+
presentation switch. The deleted row is pinned in the test file as a live control — an
|
|
1331
|
+
undeclared key that rides both shapes with no directive — so the contrast cannot rot.
|
|
1332
|
+
|
|
1333
|
+
## Accept-set change, one line per face
|
|
1334
|
+
|
|
1335
|
+
- **TypeScript.** A write of `displayMode` against either chatbot face used to compile
|
|
1336
|
+
and now does not.
|
|
1337
|
+
- **Runtime (Zod / `safeValidateSchema`).** Nothing changes at all — a stored document
|
|
1338
|
+
carrying the key parses green before and after, and keeps the value.
|
|
1339
|
+
- **Designer.** The **Display Mode** control disappears from the `chatbot-floating`
|
|
1340
|
+
property panel, and newly created nodes no longer carry the key.
|
|
1341
|
+
- **Manifest, author-time validator, and generated JSX props.** The `chatbot-floating`
|
|
1342
|
+
registration's `inputs` go from 20 entries to 19 and its `defaultProps` from 9 keys to
|
|
1343
|
+
8, so the manifest projected from them no longer lists the prop. Measured on both sides
|
|
1344
|
+
of this change: `validateTree` on a stored `chatbot-floating` node carrying
|
|
1345
|
+
`displayMode` goes from **0 diagnostics to exactly 1** — code `unknown-prop`, severity
|
|
1346
|
+
**`warning`**, message `` `<chatbot-floating> has no prop "displayMode"` `` — which is
|
|
1347
|
+
what the JSX/HTML authoring tier reports through `compile()`. In the same pair of runs
|
|
1348
|
+
the props interface `generateDts` derives from those same `inputs` drops from 20 members
|
|
1349
|
+
to 19, losing its `displayMode?: string` line, so a `.tsx` page written against those
|
|
1350
|
+
generated intrinsics no longer type-checks the attribute.
|
|
1351
|
+
|
|
1352
|
+
**This is author-time only: no stored document stops parsing and nothing at render
|
|
1353
|
+
moves.** The value survives compilation — `compile()` returns a tree still carrying
|
|
1354
|
+
`displayMode: 'floating'`, byte-for-byte the same keys before and after — and a
|
|
1355
|
+
`warning` never blocks a page, because the page renderer filters the diagnostics to
|
|
1356
|
+
`severity === 'error'` before deciding whether to fail. Two neighbouring instruments are
|
|
1357
|
+
untouched and worth naming so the scope is not read wider than it is: `os validate` runs
|
|
1358
|
+
`safeValidateSchema`, the Zod path, and is silent on this key before and after; and the
|
|
1359
|
+
build-time `sdui-intrinsics.d.ts` artifact is generated from the PUBLIC tier, which does
|
|
1360
|
+
not contain `chatbot-floating` on either side of this change.
|
|
1361
|
+
- 4ce14f1: One named, importable authoring-face type per `plugin-chatbot` registration:
|
|
1362
|
+
`ChatbotEnhancedSchema` and `ChatbotFloatingSchema` join `ChatbotSchema`
|
|
1363
|
+
(objectui#7655, under the objectui#6169 / #6172 family ruling — every component
|
|
1364
|
+
node has exactly one named, importable authoring-face type).
|
|
1365
|
+
|
|
1366
|
+
`packages/plugin-chatbot` registers three components — `chatbot`,
|
|
1367
|
+
`chatbot-enhanced`, `chatbot-floating` — and `@object-ui/types` published ONE
|
|
1368
|
+
face for the family with `type` pinned to `'chatbot'`. An author annotating a
|
|
1369
|
+
`chatbot-enhanced` or `chatbot-floating` node either dropped to untyped JSON or
|
|
1370
|
+
annotated with `ChatbotSchema` and lied about `type`; the docs' floating example
|
|
1371
|
+
had to be a `json` fence because no `tsx` fence could compile. The two
|
|
1372
|
+
registrations' real key sets lived in anonymous `ChatbotSchema & { ... }`
|
|
1373
|
+
intersections local to the renderer, referenceable by nothing outside that file.
|
|
1374
|
+
|
|
1375
|
+
## The shape, and why not the smaller diff
|
|
1376
|
+
|
|
1377
|
+
One interface per registration, not `ChatbotSchema['type']` widened to the union
|
|
1378
|
+
of the three keys. The union would give three nodes ONE type and re-open what
|
|
1379
|
+
#6169 closed — a single interface declaring keys only some of its own `type`
|
|
1380
|
+
values read — and this card exists because the family's declarations had already
|
|
1381
|
+
drifted from its reads. Each face declares what ITS registration reads, censused
|
|
1382
|
+
per key on the PR's base (one `schema.KEY` read per registration body in
|
|
1383
|
+
`renderer.tsx`, lit by keys that are NOT shared: `processVisibility` 0 / 1 / 0,
|
|
1384
|
+
`floatingConfig` 0 / 0 / 1), and the twenty keys all three read are picked off
|
|
1385
|
+
`ChatbotSchema` by name (`ChatbotSharedKey`) so they stay one declaration:
|
|
1386
|
+
|
|
1387
|
+
- **`ChatbotEnhancedSchema`** (`type: 'chatbot-enhanced'`): the shared twenty,
|
|
1388
|
+
plus `maxHeight` and `processVisibility` (read here, not by the floating
|
|
1389
|
+
panel), plus `enableMarkdown`, `enableFileUpload`, `surface` (`'card' |
|
|
1390
|
+
'plain'`, objectui#6687) and the `onClear` runtime slot — four keys
|
|
1391
|
+
`ChatbotSchema` never declared.
|
|
1392
|
+
- **`ChatbotFloatingSchema`** (`type: 'chatbot-floating'`): the shared twenty,
|
|
1393
|
+
plus `enableMarkdown`, `enableFileUpload`, `onClear`, and the two keys it
|
|
1394
|
+
declares alongside `ChatbotSchema` — `floatingConfig` (`FloatingChatbotConfig`)
|
|
1395
|
+
and `displayMode`. No `maxHeight`, `processVisibility` or `surface`: the
|
|
1396
|
+
floating registration has no named read for any of them. (At this change its
|
|
1397
|
+
trailing raw props spread still carried authored keys into the panel —
|
|
1398
|
+
`processVisibility`, `surface` and `showAvatars` were live there, measured
|
|
1399
|
+
through the real host — and this face neither declared nor promised that
|
|
1400
|
+
accidental channel, which was tracked on a card of its own. That card has since
|
|
1401
|
+
fenced the spread (`d3499b315`) the way the two sibling registrations do, so those three keys
|
|
1402
|
+
are dark on `chatbot-floating` now; no member this face declares depended on
|
|
1403
|
+
the channel.)
|
|
1404
|
+
- Neither face declares `ChatbotSchema`'s six legacy members (`loading`,
|
|
1405
|
+
`showAvatars`, `userAvatar`, `assistantAvatar`, `markdown`, `height`) — no
|
|
1406
|
+
registration reads them by name — and neither redeclares `disabled`, which
|
|
1407
|
+
stays `BaseSchema`'s `boolean | string` (`c93b4d5f3`).
|
|
1408
|
+
|
|
1409
|
+
**`ChatbotSchema` is unchanged.** It keeps `displayMode` and `floatingConfig`
|
|
1410
|
+
(declarations verbatim), and the floating face declares the same two, so
|
|
1411
|
+
`ChatbotSchema['displayMode']` and `ChatbotSchema['floatingConfig']` stay the
|
|
1412
|
+
typed members they were — the `a3eb5d07a` `triggerIcon` tombstone keeps its
|
|
1413
|
+
reach on `chatbot` nodes, now pinned on the node. `floatingConfig`'s doc comment
|
|
1414
|
+
is rewritten on both faces: the old text said it was "only used when
|
|
1415
|
+
`displayMode` is `'floating'`", which was false — it is read by `chatbot-floating`
|
|
1416
|
+
alone and forwarded to the panel. `displayMode` is RULED RETIRED — objectui#7654,
|
|
1417
|
+
maintainer ruling B (2026-09-05): `?: never` tombstone, designer control and
|
|
1418
|
+
`defaultProps` seed removed, in that card's own change. This change carries the
|
|
1419
|
+
key untouched on both faces (still unmirrored, still read by nothing) so that PR
|
|
1420
|
+
finds the member exactly as ruled, and a tripwire test pins that any value still
|
|
1421
|
+
parses green until that PR flips it.
|
|
1422
|
+
|
|
1423
|
+
**New published symbol:** `ChatbotSharedKey`, the string-literal union of the
|
|
1424
|
+
twenty keys all three registrations read. It is exported from `complex.ts`
|
|
1425
|
+
because an exported interface may not extend a `Pick` over a private name
|
|
1426
|
+
(TS4022), so it is emitted into `dist/complex.d.ts` and is reachable through the
|
|
1427
|
+
published `@object-ui/types/complex` subpath (it is not re-exported from the
|
|
1428
|
+
package entry). It is a census, not an authoring face.
|
|
1429
|
+
|
|
1430
|
+
## Zod twins, in lockstep
|
|
1431
|
+
|
|
1432
|
+
`@object-ui/types/zod` gains `ChatbotEnhancedSchema` and `ChatbotFloatingSchema`
|
|
1433
|
+
(and `ComplexSchema` routes the two new discriminants). Every declared key is an
|
|
1434
|
+
arm except: the three runtime slots (`onError`, `onSend`, `onClear`), refused by
|
|
1435
|
+
name per objectui#6124; and, on the floating twin only, `floatingConfig` (no
|
|
1436
|
+
`FloatingChatbotConfig` mirror exists — minting one is objectui#6152's axis) and
|
|
1437
|
+
`displayMode` (unmirrored on `ChatbotSchema`'s twin too; retired by ruling on
|
|
1438
|
+
objectui#7654 and executed there). The twins mirror the API body params under the
|
|
1439
|
+
key the renderer reads, `requestBody`, and inherit `body` as the children slot —
|
|
1440
|
+
they do not copy `ChatbotSchema`'s `body` naming collision.
|
|
1441
|
+
|
|
1442
|
+
**Accept-set change, stated plainly:** a `chatbot-enhanced` or `chatbot-floating`
|
|
1443
|
+
document parsed through the family's only twin used to fail on `type`; through
|
|
1444
|
+
its own twin it now parses, and the keys the twin declares are VALIDATED where
|
|
1445
|
+
they rode through `.passthrough()` unexamined before (`surface: 'frameless'`,
|
|
1446
|
+
`enableMarkdown: 'yes'` and `requestBody: 'x'` are refused). A `chatbot` node's
|
|
1447
|
+
parse outcome is unchanged: `ChatbotSchema`'s twin did not move.
|
|
1448
|
+
|
|
1449
|
+
## `@object-ui/plugin-chatbot`
|
|
1450
|
+
|
|
1451
|
+
The `chatbot-enhanced` and `chatbot-floating` registrations type `schema` as the
|
|
1452
|
+
published faces and drop the anonymous intersections. One consequence:
|
|
1453
|
+
`chatbot-floating` used to write `disabled={schema.disabled}` and then spread
|
|
1454
|
+
`{...props}` AFTER it — and `SchemaRenderer` always includes `disabled: verdict
|
|
1455
|
+
|| undefined` in those props, so the raw read was overridden on every render.
|
|
1456
|
+
With `disabled` honestly typed as `boolean | string` the raw union cannot be
|
|
1457
|
+
forwarded into the panel's `boolean` prop, so the registration now names the
|
|
1458
|
+
host verdict (`disabled: hostDisabled`) the way its two siblings have since
|
|
1459
|
+
objectui#4431. No render outcome moves; the pin renders through the real host
|
|
1460
|
+
both ways.
|
|
1461
|
+
|
|
1462
|
+
This ships as `minor` for `@object-ui/types` because it widens the published
|
|
1463
|
+
surface with two new node types, two new Zod twins and one new type alias;
|
|
1464
|
+
`ChatbotSchema`'s own accept set does not move: objectui's major is pinned to `@objectstack`'s
|
|
1465
|
+
(`scripts/check-changeset-no-major.mjs`), and objectui's own contract changes
|
|
1466
|
+
ship as `minor` with the semantics spelled out — as above.
|
|
1467
|
+
|
|
1468
|
+
⚠️ **Dated note, 2026-09-27 — the shared census is nineteen keys, not twenty — objectui#5605.**
|
|
1469
|
+
Later in this same release `maxToolRoundtrips` is retired behind a tombstone: no
|
|
1470
|
+
registration reads it, so it leaves `ChatbotSharedKey`, and `ChatbotSchema` declares it
|
|
1471
|
+
instead as a `?: never` member that the other two faces pick by name, refused by name on
|
|
1472
|
+
the zod twins. The "twenty keys" above is kept as the reading of this change; the
|
|
1473
|
+
objectui#5605 retirement entry states what the three faces declare now.
|
|
1474
|
+
|
|
1475
|
+
**Correction, 2026-09-30 (objectui#6152, round 4).** The "Zod twins" section above says the floating twin leaves `floatingConfig` unmirrored because no `FloatingChatbotConfig` mirror exists. That was true when this change was written, and it no longer is: objectui#6152 round 4 minted that mirror and declared `floatingConfig` on the `chatbot-floating` twin, judged member by member. The same round declared `requestBody` on `ChatbotSchema`'s twin, so all three chatbot twins now share one `requestBody` arm. `displayMode` stays unmirrored on both twins, as this entry says.
|
|
1476
|
+
|
|
1477
|
+
**Correction, 2026-10-01 (objectui#6152, round 5).** The section above says `ChatbotSchema` keeps `floatingConfig` as a typed member, so the `triggerIcon` tombstone reaches `chatbot` nodes. That is no longer true: objectui#6152 round 5 retired `ChatbotSchema.floatingConfig` on both faces, because the `chatbot` registration never read it. The member is a `?: never` tombstone on the TypeScript face and a named refusal on the zod twin, so a `chatbot` node refuses the whole key. `ChatbotFloatingSchema.floatingConfig` is unchanged; it never inherited the base member.
|
|
1478
|
+
- e627724: Merge an authored `className` into the floating chat panel instead of replacing it
|
|
1479
|
+
(objectui#8078).
|
|
1480
|
+
|
|
1481
|
+
`<FloatingChatbot>` ended its `<ChatbotEnhanced>` element with a bare
|
|
1482
|
+
`className="h-full border-0 rounded-none"` literal written **after**
|
|
1483
|
+
`{...chatbotProps}`. A later JSX prop always wins over an earlier spread, so the
|
|
1484
|
+
`className` a `chatbot-floating` node authored — correctly forwarded the whole way,
|
|
1485
|
+
since the registration destructures it as its own named prop — was silently
|
|
1486
|
+
replaced. It type-checked, it parsed, and it did nothing to the rendered panel:
|
|
1487
|
+
the styling escape hatch AGENTS.md #3 requires every widget to expose
|
|
1488
|
+
(*"Always expose `className` in schema props so users can override via JSON"*),
|
|
1489
|
+
exposed and inert. Every sibling in this package already merges through `cn()`.
|
|
1490
|
+
|
|
1491
|
+
The three classes are now the panel's **default** fit rather than its property:
|
|
1492
|
+
`cn("h-full border-0 rounded-none", chatbotProps.className)`. This repo's `cn` is
|
|
1493
|
+
`twMerge(clsx(...))`, so the last conflicting utility wins — an author who declares
|
|
1494
|
+
`rounded-xl` or `border-2` on a floating node now gets it, while an author who
|
|
1495
|
+
declares nothing about size still gets the borderless, square, container-filling
|
|
1496
|
+
inner surface the surrounding panel chrome expects. A node that authors no
|
|
1497
|
+
`className` renders exactly the class list it rendered before; that control is
|
|
1498
|
+
pinned beside the fix.
|
|
1499
|
+
|
|
1500
|
+
`maxHeight="100%"`, two lines up, has the identical shape and is **deliberately
|
|
1501
|
+
kept forced** rather than merged — a ruling, recorded in a comment at the line.
|
|
1502
|
+
`ChatbotFloatingSchema` does not declare `maxHeight` and the `chatbot-floating`
|
|
1503
|
+
registration forwards none (that authoring face says the key is "NOT declared, on
|
|
1504
|
+
purpose", for this very reason), so nothing authored is dropped there, while
|
|
1505
|
+
`<ChatbotEnhanced>`'s own `'500px'` default would cap the conversation well inside
|
|
1506
|
+
a panel that can be 800px tall — or the whole viewport in fullscreen.
|
|
1507
|
+
|
|
1508
|
+
The card recorded that it had measured the defect statically and "not yet confirmed
|
|
1509
|
+
through a live render". The pin added here is that render: a `chatbot-floating` node
|
|
1510
|
+
mounted through the real SDUI host, asserting on the rendered panel's own class list
|
|
1511
|
+
— red before the fix, green after, with the panel's own `h-full` still present beside
|
|
1512
|
+
the authored classes.
|
|
1513
|
+
- e5a28b9: A confirm-gate preview no longer counts as the commit that settles the card before it
|
|
1514
|
+
(objectui#8343).
|
|
1515
|
+
|
|
1516
|
+
`builtPlanIds` decided a proposed plan had been built from the tool NAME alone —
|
|
1517
|
+
`tool.toolName === 'apply_blueprint'`. On an iteration turn where the user did not say
|
|
1518
|
+
the magic phrase ("直接搭建" / "just build it"), `apply_blueprint` hits its own
|
|
1519
|
+
confirm gate and returns `{status:'awaiting_confirmation'}`: it built nothing and is
|
|
1520
|
+
itself waiting for the user. That still marked the earlier `propose_blueprint` card
|
|
1521
|
+
已搭建, collapsing its "Build it" button into an inert badge — and the
|
|
1522
|
+
`apply_blueprint` card carries no button of its own, so the turn was left with **no
|
|
1523
|
+
confirm affordance at all** while the assistant's prose asked the user to confirm one.
|
|
1524
|
+
The only way forward was guessing "确认" into the composer.
|
|
1525
|
+
|
|
1526
|
+
A build now only counts when the invocation is not a confirm-gate preview
|
|
1527
|
+
(`!isProposalResult(tool.result)`) — the same fact the tool header already reads to say
|
|
1528
|
+
"Awaiting Approval". A still-running `apply_blueprint` (no result yet) keeps counting,
|
|
1529
|
+
so the objectui#432 guard against re-triggering an in-flight build is unchanged.
|
|
1530
|
+
|
|
1531
|
+
The sibling `confirmedChangeIds` memo carried the same defect one level down: it
|
|
1532
|
+
inferred "this later call committed" from the ABSENCE of a rich `proposedChanges` card,
|
|
1533
|
+
and that detector additionally requires ≥1 parseable change row — so a later same-tool
|
|
1534
|
+
call that WAS a preview but produced no card (an empty `changes: []`) silently settled
|
|
1535
|
+
the pending 确认修改 card. It now reads the preview fact directly too.
|
|
1536
|
+
- bddf1cf: Fold an authored `role: 'tool'` before it seeds the AI SDK store, instead of asserting
|
|
1537
|
+
it away (objectui#8443).
|
|
1538
|
+
|
|
1539
|
+
`useObjectChat`'s `aiInitialMessages` builder wrote `as 'user' | 'assistant' | 'system'`
|
|
1540
|
+
over the role at both of its arms. The authoring contract accepts `role: 'tool'`,
|
|
1541
|
+
`normalizeMessages` deliberately does not narrow it, and `renderer.tsx` passes
|
|
1542
|
+
`schema.messages` straight through as `initialMessages` — so in API mode the store was
|
|
1543
|
+
seeded with a value outside its own union, declared as one of three roles it was not.
|
|
1544
|
+
|
|
1545
|
+
Measured against the real `@ai-sdk/react` 4.0.68 / `ai` 7.0.65 before the change: the
|
|
1546
|
+
client store holds the out-of-union role verbatim — nothing recognises it, nothing
|
|
1547
|
+
renders it distinctly — and the SDK's own downstream entry points then reject it.
|
|
1548
|
+
`convertToModelMessages` throws `AI_MessageConversionError: Unsupported role: tool`, and
|
|
1549
|
+
`validateUIMessages` throws `AI_TypeValidationError` naming `["system","user","assistant"]`
|
|
1550
|
+
at `[0].role`. Both legs were read with an in-union control on the identical shape, which
|
|
1551
|
+
converted and validated cleanly.
|
|
1552
|
+
|
|
1553
|
+
Both arms now call `toRuntimeRole(...)` — the package's single expression of this fold
|
|
1554
|
+
and the named decision of objectui#4399, the same one the render seam already applies:
|
|
1555
|
+
`'tool'` renders as an assistant bubble. **Behaviour change on the API-mode leg**: an
|
|
1556
|
+
authored `'tool'` message now seeds the store as `'assistant'` rather than `'tool'`. Its
|
|
1557
|
+
content, parts and tool invocations are untouched, and the other three roles are
|
|
1558
|
+
unchanged — `'system'` in particular keeps its own role and its centred pill.
|
|
1559
|
+
|
|
1560
|
+
Local mode is deliberately unaffected: an authored `'tool'` role still reaches the hook's
|
|
1561
|
+
own `messages` surface unchanged and is folded only at the render seam, which is what
|
|
1562
|
+
`ObjectChatMessage` is a statement about.
|
|
1563
|
+
|
|
1564
|
+
Deleting the assertions also re-arms the compile-time tripwire the seam was built to
|
|
1565
|
+
provide — `chatMessageAdapter.ts` records that "a new authored `role` makes
|
|
1566
|
+
`toRuntimeRole` unassignable", and an `as` let a future role past these two lines
|
|
1567
|
+
silently.
|
|
1568
|
+
- a78cd37: Dates and numbers across the console and the plugins format in the session's
|
|
1569
|
+
display locale instead of the machine's (objectui#9909).
|
|
1570
|
+
|
|
1571
|
+
Every one of these faces handed `Intl` — directly, or through a formatter called
|
|
1572
|
+
without one — either no locale tag or an explicit `undefined`, which is not "the
|
|
1573
|
+
user's locale": it is the locale of the machine the browser runs on, which is
|
|
1574
|
+
neither of this repository's two locale channels.
|
|
1575
|
+
A German or Spanish session therefore read, beside a translated label, a date or
|
|
1576
|
+
an amount grouped and decimal-marked the machine's way — and an amount with
|
|
1577
|
+
inverted separators does not read as unformatted, it reads as a different
|
|
1578
|
+
number. They now go through `useDisplayLocale()` (tenant regional default, then
|
|
1579
|
+
the active UI language, then `'en'`), and a plain helper takes that tag from its
|
|
1580
|
+
caller. The surfaces:
|
|
1581
|
+
|
|
1582
|
+
- **`@object-ui/fields`** — `GridField`'s numeric and currency cells (list mode
|
|
1583
|
+
and computed columns) and both total cells. The same cell helper's date branch
|
|
1584
|
+
already used the display locale, so a single grid row read two conventions at
|
|
1585
|
+
once.
|
|
1586
|
+
- **`@object-ui/plugin-charts`** — ISO-date x-axis ticks, compact y-axis ticks,
|
|
1587
|
+
the single-value face, spec `format` strings and the tooltip value.
|
|
1588
|
+
- **`@object-ui/app-shell`** — the organization invitations, members and
|
|
1589
|
+
accept-invitation dates; marketplace version dates; the AI conversation row's
|
|
1590
|
+
older-than-a-week date and its tooltip; the build-debug token count; the
|
|
1591
|
+
record approvals timeline; and the metadata-admin audit, history, external
|
|
1592
|
+
datasource snapshot, schema-browser row estimate, flow-run start and job
|
|
1593
|
+
next-fire faces. The audit, history and flow-run panels format these in the
|
|
1594
|
+
DISPLAY locale, not in the `locale` prop they take for their UI strings
|
|
1595
|
+
(`AuditPanel` defaults that prop to `'en-US'`; `HistoryPanel` and
|
|
1596
|
+
`FlowRunsPanel` leave it optional).
|
|
1597
|
+
- **`@object-ui/console`** — the approvals inbox's timestamp tooltips, amounts
|
|
1598
|
+
and payload summary; the audit log's timestamp column; the flow runs table and
|
|
1599
|
+
its run detail.
|
|
1600
|
+
- **`@object-ui/components`** — the export dialog's record counts and the debug
|
|
1601
|
+
panel's event times.
|
|
1602
|
+
- **`@object-ui/plugin-form`** — the analytics submission count, the
|
|
1603
|
+
master-detail subtotal / tax / total stack and the edit-conflict dialog's
|
|
1604
|
+
"their save" time.
|
|
1605
|
+
- **`@object-ui/plugin-chatbot`** — the approvals inbox's past-30-days date and
|
|
1606
|
+
the times stamped on local-mode chat messages (the user's and the
|
|
1607
|
+
auto-response).
|
|
1608
|
+
- **`@object-ui/plugin-dashboard`** — the record-count badge, and the currency
|
|
1609
|
+
and date-format branches of `renderFieldValue`, which was handed the display
|
|
1610
|
+
locale and spent it only on its percent branch.
|
|
1611
|
+
- **`@object-ui/plugin-grid`** — the record-detail panel's inferred currency
|
|
1612
|
+
value and the mobile card's amount line, siblings of date cells already on the
|
|
1613
|
+
display locale.
|
|
1614
|
+
- **`@object-ui/plugin-designer`** — `VersionHistory`'s version times.
|
|
1615
|
+
|
|
1616
|
+
A host that mounts one of the components that newly read the display locale with
|
|
1617
|
+
NO `I18nProvider` now gets react-i18next's once-per-module `NO_I18NEXT_INSTANCE`
|
|
1618
|
+
notice in the console on the first such mount; the faces still render, in the
|
|
1619
|
+
channel's `'en'` last resort, and mounting an `I18nProvider` (as the console
|
|
1620
|
+
does) avoids the notice.
|
|
1621
|
+
|
|
1622
|
+
**Additive API** (nothing that compiled before stops compiling):
|
|
1623
|
+
|
|
1624
|
+
- `@object-ui/types`: `ValidationContext` gains an optional `locale`. At this
|
|
1625
|
+
change, the `@object-ui/core` validation engine prints the `date_min` /
|
|
1626
|
+
`date_max` bound in it; omitted, `Intl` follows the runtime default, as
|
|
1627
|
+
`formatDisplayNumber` already declares for a caller with no locale in hand.
|
|
1628
|
+
|
|
1629
|
+
⚠️ **Dated note, 2026-09-25 — that engine (`ValidationEngine`) is removed from
|
|
1630
|
+
`@object-ui/core` by a later change; `ValidationContext.locale` stays declared in
|
|
1631
|
+
`@object-ui/types`, and at that change nothing in `@object-ui/core` reads it —
|
|
1632
|
+
objectui#7659.**
|
|
1633
|
+
|
|
1634
|
+
⚠️ **Dated note, 2026-09-27 — `ValidationContext` itself is removed from
|
|
1635
|
+
`@object-ui/types` by a later change, with the rest of the Phase 3.5
|
|
1636
|
+
validation types it belonged to, so the `locale` member this entry adds no
|
|
1637
|
+
longer exists — objectui#10719.**
|
|
1638
|
+
- `@object-ui/plugin-report`: `exportReport`, `exportAsHTML` and `exportAsPDF`
|
|
1639
|
+
take a trailing optional `locale` for the exported file's "Generated:" time,
|
|
1640
|
+
and `LiveExportOptions` gains an optional `locale` that `exportWithLiveData`
|
|
1641
|
+
forwards. Omitted, the time uses the display channel's own last resort
|
|
1642
|
+
(`'en'`), never the machine's locale. `ReportViewer` passes the session's
|
|
1643
|
+
display locale. The locale is deliberately NOT a `ReportExportConfig` member:
|
|
1644
|
+
that type is authored report metadata, and a display locale belongs to the
|
|
1645
|
+
session.
|
|
1646
|
+
|
|
1647
|
+
**One census, repository-wide.** `plugin-detail`'s machine-locale census pin
|
|
1648
|
+
(objectui#9786) is now a single test, `machineLocaleCensus-9909.test.ts` in
|
|
1649
|
+
`@object-ui/i18n`, covering every workspace package whose manifest depends on
|
|
1650
|
+
`@object-ui/i18n`. It refuses any call site that passes nothing, `undefined`,
|
|
1651
|
+
the `'default'` pseudo-tag (a subtag no locale data answers, so `Intl` resolves
|
|
1652
|
+
it to the machine's locale) or a hard-coded tag, unless the site is declared
|
|
1653
|
+
with its reason — for example the `catch` fallback for a tag `Intl` itself
|
|
1654
|
+
rejected, or an ISO formatter feeding `<input type="date">`. Each declared site
|
|
1655
|
+
is counted exactly, so deleting one without its entry is refused too. The
|
|
1656
|
+
per-package pin it replaces is deleted. The runtime tripwire that observes the
|
|
1657
|
+
argument each locale-taking call (`Intl` constructors, `Date` and `Number`
|
|
1658
|
+
`toLocale*`) actually receives moved into the private `@object-ui/test-support`
|
|
1659
|
+
package, and every surface above is pinned with it: the same data under two
|
|
1660
|
+
declared locales must render differently, NO locale-taking call may receive the
|
|
1661
|
+
machine's locale (nothing, `undefined` or `'default'`), and the surface's own
|
|
1662
|
+
calls must receive the declared tag. A call carrying another declared tag, such
|
|
1663
|
+
as the `'en'` of the session's UI language, is tolerated by design: only the
|
|
1664
|
+
machine's locale is the defect.
|
|
1665
|
+
- 79a4b8f: Recognize the landed AI quota ledger vocabulary in the chat error path
|
|
1666
|
+
|
|
1667
|
+
`parseAiQuotaError` now accepts the three SCREAMING_SNAKE ledger codes the cloud
|
|
1668
|
+
token guardrail emits (`AI_ALLOWANCE_EXHAUSTED`, `AI_DESIGN_QUOTA_EXHAUSTED`,
|
|
1669
|
+
`AI_DATA_CHAT_TRIAL_EXHAUSTED`) alongside the legacy lowercase trio, which stays
|
|
1670
|
+
readable for producers that have not converged yet. The companion fields
|
|
1671
|
+
(`messageEn` / `upgrade` / `topUp` / `resetsTonight`) are now read from the
|
|
1672
|
+
declared envelope's `error.details` as well as their legacy top-level position,
|
|
1673
|
+
with the declared position winning.
|
|
1674
|
+
|
|
1675
|
+
A quota-exhausted user gets the upgrade / top-up CTA again instead of the
|
|
1676
|
+
generic "Response failed" banner. The per-turn message cap's generic
|
|
1677
|
+
`QUOTA_EXCEEDED` deliberately keeps its existing rate-limit path — it has no
|
|
1678
|
+
upgrade or top-up next step.
|
|
1679
|
+
- cc3366b: The built-moment transition (#5799) now fires on auto-publish environments too: `detectBuiltAppPackage` reads the raw build envelope (`status:'drafted'` OR `'published'`, packageId + an `app` item), because an auto-publish posture rewrites apply_blueprint's envelope to `published` and the drafted-only `draftReview` lift never fired there — measured live on staging, where reopening a built conversation stayed on the full page.
|
|
1680
|
+
- a31adc6: `useObjectChat` no longer rebuilds its `DefaultChatTransport` on every render
|
|
1681
|
+
(objectui#4187).
|
|
1682
|
+
|
|
1683
|
+
The transport `useMemo` listed the caller's `body` and `headers` in its dep list.
|
|
1684
|
+
Both are object props and every caller passes a fresh literal each render — the AI
|
|
1685
|
+
page's chat pane builds its `body.context` inline — so the memo never hit and a
|
|
1686
|
+
transport was constructed on every render of every chat surface, which during a
|
|
1687
|
+
streaming turn is once per token batch.
|
|
1688
|
+
|
|
1689
|
+
`body` and `headers` are now read through refs inside
|
|
1690
|
+
`prepareSendMessagesRequest`, the idiom this hook already uses for the live model
|
|
1691
|
+
(`modelRef`) and the handoff conversation id (`parentConvRef`), and they are gone
|
|
1692
|
+
from the dep list. Unlike memoizing at each call site, a future caller cannot
|
|
1693
|
+
undo it.
|
|
1694
|
+
|
|
1695
|
+
No user-visible behaviour changes: `@ai-sdk/react` keeps the transport in a ref
|
|
1696
|
+
and re-keys its `Chat` only on `chat`/`id` (verified against the installed
|
|
1697
|
+
4.0.68), which `useObjectChat` passes neither of, so the message thread was never
|
|
1698
|
+
at risk — the rebuild was pure waste. The one real difference is *when* the two
|
|
1699
|
+
values are sampled: a send now reads them at send time, so it observes the values
|
|
1700
|
+
of the most recent render instead of those of the last render that happened to
|
|
1701
|
+
rebuild the transport. That is never staler than before, and it is pinned by
|
|
1702
|
+
`useObjectChat.transportIdentity.test.tsx`.
|
|
1703
|
+
- 8ea3bee: fix(plugin-chatbot): localize the build-progress panel, which was an English island (objectui#7388)
|
|
1704
|
+
|
|
1705
|
+
Every label the build panel is HANDED was already localized — the host passes
|
|
1706
|
+
`openBuiltAppLabel`, `designBuiltAppLabel`, `previewDraftLabel` and the three
|
|
1707
|
+
connection cues through its own `t()`. Every string the panel OWNED was a
|
|
1708
|
+
literal in the component, so a fully Chinese conversation watched its app get
|
|
1709
|
+
built under `Building your app…`, over `Objects` / `Views` / `Dashboards` /
|
|
1710
|
+
`App` / `Sample data` row headings — one per row, on every build — and a
|
|
1711
|
+
`+N more` overflow counter.
|
|
1712
|
+
|
|
1713
|
+
All of them now resolve through the console's pack as `chatbot.build.*`, added
|
|
1714
|
+
to all ten locales. Behaviour for a known phase is unchanged in English, and
|
|
1715
|
+
the unknown-artifact-type fallback still renders the raw type rather than a
|
|
1716
|
+
raw i18n key.
|
|
1717
|
+
- fb336df: Move `lucide-react` from `^1.31.0` to `^1.43.0` in every package that declares it, and
|
|
1718
|
+
repair what the jump breaks, so icons resolved from a STRING keep drawing a glyph.
|
|
1719
|
+
|
|
1720
|
+
Measured once against the installed 1.43.0 artifact when this change was made; nothing in
|
|
1721
|
+
the repository re-derives these readings. Across the jump lucide removes no runtime export,
|
|
1722
|
+
no public type name and no `lucide-react/dynamic.mjs` name, and every name this repository
|
|
1723
|
+
imports from `lucide-react` resolves. Exactly one key leaves the runtime `icons` record:
|
|
1724
|
+
`Trash2`, retired in favour of `trash`.
|
|
1725
|
+
|
|
1726
|
+
What a user sees change:
|
|
1727
|
+
|
|
1728
|
+
- Icons the lazy icon seam draws (`resolveIcon`, objectui#9251) get their path data again.
|
|
1729
|
+
lucide 1.43.0 icon modules export their path data inside `__iconData` and no longer
|
|
1730
|
+
export `__iconNode`; the seam now reads both. Reading only `__iconNode` against 1.43.0
|
|
1731
|
+
leaves every such glyph an empty box, with nothing thrown or logged.
|
|
1732
|
+
- `DetailView`'s delete action and three schema-catalog examples spell their icon
|
|
1733
|
+
`trash`, not `trash-2`, so they keep resolving. The glyph is unchanged: 1.43.0's `trash`
|
|
1734
|
+
path data is byte-identical to the `trash-2` path data of 1.31.0 and 1.35.0. Anything
|
|
1735
|
+
that already authored `trash` now draws that same artwork, because lucide moved it under
|
|
1736
|
+
the `trash` name; a few other glyphs were also redrawn upstream.
|
|
1737
|
+
- Icons imported as COMPONENTS carry lucide 1.43.0's own classes: one class per declared
|
|
1738
|
+
alias (a spinner renders `class="lucide lucide-loader-circle lucide-loader-2 ..."`), and
|
|
1739
|
+
no longer the class lucide used to derive from the PascalCase key where that differs
|
|
1740
|
+
(`ArrowDown01` no longer carries `lucide-arrow-down01`). The canonical
|
|
1741
|
+
`lucide-<icon name>` class is still there, so a `.lucide-loader-circle` selector still
|
|
1742
|
+
matches.
|
|
1743
|
+
- Icons resolved from a STRING through the seam keep the classes they had: `lucide`, the
|
|
1744
|
+
canonical `lucide-<icon name>` class and the key-derived class. They do not carry
|
|
1745
|
+
lucide's per-alias classes. That is a maintainer ruling (objectui#8941, option C): the
|
|
1746
|
+
alias list lives only inside each lazily loaded icon module, and it was not moved into
|
|
1747
|
+
the eager name list. A selector that targets an alias class matches a component-imported
|
|
1748
|
+
icon and not a string-resolved one. This also dates the example in the objectui#9251
|
|
1749
|
+
entry: `trash-2` no longer resolves as a string, so no seam-drawn glyph carries
|
|
1750
|
+
`lucide-trash2 lucide-trash-2`; a digit-bearing name that still resolves, such as
|
|
1751
|
+
`arrow-down-0-1`, carries `lucide-arrow-down01 lucide-arrow-down-0-1`.
|
|
1752
|
+
- 0fce2ef: `maxToolRoundtrips` on `ChatbotSchema` is deprecated: it is inert, and an author
|
|
1753
|
+
who sets it is now told so instead of being left believing the documented cap
|
|
1754
|
+
applies (objectui#5605).
|
|
1755
|
+
|
|
1756
|
+
The key was declared authorable in `@object-ui/types` (interface and zod, with a
|
|
1757
|
+
description), threaded from the authored document through the chatbot renderer at
|
|
1758
|
+
three call sites, accepted by `useObjectChat`, given a default — and then dropped.
|
|
1759
|
+
Measuring the installed chat runtime says it cannot be honoured from here rather
|
|
1760
|
+
than that someone forgot to wire it: `@ai-sdk/react`'s `useChat` takes `ChatInit`
|
|
1761
|
+
plus throttle/resume, and `ChatInit` declares exactly one loop control — the
|
|
1762
|
+
boolean predicate `sendAutomaticallyWhen` — and no numeric cap under any
|
|
1763
|
+
spelling. The numeric knob was removed from `useChat` in a major, and its
|
|
1764
|
+
successor was renamed through `continueUntil` to `stopWhen` / `stepCountIs`,
|
|
1765
|
+
which the installed `ai` package declares only on `generateText`, `streamText`
|
|
1766
|
+
and the tool-loop agent settings — all server-side. ObjectUI is backend-agnostic,
|
|
1767
|
+
so it owns no server loop to cap either, and putting the number in the request
|
|
1768
|
+
body would only move the same dead key one hop onto a wire contract no backend
|
|
1769
|
+
reads.
|
|
1770
|
+
|
|
1771
|
+
This is stage one of a two-stage retirement, so nothing an author already wrote
|
|
1772
|
+
breaks: the key still parses, still carries its declared shape, and the renderer
|
|
1773
|
+
still threads it. What changes is that it is now marked `@deprecated` in the
|
|
1774
|
+
interface, the zod description and the docs, and that authoring it logs a
|
|
1775
|
+
one-time notice naming the knob that does work — `planning.maxIterations` on the
|
|
1776
|
+
agent. A follow-up removes the declaration once this deprecation has shipped in a
|
|
1777
|
+
release.
|
|
1778
|
+
|
|
1779
|
+
⚠️ **Dated note, 2026-09-27 — the key is retired behind a tombstone, not staged for removal — objectui#5605.**
|
|
1780
|
+
This deprecation never shipped: it was still a pending changeset when the seat ruled
|
|
1781
|
+
arm A on the card, so no release carries the "deprecated, still accepted" state this entry
|
|
1782
|
+
describes. Later in this same release `maxToolRoundtrips` is refused by name on all three
|
|
1783
|
+
chat nodes, the one-time notice and the renderer pass-throughs are gone, and the key is no
|
|
1784
|
+
longer an option of `useObjectChat`. The rest of this entry is kept as the reading of this
|
|
1785
|
+
change; the objectui#5605 retirement entry states what an author gets now.
|
|
1786
|
+
- a392e1c: 「打开这条记录 →」卡片——ask 的记录交接终于有了客户端的另一半
|
|
1787
|
+
|
|
1788
|
+
服务端半边(cloud#1659 的 `open_record`)先落了地,实测发现它是**半活的**:agent 发出
|
|
1789
|
+
`status:'record_handoff'`、回答说「点击上方链接打开」,而上方根本没有链接——控制台
|
|
1790
|
+
有 `build_handoff` 的探测器,这个状态一处都不认识,信号被原样丢弃。
|
|
1791
|
+
|
|
1792
|
+
按五步补齐:`detectRecordHandoff`(含持久化 `{type:'text',value}` 包裹形状——replay
|
|
1793
|
+
信封那课的规矩)→ live 映射提升 → 水合提升 → 卡片渲染 → 宿主回调。
|
|
1794
|
+
|
|
1795
|
+
两个设计点:
|
|
1796
|
+
|
|
1797
|
+
- **app 段点击时现场解析**。记录路由要 `/apps/:app/:object/record/:id`,交接载荷只有
|
|
1798
|
+
对象和记录 id;宿主回调用一次同源元数据读取 `_packageId` 再导航,不给 agent 增加
|
|
1799
|
+
它未必知道的参数。
|
|
1800
|
+
- **刻意不做「被取代」置灰**。builder 卡的旧 prompt 会过时,旧的记录链接不会——记录
|
|
1801
|
+
不因为有新交接而失效。
|
|
1802
|
+
|
|
1803
|
+
真机闭环验证:问「把《沉默的大多数》标记成已读」→ 卡片渲染
|
|
1804
|
+
(`沉默的大多数 — 把阅读状态改为已读`)→ 点击 → 落在
|
|
1805
|
+
`/apps/app.hdke/hdke_book/record/<id>` 详情页,「编辑」在手边。
|
|
1806
|
+
|
|
1807
|
+
缺任一 id 的交接在探测器就被丢弃,与服务端的拒绝对称——指向空处的卡片比散文更糟。
|
|
1808
|
+
- ad404e0: Confirm-replay dispatch errors (bare `{error: …}` envelopes) now resolve the 确认修改 card instead of leaving it on 应用中 forever: `detectReplayOutcome` classifies them as a provisional failure, and a later successful authoring result in the same turn (the model self-repairing, e.g. after an `object not found` on a blueprint-local name) supersedes it via `detectAuthoringVerdict` — so the card never says 未生效 over a change that actually landed. Real publish failures (`publishFailed` envelopes) are never superseded. Measured live on the local rig, 2026-08-24.
|
|
1809
|
+
- eddc1dd: The Studio copilot tells the agent WHAT the user is discussing (cloud#1610 send half): `ChatPane` accepts a `surfaceContext` and sends it as `context.surface` on every turn (the transport reads the body per send, so it stays fresh); the Studio copilot derives it from the URL alone — the `:tab` pillar segment plus the `?surface=type:name` deep-link the pillars already mirror, so the artifact carries its type discriminator (page/object/dashboard/report). A display chip above the composer (「正在讨论:…」, new `console.ai.discussing` key in all ten packs) makes the sent context visible instead of invisible grounding.
|
|
1810
|
+
- 9a9977c: 工具卡片的名字终于有了 i18n 通道(此前中文界面里必然是英文)
|
|
1811
|
+
|
|
1812
|
+
实测(cloud#1658,全中文环境):
|
|
1813
|
+
|
|
1814
|
+
```
|
|
1815
|
+
统计一下每个阅读状态各有多少本书
|
|
1816
|
+
Describe object 已完成 执行过程 ← 工具名英文
|
|
1817
|
+
Visualize data 已完成 执行过程 ← 工具名英文
|
|
1818
|
+
已统计完成,各阅读状态的书本数量如下:… ← 其余全中文
|
|
1819
|
+
```
|
|
1820
|
+
|
|
1821
|
+
卡片上每一处都本地化了——状态、动作、回答——**唯独工具名不能**,因为
|
|
1822
|
+
`humanizeToolName` 是个纯英文构词器(`describe_object` → `Describe object`),
|
|
1823
|
+
名字从未经过翻译,任何语言包都够不着它。而"它现在在做什么"恰恰是用户最需要读懂的一步。
|
|
1824
|
+
|
|
1825
|
+
现在它接受一个可选的 `translate`(形状即 `useSafeTranslate()`),按
|
|
1826
|
+
`chatbot.tool.<tool_name>` 查;查不到就回落到与今天完全一致的英文标题。
|
|
1827
|
+
|
|
1828
|
+
**这一步只打通通道,不改变任何现有显示**:不传 translate 时行为逐字不变(测试的第一组
|
|
1829
|
+
就在钉这一点),语言包也还没有条目。后续两件事各自独立、可分别推进:
|
|
1830
|
+
把两个调用点接上 `useSafeTranslate()`;以及按需往语言包里补 `chatbot.tool.*`。
|
|
1831
|
+
先落通道是因为——在通道存在之前,翻译工作根本无处可放。
|
|
1832
|
+
|
|
1833
|
+
回落刻意交给英文标题而非原始名:语言包缺条目时显示 `Describe object`(与今天相同),
|
|
1834
|
+
而不是 `describe_object`(比今天更差)。
|
|
1835
|
+
- Updated dependencies [7b10bef]
|
|
1836
|
+
- Updated dependencies [97abedc]
|
|
1837
|
+
- Updated dependencies [b46c58f]
|
|
1838
|
+
- Updated dependencies [a507334]
|
|
1839
|
+
- Updated dependencies [ad694ac]
|
|
1840
|
+
- Updated dependencies [6f96fca]
|
|
1841
|
+
- Updated dependencies [afb2284]
|
|
1842
|
+
- Updated dependencies [3ac2de8]
|
|
1843
|
+
- Updated dependencies [0aacecc]
|
|
1844
|
+
- Updated dependencies [63f4f92]
|
|
1845
|
+
- Updated dependencies [777fca2]
|
|
1846
|
+
- Updated dependencies [c131d9e]
|
|
1847
|
+
- Updated dependencies [5f00ff4]
|
|
1848
|
+
- Updated dependencies [c9e073a]
|
|
1849
|
+
- Updated dependencies [7b395d8]
|
|
1850
|
+
- Updated dependencies [0879812]
|
|
1851
|
+
- Updated dependencies [8cedb0d]
|
|
1852
|
+
- Updated dependencies [162621b]
|
|
1853
|
+
- Updated dependencies [4c6f549]
|
|
1854
|
+
- Updated dependencies [6cc910b]
|
|
1855
|
+
- Updated dependencies [061f5e8]
|
|
1856
|
+
- Updated dependencies [2dd4d3f]
|
|
1857
|
+
- Updated dependencies [e686f4d]
|
|
1858
|
+
- Updated dependencies [4ab4f1b]
|
|
1859
|
+
- Updated dependencies [b57107d]
|
|
1860
|
+
- Updated dependencies [e3ea4f9]
|
|
1861
|
+
- Updated dependencies [bb5d4ee]
|
|
1862
|
+
- Updated dependencies [dc666f7]
|
|
1863
|
+
- Updated dependencies [3335767]
|
|
1864
|
+
- Updated dependencies [8b1f066]
|
|
1865
|
+
- Updated dependencies [af243c1]
|
|
1866
|
+
- Updated dependencies [cff4b77]
|
|
1867
|
+
- Updated dependencies [961ceaa]
|
|
1868
|
+
- Updated dependencies [f3f4e4c]
|
|
1869
|
+
- Updated dependencies [a05c350]
|
|
1870
|
+
- Updated dependencies [1dbb993]
|
|
1871
|
+
- Updated dependencies [2b5f509]
|
|
1872
|
+
- Updated dependencies [808f339]
|
|
1873
|
+
- Updated dependencies [6cf5999]
|
|
1874
|
+
- Updated dependencies [274e14a]
|
|
1875
|
+
- Updated dependencies [8c10f4f]
|
|
1876
|
+
- Updated dependencies [90dac98]
|
|
1877
|
+
- Updated dependencies [6096f20]
|
|
1878
|
+
- Updated dependencies [544aca2]
|
|
1879
|
+
- Updated dependencies [ea02938]
|
|
1880
|
+
- Updated dependencies [a14fb23]
|
|
1881
|
+
- Updated dependencies [ae98f1d]
|
|
1882
|
+
- Updated dependencies [f98eddf]
|
|
1883
|
+
- Updated dependencies [ce6bd99]
|
|
1884
|
+
- Updated dependencies [a5b08c9]
|
|
1885
|
+
- Updated dependencies [86982ac]
|
|
1886
|
+
- Updated dependencies [cdefa2a]
|
|
1887
|
+
- Updated dependencies [0961d5e]
|
|
1888
|
+
- Updated dependencies [6276478]
|
|
1889
|
+
- Updated dependencies [5e67837]
|
|
1890
|
+
- Updated dependencies [ff14e29]
|
|
1891
|
+
- Updated dependencies [9b28151]
|
|
1892
|
+
- Updated dependencies [64563a9]
|
|
1893
|
+
- Updated dependencies [1a5003f]
|
|
1894
|
+
- Updated dependencies [09ab32b]
|
|
1895
|
+
- Updated dependencies [8acc51b]
|
|
1896
|
+
- Updated dependencies [ea9d17f]
|
|
1897
|
+
- Updated dependencies [45362a3]
|
|
1898
|
+
- Updated dependencies [2a943bf]
|
|
1899
|
+
- Updated dependencies [93a689d]
|
|
1900
|
+
- Updated dependencies [4357a27]
|
|
1901
|
+
- Updated dependencies [e5f4343]
|
|
1902
|
+
- Updated dependencies [3261e64]
|
|
1903
|
+
- Updated dependencies [f5178a2]
|
|
1904
|
+
- Updated dependencies [2ad3671]
|
|
1905
|
+
- Updated dependencies [8740e86]
|
|
1906
|
+
- Updated dependencies [d22b37b]
|
|
1907
|
+
- Updated dependencies [1daf477]
|
|
1908
|
+
- Updated dependencies [3d614ea]
|
|
1909
|
+
- Updated dependencies [6c2f3c5]
|
|
1910
|
+
- Updated dependencies [fb13e85]
|
|
1911
|
+
- Updated dependencies [c2d8659]
|
|
1912
|
+
- Updated dependencies [e0f8202]
|
|
1913
|
+
- Updated dependencies [ac2d6f1]
|
|
1914
|
+
- Updated dependencies [9fbbb17]
|
|
1915
|
+
- Updated dependencies [c3a26cc]
|
|
1916
|
+
- Updated dependencies [a66e58e]
|
|
1917
|
+
- Updated dependencies [d89492c]
|
|
1918
|
+
- Updated dependencies [9a5f998]
|
|
1919
|
+
- Updated dependencies [9327397]
|
|
1920
|
+
- Updated dependencies [17cc3a3]
|
|
1921
|
+
- Updated dependencies [02e6d36]
|
|
1922
|
+
- Updated dependencies [4758b33]
|
|
1923
|
+
- Updated dependencies [4758b33]
|
|
1924
|
+
- Updated dependencies [f905090]
|
|
1925
|
+
- Updated dependencies [9c78ebe]
|
|
1926
|
+
- Updated dependencies [9c78ebe]
|
|
1927
|
+
- Updated dependencies [12809a5]
|
|
1928
|
+
- Updated dependencies [7afc81d]
|
|
1929
|
+
- Updated dependencies [f9c06ef]
|
|
1930
|
+
- Updated dependencies [5ad3b88]
|
|
1931
|
+
- Updated dependencies [f9d772b]
|
|
1932
|
+
- Updated dependencies [97b6c21]
|
|
1933
|
+
- Updated dependencies [26ca2ad]
|
|
1934
|
+
- Updated dependencies [41ae65b]
|
|
1935
|
+
- Updated dependencies [baac95a]
|
|
1936
|
+
- Updated dependencies [13220af]
|
|
1937
|
+
- Updated dependencies [29b45f6]
|
|
1938
|
+
- Updated dependencies [39b8d51]
|
|
1939
|
+
- Updated dependencies [17b323e]
|
|
1940
|
+
- Updated dependencies [b956e69]
|
|
1941
|
+
- Updated dependencies [33e58d8]
|
|
1942
|
+
- Updated dependencies [256b4c9]
|
|
1943
|
+
- Updated dependencies [c5ec15c]
|
|
1944
|
+
- Updated dependencies [fec3b1a]
|
|
1945
|
+
- Updated dependencies [b8e0941]
|
|
1946
|
+
- Updated dependencies [0c50f18]
|
|
1947
|
+
- Updated dependencies [1dae95a]
|
|
1948
|
+
- Updated dependencies [e32dae1]
|
|
1949
|
+
- Updated dependencies [30b11ad]
|
|
1950
|
+
- Updated dependencies [4aebea0]
|
|
1951
|
+
- Updated dependencies [f976774]
|
|
1952
|
+
- Updated dependencies [3d6badf]
|
|
1953
|
+
- Updated dependencies [25cb364]
|
|
1954
|
+
- Updated dependencies [a60539b]
|
|
1955
|
+
- Updated dependencies [de1b879]
|
|
1956
|
+
- Updated dependencies [c6678b1]
|
|
1957
|
+
- Updated dependencies [0638322]
|
|
1958
|
+
- Updated dependencies [e3782d2]
|
|
1959
|
+
- Updated dependencies [db0beb2]
|
|
1960
|
+
- Updated dependencies [997ce38]
|
|
1961
|
+
- Updated dependencies [ae0b9d3]
|
|
1962
|
+
- Updated dependencies [ad1785c]
|
|
1963
|
+
- Updated dependencies [3b469c8]
|
|
1964
|
+
- Updated dependencies [990a2d6]
|
|
1965
|
+
- Updated dependencies [1c84036]
|
|
1966
|
+
- Updated dependencies [1c84036]
|
|
1967
|
+
- Updated dependencies [6650259]
|
|
1968
|
+
- Updated dependencies [4f8b7f8]
|
|
1969
|
+
- Updated dependencies [9e6619f]
|
|
1970
|
+
- Updated dependencies [f6ae5e2]
|
|
1971
|
+
- Updated dependencies [eb97ce6]
|
|
1972
|
+
- Updated dependencies [7343376]
|
|
1973
|
+
- Updated dependencies [b2683a2]
|
|
1974
|
+
- Updated dependencies [dded788]
|
|
1975
|
+
- Updated dependencies [b45d463]
|
|
1976
|
+
- Updated dependencies [54a7830]
|
|
1977
|
+
- Updated dependencies [f3135a4]
|
|
1978
|
+
- Updated dependencies [b5696d3]
|
|
1979
|
+
- Updated dependencies [3f9d926]
|
|
1980
|
+
- Updated dependencies [e978ed5]
|
|
1981
|
+
- Updated dependencies [6a7f24e]
|
|
1982
|
+
- Updated dependencies [b3c96d6]
|
|
1983
|
+
- Updated dependencies [8d0ca91]
|
|
1984
|
+
- Updated dependencies [c30c8dd]
|
|
1985
|
+
- Updated dependencies [244d516]
|
|
1986
|
+
- Updated dependencies [deca847]
|
|
1987
|
+
- Updated dependencies [ac15833]
|
|
1988
|
+
- Updated dependencies [ac15833]
|
|
1989
|
+
- Updated dependencies [e2dffc9]
|
|
1990
|
+
- Updated dependencies [328abeb]
|
|
1991
|
+
- Updated dependencies [dd0d78f]
|
|
1992
|
+
- Updated dependencies [24d3e65]
|
|
1993
|
+
- Updated dependencies [95a7c8d]
|
|
1994
|
+
- Updated dependencies [e227156]
|
|
1995
|
+
- Updated dependencies [cc4e476]
|
|
1996
|
+
- Updated dependencies [92970c4]
|
|
1997
|
+
- Updated dependencies [d570eaa]
|
|
1998
|
+
- Updated dependencies [4b742f4]
|
|
1999
|
+
- Updated dependencies [42687ba]
|
|
2000
|
+
- Updated dependencies [6cd8f66]
|
|
2001
|
+
- Updated dependencies [24a0f14]
|
|
2002
|
+
- Updated dependencies [797a30f]
|
|
2003
|
+
- Updated dependencies [b4075c0]
|
|
2004
|
+
- Updated dependencies [9b85600]
|
|
2005
|
+
- Updated dependencies [e327c89]
|
|
2006
|
+
- Updated dependencies [2eaf5be]
|
|
2007
|
+
- Updated dependencies [bf7ab35]
|
|
2008
|
+
- Updated dependencies [99878d8]
|
|
2009
|
+
- Updated dependencies [3c13675]
|
|
2010
|
+
- Updated dependencies [63ab761]
|
|
2011
|
+
- Updated dependencies [0eb9f36]
|
|
2012
|
+
- Updated dependencies [ae582b7]
|
|
2013
|
+
- Updated dependencies [51c2949]
|
|
2014
|
+
- Updated dependencies [a4b017e]
|
|
2015
|
+
- Updated dependencies [8732846]
|
|
2016
|
+
- Updated dependencies [559a2e2]
|
|
2017
|
+
- Updated dependencies [db11afd]
|
|
2018
|
+
- Updated dependencies [154075a]
|
|
2019
|
+
- Updated dependencies [582edef]
|
|
2020
|
+
- Updated dependencies [19f484f]
|
|
2021
|
+
- Updated dependencies [0a78a20]
|
|
2022
|
+
- Updated dependencies [615346d]
|
|
2023
|
+
- Updated dependencies [75dcc81]
|
|
2024
|
+
- Updated dependencies [55a12a8]
|
|
2025
|
+
- Updated dependencies [edfcf5a]
|
|
2026
|
+
- Updated dependencies [0a3e540]
|
|
2027
|
+
- Updated dependencies [c021b35]
|
|
2028
|
+
- Updated dependencies [f61dab1]
|
|
2029
|
+
- Updated dependencies [b0a05dd]
|
|
2030
|
+
- Updated dependencies [dd5ff19]
|
|
2031
|
+
- Updated dependencies [54997ff]
|
|
2032
|
+
- Updated dependencies [81f8498]
|
|
2033
|
+
- Updated dependencies [a782fa7]
|
|
2034
|
+
- Updated dependencies [1d6a23d]
|
|
2035
|
+
- Updated dependencies [0645133]
|
|
2036
|
+
- Updated dependencies [76e9df0]
|
|
2037
|
+
- Updated dependencies [0ecaa7d]
|
|
2038
|
+
- Updated dependencies [b24f93a]
|
|
2039
|
+
- Updated dependencies [6158e4c]
|
|
2040
|
+
- Updated dependencies [cff8641]
|
|
2041
|
+
- Updated dependencies [c27b575]
|
|
2042
|
+
- Updated dependencies [84b275c]
|
|
2043
|
+
- Updated dependencies [0e6e76b]
|
|
2044
|
+
- Updated dependencies [bf43afa]
|
|
2045
|
+
- Updated dependencies [385ebc5]
|
|
2046
|
+
- Updated dependencies [858eafb]
|
|
2047
|
+
- Updated dependencies [a8c5509]
|
|
2048
|
+
- Updated dependencies [c2a8d23]
|
|
2049
|
+
- Updated dependencies [0ffc423]
|
|
2050
|
+
- Updated dependencies [3cc4fe5]
|
|
2051
|
+
- Updated dependencies [cd5b19a]
|
|
2052
|
+
- Updated dependencies [cd5b19a]
|
|
2053
|
+
- Updated dependencies [17dc167]
|
|
2054
|
+
- Updated dependencies [20d23be]
|
|
2055
|
+
- Updated dependencies [20d23be]
|
|
2056
|
+
- Updated dependencies [2e3da72]
|
|
2057
|
+
- Updated dependencies [1263e40]
|
|
2058
|
+
- Updated dependencies [e6bc087]
|
|
2059
|
+
- Updated dependencies [9419df1]
|
|
2060
|
+
- Updated dependencies [8bab157]
|
|
2061
|
+
- Updated dependencies [a7557a7]
|
|
2062
|
+
- Updated dependencies [7d074ba]
|
|
2063
|
+
- Updated dependencies [6158e4c]
|
|
2064
|
+
- Updated dependencies [6158e4c]
|
|
2065
|
+
- Updated dependencies [52aad5c]
|
|
2066
|
+
- Updated dependencies [18d1a0a]
|
|
2067
|
+
- Updated dependencies [7fed09d]
|
|
2068
|
+
- Updated dependencies [58da8ae]
|
|
2069
|
+
- Updated dependencies [a8b9889]
|
|
2070
|
+
- Updated dependencies [138ad45]
|
|
2071
|
+
- Updated dependencies [138ad45]
|
|
2072
|
+
- Updated dependencies [5262f7d]
|
|
2073
|
+
- Updated dependencies [6aa029b]
|
|
2074
|
+
- Updated dependencies [2124d04]
|
|
2075
|
+
- Updated dependencies [be52115]
|
|
2076
|
+
- Updated dependencies [770cc5b]
|
|
2077
|
+
- Updated dependencies [1a88ce2]
|
|
2078
|
+
- Updated dependencies [a1a44d6]
|
|
2079
|
+
- Updated dependencies [e0a9c67]
|
|
2080
|
+
- Updated dependencies [5638529]
|
|
2081
|
+
- Updated dependencies [5638529]
|
|
2082
|
+
- Updated dependencies [d0fba91]
|
|
2083
|
+
- Updated dependencies [c476be0]
|
|
2084
|
+
- Updated dependencies [c82ff39]
|
|
2085
|
+
- Updated dependencies [6c3da53]
|
|
2086
|
+
- Updated dependencies [31987bd]
|
|
2087
|
+
- Updated dependencies [3c3ce15]
|
|
2088
|
+
- Updated dependencies [063119f]
|
|
2089
|
+
- Updated dependencies [e100589]
|
|
2090
|
+
- Updated dependencies [304f611]
|
|
2091
|
+
- Updated dependencies [e46ee77]
|
|
2092
|
+
- Updated dependencies [f9c8c4e]
|
|
2093
|
+
- Updated dependencies [6e9c8d2]
|
|
2094
|
+
- Updated dependencies [9547063]
|
|
2095
|
+
- Updated dependencies [3f6efd6]
|
|
2096
|
+
- Updated dependencies [55d18c6]
|
|
2097
|
+
- Updated dependencies [c4ab6d0]
|
|
2098
|
+
- Updated dependencies [0e9058b]
|
|
2099
|
+
- Updated dependencies [c4ab6d0]
|
|
2100
|
+
- Updated dependencies [5988b6b]
|
|
2101
|
+
- Updated dependencies [6158e4c]
|
|
2102
|
+
- Updated dependencies [00ccdf7]
|
|
2103
|
+
- Updated dependencies [9d9ed54]
|
|
2104
|
+
- Updated dependencies [4a1adb7]
|
|
2105
|
+
- Updated dependencies [4a1adb7]
|
|
2106
|
+
- Updated dependencies [50c73fe]
|
|
2107
|
+
- Updated dependencies [ca3de72]
|
|
2108
|
+
- Updated dependencies [83e3f83]
|
|
2109
|
+
- Updated dependencies [401611b]
|
|
2110
|
+
- Updated dependencies [2c0ddf2]
|
|
2111
|
+
- Updated dependencies [4abc0aa]
|
|
2112
|
+
- Updated dependencies [f560ded]
|
|
2113
|
+
- Updated dependencies [2b188fa]
|
|
2114
|
+
- Updated dependencies [b654d4e]
|
|
2115
|
+
- Updated dependencies [f68e0a0]
|
|
2116
|
+
- Updated dependencies [aea682a]
|
|
2117
|
+
- Updated dependencies [fcdc8ec]
|
|
2118
|
+
- Updated dependencies [2d576e4]
|
|
2119
|
+
- Updated dependencies [8366acc]
|
|
2120
|
+
- Updated dependencies [95e58a3]
|
|
2121
|
+
- Updated dependencies [9d7419b]
|
|
2122
|
+
- Updated dependencies [fc7db05]
|
|
2123
|
+
- Updated dependencies [9ed8d0f]
|
|
2124
|
+
- Updated dependencies [c73cdb5]
|
|
2125
|
+
- Updated dependencies [6f5719e]
|
|
2126
|
+
- Updated dependencies [d0097af]
|
|
2127
|
+
- Updated dependencies [432882b]
|
|
2128
|
+
- Updated dependencies [64dae8e]
|
|
2129
|
+
- Updated dependencies [b06e374]
|
|
2130
|
+
- Updated dependencies [06a8af5]
|
|
2131
|
+
- Updated dependencies [6a91586]
|
|
2132
|
+
- Updated dependencies [a04d7c6]
|
|
2133
|
+
- Updated dependencies [5ccc500]
|
|
2134
|
+
- Updated dependencies [f3c2bb0]
|
|
2135
|
+
- Updated dependencies [978507b]
|
|
2136
|
+
- Updated dependencies [778138e]
|
|
2137
|
+
- Updated dependencies [9801765]
|
|
2138
|
+
- Updated dependencies [9cebfca]
|
|
2139
|
+
- Updated dependencies [460575f]
|
|
2140
|
+
- Updated dependencies [d796c8d]
|
|
2141
|
+
- Updated dependencies [594704f]
|
|
2142
|
+
- Updated dependencies [d3995fe]
|
|
2143
|
+
- Updated dependencies [1b1d772]
|
|
2144
|
+
- Updated dependencies [d88e20f]
|
|
2145
|
+
- Updated dependencies [2d7304d]
|
|
2146
|
+
- Updated dependencies [636b236]
|
|
2147
|
+
- Updated dependencies [4172589]
|
|
2148
|
+
- Updated dependencies [d6d8fb9]
|
|
2149
|
+
- Updated dependencies [64d624d]
|
|
2150
|
+
- Updated dependencies [053fdc8]
|
|
2151
|
+
- Updated dependencies [41b7ce3]
|
|
2152
|
+
- Updated dependencies [ae476b8]
|
|
2153
|
+
- Updated dependencies [39f4309]
|
|
2154
|
+
- Updated dependencies [95bad12]
|
|
2155
|
+
- Updated dependencies [d2fb6ef]
|
|
2156
|
+
- Updated dependencies [7cd3987]
|
|
2157
|
+
- Updated dependencies [ee3b878]
|
|
2158
|
+
- Updated dependencies [e304a4e]
|
|
2159
|
+
- Updated dependencies [fda49e5]
|
|
2160
|
+
- Updated dependencies [490d9a9]
|
|
2161
|
+
- Updated dependencies [fc62bb4]
|
|
2162
|
+
- Updated dependencies [41df893]
|
|
2163
|
+
- Updated dependencies [0cba1b7]
|
|
2164
|
+
- Updated dependencies [00f3eb5]
|
|
2165
|
+
- Updated dependencies [1ec291c]
|
|
2166
|
+
- Updated dependencies [453dbaa]
|
|
2167
|
+
- Updated dependencies [95f8704]
|
|
2168
|
+
- Updated dependencies [f8cdbf2]
|
|
2169
|
+
- Updated dependencies [69a2163]
|
|
2170
|
+
- Updated dependencies [24e027e]
|
|
2171
|
+
- Updated dependencies [2c3cd1b]
|
|
2172
|
+
- Updated dependencies [e176053]
|
|
2173
|
+
- Updated dependencies [e30ed15]
|
|
2174
|
+
- Updated dependencies [90665e0]
|
|
2175
|
+
- Updated dependencies [8d3a529]
|
|
2176
|
+
- Updated dependencies [5ac2e2c]
|
|
2177
|
+
- Updated dependencies [194fae1]
|
|
2178
|
+
- Updated dependencies [7e19d03]
|
|
2179
|
+
- Updated dependencies [b08b7eb]
|
|
2180
|
+
- Updated dependencies [1e946c9]
|
|
2181
|
+
- Updated dependencies [546ddf7]
|
|
2182
|
+
- Updated dependencies [864154e]
|
|
2183
|
+
- Updated dependencies [b023625]
|
|
2184
|
+
- Updated dependencies [75bd83d]
|
|
2185
|
+
- Updated dependencies [44d075b]
|
|
2186
|
+
- Updated dependencies [40c479a]
|
|
2187
|
+
- Updated dependencies [971d387]
|
|
2188
|
+
- Updated dependencies [ee851c3]
|
|
2189
|
+
- Updated dependencies [6414dfd]
|
|
2190
|
+
- Updated dependencies [a8d5c71]
|
|
2191
|
+
- Updated dependencies [905b21f]
|
|
2192
|
+
- Updated dependencies [88e9109]
|
|
2193
|
+
- Updated dependencies [2c45966]
|
|
2194
|
+
- Updated dependencies [db3a600]
|
|
2195
|
+
- Updated dependencies [3a3db76]
|
|
2196
|
+
- Updated dependencies [0d723a3]
|
|
2197
|
+
- Updated dependencies [0c95d3d]
|
|
2198
|
+
- Updated dependencies [3e4fa2c]
|
|
2199
|
+
- Updated dependencies [b5b928a]
|
|
2200
|
+
- Updated dependencies [6fd2cf7]
|
|
2201
|
+
- Updated dependencies [5fa06c4]
|
|
2202
|
+
- Updated dependencies [52a43de]
|
|
2203
|
+
- Updated dependencies [195052f]
|
|
2204
|
+
- Updated dependencies [e4559d1]
|
|
2205
|
+
- Updated dependencies [2c71482]
|
|
2206
|
+
- Updated dependencies [129bcc5]
|
|
2207
|
+
- Updated dependencies [a26b9e4]
|
|
2208
|
+
- Updated dependencies [5ef9c4f]
|
|
2209
|
+
- Updated dependencies [46f0bb4]
|
|
2210
|
+
- Updated dependencies [06b82b8]
|
|
2211
|
+
- Updated dependencies [8ec11e1]
|
|
2212
|
+
- Updated dependencies [6f81384]
|
|
2213
|
+
- Updated dependencies [22ba927]
|
|
2214
|
+
- Updated dependencies [f8c70f4]
|
|
2215
|
+
- Updated dependencies [5d3a2d1]
|
|
2216
|
+
- Updated dependencies [8f1d995]
|
|
2217
|
+
- Updated dependencies [b362c1b]
|
|
2218
|
+
- Updated dependencies [f9c34df]
|
|
2219
|
+
- Updated dependencies [dddb942]
|
|
2220
|
+
- Updated dependencies [00c665e]
|
|
2221
|
+
- Updated dependencies [29754cf]
|
|
2222
|
+
- Updated dependencies [d7de534]
|
|
2223
|
+
- Updated dependencies [3c2b6f7]
|
|
2224
|
+
- Updated dependencies [6e88630]
|
|
2225
|
+
- Updated dependencies [b84dc18]
|
|
2226
|
+
- Updated dependencies [ac8abb0]
|
|
2227
|
+
- Updated dependencies [9d86e1d]
|
|
2228
|
+
- Updated dependencies [3a5817f]
|
|
2229
|
+
- Updated dependencies [99a3c2d]
|
|
2230
|
+
- Updated dependencies [5961030]
|
|
2231
|
+
- Updated dependencies [f24de8b]
|
|
2232
|
+
- Updated dependencies [c8ea8af]
|
|
2233
|
+
- Updated dependencies [9602dc8]
|
|
2234
|
+
- Updated dependencies [3190414]
|
|
2235
|
+
- Updated dependencies [4e480f5]
|
|
2236
|
+
- Updated dependencies [38a123c]
|
|
2237
|
+
- Updated dependencies [299102e]
|
|
2238
|
+
- Updated dependencies [30c73cd]
|
|
2239
|
+
- Updated dependencies [830ed58]
|
|
2240
|
+
- Updated dependencies [d7acad6]
|
|
2241
|
+
- Updated dependencies [45a9aeb]
|
|
2242
|
+
- Updated dependencies [713db46]
|
|
2243
|
+
- Updated dependencies [c71e14d]
|
|
2244
|
+
- Updated dependencies [bf3a03c]
|
|
2245
|
+
- Updated dependencies [cb55718]
|
|
2246
|
+
- Updated dependencies [748494b]
|
|
2247
|
+
- Updated dependencies [5967be0]
|
|
2248
|
+
- Updated dependencies [831be72]
|
|
2249
|
+
- Updated dependencies [29cb85b]
|
|
2250
|
+
- Updated dependencies [3e028c8]
|
|
2251
|
+
- Updated dependencies [d0889e2]
|
|
2252
|
+
- Updated dependencies [ce503e5]
|
|
2253
|
+
- Updated dependencies [f20dcf0]
|
|
2254
|
+
- Updated dependencies [12402a9]
|
|
2255
|
+
- Updated dependencies [aff3d7a]
|
|
2256
|
+
- Updated dependencies [4ca30d0]
|
|
2257
|
+
- Updated dependencies [7a5da14]
|
|
2258
|
+
- Updated dependencies [fff9645]
|
|
2259
|
+
- Updated dependencies [9c3b7ce]
|
|
2260
|
+
- Updated dependencies [2c1c967]
|
|
2261
|
+
- Updated dependencies [9486ac6]
|
|
2262
|
+
- Updated dependencies [9486ac6]
|
|
2263
|
+
- Updated dependencies [4d5f9b4]
|
|
2264
|
+
- Updated dependencies [d6ceb8d]
|
|
2265
|
+
- Updated dependencies [dc4365c]
|
|
2266
|
+
- Updated dependencies [e321d52]
|
|
2267
|
+
- Updated dependencies [969ba84]
|
|
2268
|
+
- Updated dependencies [4c68077]
|
|
2269
|
+
- Updated dependencies [7977ff9]
|
|
2270
|
+
- Updated dependencies [3beef6d]
|
|
2271
|
+
- Updated dependencies [06b8c42]
|
|
2272
|
+
- Updated dependencies [46b9bc9]
|
|
2273
|
+
- Updated dependencies [b97790a]
|
|
2274
|
+
- Updated dependencies [dbd5194]
|
|
2275
|
+
- Updated dependencies [7c9b044]
|
|
2276
|
+
- Updated dependencies [d47de51]
|
|
2277
|
+
- Updated dependencies [3fe6463]
|
|
2278
|
+
- Updated dependencies [b392674]
|
|
2279
|
+
- Updated dependencies [4f3a1e2]
|
|
2280
|
+
- Updated dependencies [31ab372]
|
|
2281
|
+
- Updated dependencies [846889b]
|
|
2282
|
+
- Updated dependencies [2acd8e1]
|
|
2283
|
+
- Updated dependencies [26896c6]
|
|
2284
|
+
- Updated dependencies [67fc3b0]
|
|
2285
|
+
- Updated dependencies [33a3b3c]
|
|
2286
|
+
- Updated dependencies [b87f15b]
|
|
2287
|
+
- Updated dependencies [045d20b]
|
|
2288
|
+
- Updated dependencies [a2d2515]
|
|
2289
|
+
- Updated dependencies [c18d099]
|
|
2290
|
+
- Updated dependencies [adb2a86]
|
|
2291
|
+
- Updated dependencies [03380aa]
|
|
2292
|
+
- Updated dependencies [4562ea5]
|
|
2293
|
+
- Updated dependencies [3619792]
|
|
2294
|
+
- Updated dependencies [3561bd2]
|
|
2295
|
+
- Updated dependencies [bf97b98]
|
|
2296
|
+
- Updated dependencies [320374d]
|
|
2297
|
+
- Updated dependencies [b0d308d]
|
|
2298
|
+
- Updated dependencies [40f34b4]
|
|
2299
|
+
- Updated dependencies [8063bcb]
|
|
2300
|
+
- Updated dependencies [b74a859]
|
|
2301
|
+
- Updated dependencies [d4493fd]
|
|
2302
|
+
- Updated dependencies [240b80f]
|
|
2303
|
+
- Updated dependencies [77cb489]
|
|
2304
|
+
- Updated dependencies [bfaa158]
|
|
2305
|
+
- Updated dependencies [777e5c6]
|
|
2306
|
+
- Updated dependencies [0c386dd]
|
|
2307
|
+
- Updated dependencies [9e37d9b]
|
|
2308
|
+
- Updated dependencies [5ad86dd]
|
|
2309
|
+
- Updated dependencies [16a725f]
|
|
2310
|
+
- Updated dependencies [4dfdcc3]
|
|
2311
|
+
- Updated dependencies [6a449fc]
|
|
2312
|
+
- Updated dependencies [446d93d]
|
|
2313
|
+
- Updated dependencies [ecd9cb2]
|
|
2314
|
+
- Updated dependencies [98d4108]
|
|
2315
|
+
- Updated dependencies [0e3b3be]
|
|
2316
|
+
- Updated dependencies [a29ae2d]
|
|
2317
|
+
- Updated dependencies [220c18d]
|
|
2318
|
+
- Updated dependencies [00d3f09]
|
|
2319
|
+
- Updated dependencies [4388f71]
|
|
2320
|
+
- Updated dependencies [0b1ac58]
|
|
2321
|
+
- Updated dependencies [c93b4d5]
|
|
2322
|
+
- Updated dependencies [c1fe272]
|
|
2323
|
+
- Updated dependencies [3cab570]
|
|
2324
|
+
- Updated dependencies [8ad218d]
|
|
2325
|
+
- Updated dependencies [3e41187]
|
|
2326
|
+
- Updated dependencies [5f78953]
|
|
2327
|
+
- Updated dependencies [639114c]
|
|
2328
|
+
- Updated dependencies [639114c]
|
|
2329
|
+
- Updated dependencies [1490691]
|
|
2330
|
+
- Updated dependencies [1f31d3a]
|
|
2331
|
+
- Updated dependencies [d1842ab]
|
|
2332
|
+
- Updated dependencies [78ca238]
|
|
2333
|
+
- Updated dependencies [d8ec8d6]
|
|
2334
|
+
- Updated dependencies [351eb31]
|
|
2335
|
+
- Updated dependencies [866cd1d]
|
|
2336
|
+
- Updated dependencies [20c04b2]
|
|
2337
|
+
- Updated dependencies [01c9023]
|
|
2338
|
+
- Updated dependencies [48c19bd]
|
|
2339
|
+
- Updated dependencies [a6d8b8d]
|
|
2340
|
+
- Updated dependencies [4b5bb95]
|
|
2341
|
+
- Updated dependencies [b652514]
|
|
2342
|
+
- Updated dependencies [adbda1b]
|
|
2343
|
+
- Updated dependencies [adbda1b]
|
|
2344
|
+
- Updated dependencies [8952395]
|
|
2345
|
+
- Updated dependencies [e2b3826]
|
|
2346
|
+
- Updated dependencies [0348bc9]
|
|
2347
|
+
- Updated dependencies [e8c553b]
|
|
2348
|
+
- Updated dependencies [2e32ed4]
|
|
2349
|
+
- Updated dependencies [3ed3eec]
|
|
2350
|
+
- Updated dependencies [7c3df8f]
|
|
2351
|
+
- Updated dependencies [a4514e8]
|
|
2352
|
+
- Updated dependencies [db3896c]
|
|
2353
|
+
- Updated dependencies [b9f5ff1]
|
|
2354
|
+
- Updated dependencies [e75f4c9]
|
|
2355
|
+
- Updated dependencies [19f1639]
|
|
2356
|
+
- Updated dependencies [4704aa4]
|
|
2357
|
+
- Updated dependencies [47547d0]
|
|
2358
|
+
- Updated dependencies [1bee5d0]
|
|
2359
|
+
- Updated dependencies [858cd72]
|
|
2360
|
+
- Updated dependencies [cfc9b6d]
|
|
2361
|
+
- Updated dependencies [554f2b6]
|
|
2362
|
+
- Updated dependencies [72f55c9]
|
|
2363
|
+
- Updated dependencies [26e06d7]
|
|
2364
|
+
- Updated dependencies [669d71b]
|
|
2365
|
+
- Updated dependencies [ed27d7c]
|
|
2366
|
+
- Updated dependencies [52c8cf7]
|
|
2367
|
+
- Updated dependencies [2ceb43a]
|
|
2368
|
+
- Updated dependencies [7cdd2b9]
|
|
2369
|
+
- Updated dependencies [52c8cf7]
|
|
2370
|
+
- Updated dependencies [3399704]
|
|
2371
|
+
- Updated dependencies [71a4a53]
|
|
2372
|
+
- Updated dependencies [7bf244b]
|
|
2373
|
+
- Updated dependencies [f0bb9fa]
|
|
2374
|
+
- Updated dependencies [81a2eb1]
|
|
2375
|
+
- Updated dependencies [caa0cd3]
|
|
2376
|
+
- Updated dependencies [caa0cd3]
|
|
2377
|
+
- Updated dependencies [20cb8db]
|
|
2378
|
+
- Updated dependencies [25c7d58]
|
|
2379
|
+
- Updated dependencies [00d2fa6]
|
|
2380
|
+
- Updated dependencies [77b2a18]
|
|
2381
|
+
- Updated dependencies [c6198c2]
|
|
2382
|
+
- Updated dependencies [721d1e0]
|
|
2383
|
+
- Updated dependencies [c2f0f48]
|
|
2384
|
+
- Updated dependencies [1237ae4]
|
|
2385
|
+
- Updated dependencies [2f61238]
|
|
2386
|
+
- Updated dependencies [51eb515]
|
|
2387
|
+
- Updated dependencies [c354ce5]
|
|
2388
|
+
- Updated dependencies [8fe8e5c]
|
|
2389
|
+
- Updated dependencies [feac439]
|
|
2390
|
+
- Updated dependencies [9ae871d]
|
|
2391
|
+
- Updated dependencies [efbd566]
|
|
2392
|
+
- Updated dependencies [2a5bf45]
|
|
2393
|
+
- Updated dependencies [9587fc9]
|
|
2394
|
+
- Updated dependencies [e62c44e]
|
|
2395
|
+
- Updated dependencies [daf9d57]
|
|
2396
|
+
- Updated dependencies [23b9958]
|
|
2397
|
+
- Updated dependencies [c15d7ec]
|
|
2398
|
+
- Updated dependencies [5d0876c]
|
|
2399
|
+
- Updated dependencies [f7ace0a]
|
|
2400
|
+
- Updated dependencies [b041b9c]
|
|
2401
|
+
- Updated dependencies [ce2aaef]
|
|
2402
|
+
- Updated dependencies [544ecba]
|
|
2403
|
+
- Updated dependencies [2ce2612]
|
|
2404
|
+
- Updated dependencies [bc640ec]
|
|
2405
|
+
- Updated dependencies [1e215c4]
|
|
2406
|
+
- Updated dependencies [da6e191]
|
|
2407
|
+
- Updated dependencies [3e377c9]
|
|
2408
|
+
- Updated dependencies [a3eb5d0]
|
|
2409
|
+
- Updated dependencies [4ce14f1]
|
|
2410
|
+
- Updated dependencies [aef97e5]
|
|
2411
|
+
- Updated dependencies [2af1fa7]
|
|
2412
|
+
- Updated dependencies [c14d3a0]
|
|
2413
|
+
- Updated dependencies [a137d0c]
|
|
2414
|
+
- Updated dependencies [caf477f]
|
|
2415
|
+
- Updated dependencies [f6375da]
|
|
2416
|
+
- Updated dependencies [967e5d8]
|
|
2417
|
+
- Updated dependencies [c907a9c]
|
|
2418
|
+
- Updated dependencies [a4611b3]
|
|
2419
|
+
- Updated dependencies [20316ba]
|
|
2420
|
+
- Updated dependencies [d3499b3]
|
|
2421
|
+
- Updated dependencies [91f9276]
|
|
2422
|
+
- Updated dependencies [309c75e]
|
|
2423
|
+
- Updated dependencies [c9f9bae]
|
|
2424
|
+
- Updated dependencies [18897a4]
|
|
2425
|
+
- Updated dependencies [8b7ea39]
|
|
2426
|
+
- Updated dependencies [a915064]
|
|
2427
|
+
- Updated dependencies [dcbf0b2]
|
|
2428
|
+
- Updated dependencies [52cac38]
|
|
2429
|
+
- Updated dependencies [93fea2e]
|
|
2430
|
+
- Updated dependencies [1422a92]
|
|
2431
|
+
- Updated dependencies [d05fe17]
|
|
2432
|
+
- Updated dependencies [a480f79]
|
|
2433
|
+
- Updated dependencies [f08d1a8]
|
|
2434
|
+
- Updated dependencies [64a252d]
|
|
2435
|
+
- Updated dependencies [786bc91]
|
|
2436
|
+
- Updated dependencies [75fca96]
|
|
2437
|
+
- Updated dependencies [7ca6ddd]
|
|
2438
|
+
- Updated dependencies [f1cd290]
|
|
2439
|
+
- Updated dependencies [5a41ce7]
|
|
2440
|
+
- Updated dependencies [8d50bc2]
|
|
2441
|
+
- Updated dependencies [604476d]
|
|
2442
|
+
- Updated dependencies [d1bebb0]
|
|
2443
|
+
- Updated dependencies [95bf128]
|
|
2444
|
+
- Updated dependencies [335abea]
|
|
2445
|
+
- Updated dependencies [edea22a]
|
|
2446
|
+
- Updated dependencies [0f5cadf]
|
|
2447
|
+
- Updated dependencies [4f9f1ee]
|
|
2448
|
+
- Updated dependencies [66e8b2a]
|
|
2449
|
+
- Updated dependencies [aa083cd]
|
|
2450
|
+
- Updated dependencies [12b5992]
|
|
2451
|
+
- Updated dependencies [b93e245]
|
|
2452
|
+
- Updated dependencies [c842594]
|
|
2453
|
+
- Updated dependencies [290de37]
|
|
2454
|
+
- Updated dependencies [e1c27e4]
|
|
2455
|
+
- Updated dependencies [8c8da45]
|
|
2456
|
+
- Updated dependencies [8cd8eb5]
|
|
2457
|
+
- Updated dependencies [cf1d29e]
|
|
2458
|
+
- Updated dependencies [1bd79c8]
|
|
2459
|
+
- Updated dependencies [af9e957]
|
|
2460
|
+
- Updated dependencies [b1030c7]
|
|
2461
|
+
- Updated dependencies [c974edf]
|
|
2462
|
+
- Updated dependencies [ad852b6]
|
|
2463
|
+
- Updated dependencies [6778809]
|
|
2464
|
+
- Updated dependencies [7fb22a1]
|
|
2465
|
+
- Updated dependencies [ad66d79]
|
|
2466
|
+
- Updated dependencies [0758bd8]
|
|
2467
|
+
- Updated dependencies [ee4d19f]
|
|
2468
|
+
- Updated dependencies [496d31d]
|
|
2469
|
+
- Updated dependencies [0ea7054]
|
|
2470
|
+
- Updated dependencies [9a853f2]
|
|
2471
|
+
- Updated dependencies [cb847fd]
|
|
2472
|
+
- Updated dependencies [ee70287]
|
|
2473
|
+
- Updated dependencies [3e98e13]
|
|
2474
|
+
- Updated dependencies [a695f50]
|
|
2475
|
+
- Updated dependencies [fc32921]
|
|
2476
|
+
- Updated dependencies [4eaa835]
|
|
2477
|
+
- Updated dependencies [8f9d87a]
|
|
2478
|
+
- Updated dependencies [b1777ae]
|
|
2479
|
+
- Updated dependencies [24845c4]
|
|
2480
|
+
- Updated dependencies [6f864cf]
|
|
2481
|
+
- Updated dependencies [24d1edd]
|
|
2482
|
+
- Updated dependencies [645087c]
|
|
2483
|
+
- Updated dependencies [33f4a19]
|
|
2484
|
+
- Updated dependencies [6e9a3d4]
|
|
2485
|
+
- Updated dependencies [4a292d2]
|
|
2486
|
+
- Updated dependencies [5323168]
|
|
2487
|
+
- Updated dependencies [841dd2b]
|
|
2488
|
+
- Updated dependencies [3014fc0]
|
|
2489
|
+
- Updated dependencies [dacb402]
|
|
2490
|
+
- Updated dependencies [846cec0]
|
|
2491
|
+
- Updated dependencies [91facae]
|
|
2492
|
+
- Updated dependencies [b38014e]
|
|
2493
|
+
- Updated dependencies [474797d]
|
|
2494
|
+
- Updated dependencies [704e695]
|
|
2495
|
+
- Updated dependencies [a407bd6]
|
|
2496
|
+
- Updated dependencies [317dbce]
|
|
2497
|
+
- Updated dependencies [309728c]
|
|
2498
|
+
- Updated dependencies [aa08d7e]
|
|
2499
|
+
- Updated dependencies [3a43a15]
|
|
2500
|
+
- Updated dependencies [868e825]
|
|
2501
|
+
- Updated dependencies [f76f436]
|
|
2502
|
+
- Updated dependencies [ce45a03]
|
|
2503
|
+
- Updated dependencies [421544b]
|
|
2504
|
+
- Updated dependencies [fb01022]
|
|
2505
|
+
- Updated dependencies [e9d9212]
|
|
2506
|
+
- Updated dependencies [ecfb693]
|
|
2507
|
+
- Updated dependencies [abc1b18]
|
|
2508
|
+
- Updated dependencies [81a51db]
|
|
2509
|
+
- Updated dependencies [67749c7]
|
|
2510
|
+
- Updated dependencies [507b61b]
|
|
2511
|
+
- Updated dependencies [512c84b]
|
|
2512
|
+
- Updated dependencies [c300267]
|
|
2513
|
+
- Updated dependencies [fb3a101]
|
|
2514
|
+
- Updated dependencies [d4733f2]
|
|
2515
|
+
- Updated dependencies [7c9145f]
|
|
2516
|
+
- Updated dependencies [1570eac]
|
|
2517
|
+
- Updated dependencies [f391ede]
|
|
2518
|
+
- Updated dependencies [f5cfbbd]
|
|
2519
|
+
- Updated dependencies [f5cfbbd]
|
|
2520
|
+
- Updated dependencies [8b532cb]
|
|
2521
|
+
- Updated dependencies [64c3cdd]
|
|
2522
|
+
- Updated dependencies [4d65991]
|
|
2523
|
+
- Updated dependencies [c42554e]
|
|
2524
|
+
- Updated dependencies [555b4ec]
|
|
2525
|
+
- Updated dependencies [1ccfc23]
|
|
2526
|
+
- Updated dependencies [542718f]
|
|
2527
|
+
- Updated dependencies [7f27bc5]
|
|
2528
|
+
- Updated dependencies [0a174f3]
|
|
2529
|
+
- Updated dependencies [676f677]
|
|
2530
|
+
- Updated dependencies [f95b140]
|
|
2531
|
+
- Updated dependencies [541ce4e]
|
|
2532
|
+
- Updated dependencies [6479086]
|
|
2533
|
+
- Updated dependencies [d79f525]
|
|
2534
|
+
- Updated dependencies [d1865d2]
|
|
2535
|
+
- Updated dependencies [55ba3ff]
|
|
2536
|
+
- Updated dependencies [f1190b0]
|
|
2537
|
+
- Updated dependencies [561abef]
|
|
2538
|
+
- Updated dependencies [ef52001]
|
|
2539
|
+
- Updated dependencies [6a4680b]
|
|
2540
|
+
- Updated dependencies [c3a4273]
|
|
2541
|
+
- Updated dependencies [abf710d]
|
|
2542
|
+
- Updated dependencies [093af32]
|
|
2543
|
+
- Updated dependencies [1bd1be7]
|
|
2544
|
+
- Updated dependencies [d234fa9]
|
|
2545
|
+
- Updated dependencies [adf5812]
|
|
2546
|
+
- Updated dependencies [e36acd4]
|
|
2547
|
+
- Updated dependencies [5058336]
|
|
2548
|
+
- Updated dependencies [2f6b2bf]
|
|
2549
|
+
- Updated dependencies [2028b31]
|
|
2550
|
+
- Updated dependencies [63601ab]
|
|
2551
|
+
- Updated dependencies [c372b29]
|
|
2552
|
+
- Updated dependencies [152f0a7]
|
|
2553
|
+
- Updated dependencies [8693b85]
|
|
2554
|
+
- Updated dependencies [e82dad1]
|
|
2555
|
+
- Updated dependencies [58b7b3d]
|
|
2556
|
+
- Updated dependencies [84defab]
|
|
2557
|
+
- Updated dependencies [681d3f1]
|
|
2558
|
+
- Updated dependencies [969d4f2]
|
|
2559
|
+
- Updated dependencies [f3bc481]
|
|
2560
|
+
- Updated dependencies [b79aac2]
|
|
2561
|
+
- Updated dependencies [93fc0e7]
|
|
2562
|
+
- Updated dependencies [a4b723f]
|
|
2563
|
+
- Updated dependencies [2b10ca0]
|
|
2564
|
+
- Updated dependencies [7db4a81]
|
|
2565
|
+
- Updated dependencies [19a0b0e]
|
|
2566
|
+
- Updated dependencies [526fc11]
|
|
2567
|
+
- Updated dependencies [f8e3e9a]
|
|
2568
|
+
- Updated dependencies [b9d47ec]
|
|
2569
|
+
- Updated dependencies [3b6bc69]
|
|
2570
|
+
- Updated dependencies [6214db6]
|
|
2571
|
+
- Updated dependencies [6732df4]
|
|
2572
|
+
- Updated dependencies [fe9e0d0]
|
|
2573
|
+
- Updated dependencies [63fb72c]
|
|
2574
|
+
- Updated dependencies [804831c]
|
|
2575
|
+
- Updated dependencies [279e48e]
|
|
2576
|
+
- Updated dependencies [8700d6d]
|
|
2577
|
+
- Updated dependencies [8db2a0f]
|
|
2578
|
+
- Updated dependencies [689953a]
|
|
2579
|
+
- Updated dependencies [30443fb]
|
|
2580
|
+
- Updated dependencies [8d3dbb2]
|
|
2581
|
+
- Updated dependencies [efc1c9c]
|
|
2582
|
+
- Updated dependencies [da45e6b]
|
|
2583
|
+
- Updated dependencies [7533465]
|
|
2584
|
+
- Updated dependencies [835f0f3]
|
|
2585
|
+
- Updated dependencies [a9d97be]
|
|
2586
|
+
- Updated dependencies [ed35b44]
|
|
2587
|
+
- Updated dependencies [9ba7e9c]
|
|
2588
|
+
- Updated dependencies [729e851]
|
|
2589
|
+
- Updated dependencies [96919a4]
|
|
2590
|
+
- Updated dependencies [345e24a]
|
|
2591
|
+
- Updated dependencies [20b507a]
|
|
2592
|
+
- Updated dependencies [2e471dc]
|
|
2593
|
+
- Updated dependencies [6748587]
|
|
2594
|
+
- Updated dependencies [be50942]
|
|
2595
|
+
- Updated dependencies [775e079]
|
|
2596
|
+
- Updated dependencies [7e8b3c0]
|
|
2597
|
+
- Updated dependencies [53374dc]
|
|
2598
|
+
- Updated dependencies [f6fb83f]
|
|
2599
|
+
- Updated dependencies [2049b03]
|
|
2600
|
+
- Updated dependencies [2bf34f7]
|
|
2601
|
+
- Updated dependencies [15b33ae]
|
|
2602
|
+
- Updated dependencies [7cbc724]
|
|
2603
|
+
- Updated dependencies [7098eed]
|
|
2604
|
+
- Updated dependencies [3df7c5c]
|
|
2605
|
+
- Updated dependencies [fb91ac9]
|
|
2606
|
+
- Updated dependencies [fb91ac9]
|
|
2607
|
+
- Updated dependencies [641fb55]
|
|
2608
|
+
- Updated dependencies [8524372]
|
|
2609
|
+
- Updated dependencies [7cbefa5]
|
|
2610
|
+
- Updated dependencies [72d6587]
|
|
2611
|
+
- Updated dependencies [a272a4f]
|
|
2612
|
+
- Updated dependencies [55f39ee]
|
|
2613
|
+
- Updated dependencies [0ce32d5]
|
|
2614
|
+
- Updated dependencies [0970a0e]
|
|
2615
|
+
- Updated dependencies [e427e9c]
|
|
2616
|
+
- Updated dependencies [bbc9dc3]
|
|
2617
|
+
- Updated dependencies [02f1813]
|
|
2618
|
+
- Updated dependencies [1ef89c0]
|
|
2619
|
+
- Updated dependencies [ba0b61a]
|
|
2620
|
+
- Updated dependencies [ba0b61a]
|
|
2621
|
+
- Updated dependencies [ac716ff]
|
|
2622
|
+
- Updated dependencies [f0f3cd5]
|
|
2623
|
+
- Updated dependencies [ab856ed]
|
|
2624
|
+
- Updated dependencies [20f3e65]
|
|
2625
|
+
- Updated dependencies [bbba098]
|
|
2626
|
+
- Updated dependencies [87af769]
|
|
2627
|
+
- Updated dependencies [3be720e]
|
|
2628
|
+
- Updated dependencies [43c0d17]
|
|
2629
|
+
- Updated dependencies [c3df43a]
|
|
2630
|
+
- Updated dependencies [d16d0e9]
|
|
2631
|
+
- Updated dependencies [bbe57fd]
|
|
2632
|
+
- Updated dependencies [272a530]
|
|
2633
|
+
- Updated dependencies [1779e8d]
|
|
2634
|
+
- Updated dependencies [f7fcc2c]
|
|
2635
|
+
- Updated dependencies [f0f4d6c]
|
|
2636
|
+
- Updated dependencies [4128188]
|
|
2637
|
+
- Updated dependencies [b253c4e]
|
|
2638
|
+
- Updated dependencies [78a9c67]
|
|
2639
|
+
- Updated dependencies [4a7ef0d]
|
|
2640
|
+
- Updated dependencies [4598f6d]
|
|
2641
|
+
- Updated dependencies [dea17b4]
|
|
2642
|
+
- Updated dependencies [89bb77a]
|
|
2643
|
+
- Updated dependencies [06611e4]
|
|
2644
|
+
- Updated dependencies [44152c4]
|
|
2645
|
+
- Updated dependencies [3939545]
|
|
2646
|
+
- Updated dependencies [66abbde]
|
|
2647
|
+
- Updated dependencies [dc3893d]
|
|
2648
|
+
- Updated dependencies [1bbaa16]
|
|
2649
|
+
- Updated dependencies [6ee259a]
|
|
2650
|
+
- Updated dependencies [7649f43]
|
|
2651
|
+
- Updated dependencies [e708426]
|
|
2652
|
+
- Updated dependencies [3b6d53b]
|
|
2653
|
+
- Updated dependencies [276d174]
|
|
2654
|
+
- Updated dependencies [2982ed9]
|
|
2655
|
+
- Updated dependencies [a8198de]
|
|
2656
|
+
- Updated dependencies [0c789a4]
|
|
2657
|
+
- Updated dependencies [05a49f2]
|
|
2658
|
+
- Updated dependencies [b234a84]
|
|
2659
|
+
- Updated dependencies [a78cd37]
|
|
2660
|
+
- Updated dependencies [5ea623e]
|
|
2661
|
+
- Updated dependencies [5eabe86]
|
|
2662
|
+
- Updated dependencies [ca5d671]
|
|
2663
|
+
- Updated dependencies [32bf2d6]
|
|
2664
|
+
- Updated dependencies [ff0c384]
|
|
2665
|
+
- Updated dependencies [af4fb29]
|
|
2666
|
+
- Updated dependencies [c698a81]
|
|
2667
|
+
- Updated dependencies [ff5ef1c]
|
|
2668
|
+
- Updated dependencies [befd40c]
|
|
2669
|
+
- Updated dependencies [9a97800]
|
|
2670
|
+
- Updated dependencies [6bca0e4]
|
|
2671
|
+
- Updated dependencies [81c0bc4]
|
|
2672
|
+
- Updated dependencies [3c76801]
|
|
2673
|
+
- Updated dependencies [60500cb]
|
|
2674
|
+
- Updated dependencies [2fcefb9]
|
|
2675
|
+
- Updated dependencies [77f846a]
|
|
2676
|
+
- Updated dependencies [bc5870c]
|
|
2677
|
+
- Updated dependencies [b55a346]
|
|
2678
|
+
- Updated dependencies [065bba7]
|
|
2679
|
+
- Updated dependencies [f760064]
|
|
2680
|
+
- Updated dependencies [dd19463]
|
|
2681
|
+
- Updated dependencies [6791717]
|
|
2682
|
+
- Updated dependencies [8ea3bee]
|
|
2683
|
+
- Updated dependencies [100547e]
|
|
2684
|
+
- Updated dependencies [3a58149]
|
|
2685
|
+
- Updated dependencies [6d1c155]
|
|
2686
|
+
- Updated dependencies [d7573b3]
|
|
2687
|
+
- Updated dependencies [bf3edfe]
|
|
2688
|
+
- Updated dependencies [2c8474c]
|
|
2689
|
+
- Updated dependencies [6ce89da]
|
|
2690
|
+
- Updated dependencies [0e05aac]
|
|
2691
|
+
- Updated dependencies [ae61ad4]
|
|
2692
|
+
- Updated dependencies [5aed9e4]
|
|
2693
|
+
- Updated dependencies [83c77dc]
|
|
2694
|
+
- Updated dependencies [18a8e7d]
|
|
2695
|
+
- Updated dependencies [e7957ab]
|
|
2696
|
+
- Updated dependencies [f7e34ca]
|
|
2697
|
+
- Updated dependencies [e719ebd]
|
|
2698
|
+
- Updated dependencies [516583b]
|
|
2699
|
+
- Updated dependencies [f9e4f91]
|
|
2700
|
+
- Updated dependencies [6ef48b1]
|
|
2701
|
+
- Updated dependencies [fa429cf]
|
|
2702
|
+
- Updated dependencies [ed8df3e]
|
|
2703
|
+
- Updated dependencies [fe76ece]
|
|
2704
|
+
- Updated dependencies [8b446f5]
|
|
2705
|
+
- Updated dependencies [8e74b27]
|
|
2706
|
+
- Updated dependencies [7102b20]
|
|
2707
|
+
- Updated dependencies [8ebd57f]
|
|
2708
|
+
- Updated dependencies [617707a]
|
|
2709
|
+
- Updated dependencies [c40f3b8]
|
|
2710
|
+
- Updated dependencies [58770f3]
|
|
2711
|
+
- Updated dependencies [aefe428]
|
|
2712
|
+
- Updated dependencies [485f096]
|
|
2713
|
+
- Updated dependencies [7357447]
|
|
2714
|
+
- Updated dependencies [199d31b]
|
|
2715
|
+
- Updated dependencies [b655a9d]
|
|
2716
|
+
- Updated dependencies [3e01cb5]
|
|
2717
|
+
- Updated dependencies [7138bc1]
|
|
2718
|
+
- Updated dependencies [cef27e2]
|
|
2719
|
+
- Updated dependencies [4e8622b]
|
|
2720
|
+
- Updated dependencies [dffd752]
|
|
2721
|
+
- Updated dependencies [06973aa]
|
|
2722
|
+
- Updated dependencies [50798f3]
|
|
2723
|
+
- Updated dependencies [6a576c9]
|
|
2724
|
+
- Updated dependencies [105f3c5]
|
|
2725
|
+
- Updated dependencies [3ccd9e8]
|
|
2726
|
+
- Updated dependencies [689b979]
|
|
2727
|
+
- Updated dependencies [c70f865]
|
|
2728
|
+
- Updated dependencies [e546222]
|
|
2729
|
+
- Updated dependencies [fd13f52]
|
|
2730
|
+
- Updated dependencies [d7bd274]
|
|
2731
|
+
- Updated dependencies [98c3a74]
|
|
2732
|
+
- Updated dependencies [fffa30d]
|
|
2733
|
+
- Updated dependencies [ebce5a3]
|
|
2734
|
+
- Updated dependencies [fb336df]
|
|
2735
|
+
- Updated dependencies [9d9040d]
|
|
2736
|
+
- Updated dependencies [20e317c]
|
|
2737
|
+
- Updated dependencies [0fce2ef]
|
|
2738
|
+
- Updated dependencies [42df928]
|
|
2739
|
+
- Updated dependencies [0e2ddd4]
|
|
2740
|
+
- Updated dependencies [b7479ab]
|
|
2741
|
+
- Updated dependencies [9850c6e]
|
|
2742
|
+
- Updated dependencies [de570cc]
|
|
2743
|
+
- Updated dependencies [b2ea297]
|
|
2744
|
+
- Updated dependencies [5b5a5c3]
|
|
2745
|
+
- Updated dependencies [14582b8]
|
|
2746
|
+
- Updated dependencies [51e144e]
|
|
2747
|
+
- Updated dependencies [19cbf10]
|
|
2748
|
+
- Updated dependencies [ab92940]
|
|
2749
|
+
- Updated dependencies [a691c0b]
|
|
2750
|
+
- Updated dependencies [0b1326d]
|
|
2751
|
+
- Updated dependencies [1e66879]
|
|
2752
|
+
- Updated dependencies [c5200f0]
|
|
2753
|
+
- Updated dependencies [af3861f]
|
|
2754
|
+
- Updated dependencies [515f171]
|
|
2755
|
+
- Updated dependencies [1f4e029]
|
|
2756
|
+
- Updated dependencies [4f14ad7]
|
|
2757
|
+
- Updated dependencies [258d264]
|
|
2758
|
+
- Updated dependencies [cac64b3]
|
|
2759
|
+
- Updated dependencies [8033ad1]
|
|
2760
|
+
- Updated dependencies [fa140b8]
|
|
2761
|
+
- Updated dependencies [71cba28]
|
|
2762
|
+
- Updated dependencies [190fbd0]
|
|
2763
|
+
- Updated dependencies [c00bf28]
|
|
2764
|
+
- Updated dependencies [93127bd]
|
|
2765
|
+
- Updated dependencies [f2158ec]
|
|
2766
|
+
- Updated dependencies [759606e]
|
|
2767
|
+
- Updated dependencies [fd8dace]
|
|
2768
|
+
- Updated dependencies [72ffc34]
|
|
2769
|
+
- Updated dependencies [a51fa0c]
|
|
2770
|
+
- Updated dependencies [51f3d8d]
|
|
2771
|
+
- Updated dependencies [bf28341]
|
|
2772
|
+
- Updated dependencies [78cbdb5]
|
|
2773
|
+
- Updated dependencies [b7543a9]
|
|
2774
|
+
- Updated dependencies [6c6cee7]
|
|
2775
|
+
- Updated dependencies [42887e0]
|
|
2776
|
+
- Updated dependencies [83fe6e7]
|
|
2777
|
+
- Updated dependencies [d1ab06f]
|
|
2778
|
+
- Updated dependencies [38a9568]
|
|
2779
|
+
- Updated dependencies [f90b8fb]
|
|
2780
|
+
- Updated dependencies [91783c4]
|
|
2781
|
+
- Updated dependencies [982885d]
|
|
2782
|
+
- Updated dependencies [dba7d84]
|
|
2783
|
+
- Updated dependencies [ca39427]
|
|
2784
|
+
- Updated dependencies [bd09957]
|
|
2785
|
+
- Updated dependencies [5a07e67]
|
|
2786
|
+
- Updated dependencies [2d36552]
|
|
2787
|
+
- Updated dependencies [45d8288]
|
|
2788
|
+
- Updated dependencies [b2437a7]
|
|
2789
|
+
- Updated dependencies [f157423]
|
|
2790
|
+
- Updated dependencies [7a90afd]
|
|
2791
|
+
- Updated dependencies [eddc1dd]
|
|
2792
|
+
- Updated dependencies [490f482]
|
|
2793
|
+
- Updated dependencies [27308c5]
|
|
2794
|
+
- Updated dependencies [8689166]
|
|
2795
|
+
- Updated dependencies [c9327c9]
|
|
2796
|
+
- Updated dependencies [920165d]
|
|
2797
|
+
- Updated dependencies [9101be5]
|
|
2798
|
+
- Updated dependencies [f53a8d0]
|
|
2799
|
+
- Updated dependencies [968dc1e]
|
|
2800
|
+
- Updated dependencies [57f9b07]
|
|
2801
|
+
- Updated dependencies [3c73d99]
|
|
2802
|
+
- Updated dependencies [d91aed9]
|
|
2803
|
+
- Updated dependencies [ed71d9e]
|
|
2804
|
+
- Updated dependencies [7776fc2]
|
|
2805
|
+
- Updated dependencies [e76634c]
|
|
2806
|
+
- Updated dependencies [c86185e]
|
|
2807
|
+
- Updated dependencies [fb96ecb]
|
|
2808
|
+
- Updated dependencies [1170ed1]
|
|
2809
|
+
- Updated dependencies [92814db]
|
|
2810
|
+
- Updated dependencies [4d73b07]
|
|
2811
|
+
- @object-ui/react@17.7.0
|
|
2812
|
+
- @object-ui/core@17.7.0
|
|
2813
|
+
- @object-ui/types@17.7.0
|
|
2814
|
+
- @object-ui/i18n@17.7.0
|
|
2815
|
+
- @object-ui/components@17.7.0
|
|
2816
|
+
|
|
3
2817
|
## 17.6.0
|
|
4
2818
|
|
|
5
2819
|
### Patch Changes
|