Skip to content

Latest commit

 

History

History
1314 lines (991 loc) · 44.9 KB

File metadata and controls

1314 lines (991 loc) · 44.9 KB

@object-ui/plugin-chatbot

16.1.0

Patch Changes

  • 59db1f9: chore(lint): clear the baseline lint errors in plugin-chatbot (objectui#2713 Wave 3)

    Wave 3 of the #2713 lint-gate restoration. @object-ui/plugin-chatbot was red at baseline on main; cleared every error (no behavior change; warnings out of scope):

    • react-hooks/rules-of-hooks in useObjectChat (8) — the hook called DIFFERENT useCallbacks in each of its two isApiMode return branches, so both sets were conditional (React throws if the mode toggles between renders). useChat was already called unconditionally; this destructures its result and hoists all eight callbacks (3 API + 5 local) above the isApiMode branch, so the same hooks run in the same order every render. Only the returned surface differs by mode — the callback bodies are unchanged (the API messages local is renamed apiMessages). Verified against the useObjectChat.sendFailure / handoffContext / ChatbotEnhanced.sendError suites.
    • react-hooks/rules-of-hooks in FloatingChatbotTriggeruseChatbotLabel wrapped the provider-safe useObjectTranslation in try/catch; removed the wrapper (the #2709 fix).
    • react-hooks/static-components in shimmermotion.create(Component) genuinely builds a motion component and must key off the as prop, so it can't be module-scoped. Memoized per Component (stable across renders, avoids the remount) and carries a justified scoped disable at the render site.
  • Updated dependencies [1c8935a]

  • Updated dependencies [8b8b744]

  • Updated dependencies [7cf4051]

  • Updated dependencies [803558e]

  • Updated dependencies [2e7d7f0]

  • Updated dependencies [ef14f69]

  • Updated dependencies [94d4876]

  • Updated dependencies [69fa5d1]

  • Updated dependencies [549c67d]

  • Updated dependencies [2b17339]

  • Updated dependencies [31b77d4]

  • Updated dependencies [6d4fbe6]

  • Updated dependencies [0a3710b]

  • Updated dependencies [62b9ab5]

  • Updated dependencies [1629313]

  • Updated dependencies [29c6040]

  • Updated dependencies [faebac3]

  • Updated dependencies [2331ac9]

  • Updated dependencies [199fa83]

  • Updated dependencies [eee4ded]

    • @object-ui/core@16.1.0
    • @object-ui/types@16.1.0
    • @object-ui/react@16.1.0
    • @object-ui/components@16.1.0

16.0.0

Patch Changes

  • c0bd483: Plan-card approval gives immediate in-card feedback (#2627): clicking "Build it" flips the clicked card to a spinning "Building…" badge right away (the approval's chat-level effects land at the bottom of the thread, outside the viewport, so the card looked untouched for ~10s and users double-clicked). The durable Built state still derives from the message stream; an approval that never left the client (rate limit / offline) rolls the badge back so the button returns. New planBuildingLabel prop (AiChatPage passes zh).
  • Updated dependencies [d3e19ed]
  • Updated dependencies [59d4fa9]
  • Updated dependencies [4c7c47f]
  • Updated dependencies [210806a]
  • Updated dependencies [b4ef588]
  • Updated dependencies [5534535]
  • Updated dependencies [9b8f978]
  • Updated dependencies [195a651]
  • Updated dependencies [33b4995]
    • @object-ui/react@16.0.0
    • @object-ui/components@16.0.0
    • @object-ui/types@16.0.0
    • @object-ui/core@16.0.0

15.0.0

Patch Changes

  • @object-ui/types@15.0.0
  • @object-ui/core@15.0.0
  • @object-ui/react@15.0.0
  • @object-ui/components@15.0.0

14.1.0

Patch Changes

  • 82441e4: feat(console-ai): proactive AI usage indicator in the ChatDock (ADR-0057 #8)

    Surfaces remaining AI headroom before a send hits the 429 wall, instead of only learning the limit reactively.

    • AiUsageIndicator — two meters (build + dataChat) as small progress rings in the ChatDock header (desktop rail + mobile sheet). Near-full → an amber "running low" hint and a popover with "resets tonight / next cycle" plus the upgrade / top-up CTA (reusing the 429 deep-link). D5-safe: fractions and qualitative words only, never a token number. Hides itself when the usage endpoint is absent (older backend / OSS / no seat).
    • useAiUsage — fetches the D5-safe per-meter fractions; refetches on the chat engine's post-turn / 429 nudge and on tab re-focus; fails soft to nothing.
    • useObjectChat emits AI_USAGE_REFRESH_EVENT on a rejected send (429) and on the turn-finish edge so the ring updates right after the user's action.
    • i18n: console.ai.usage.* in en + zh-CN.

    Consumes the cloud GET /api/v1/ai/usage endpoint (objectstack-ai/cloud#824).

  • Updated dependencies [0890fa7]

  • Updated dependencies [2ded18c]

  • Updated dependencies [e628d1f]

  • Updated dependencies [5523fc4]

  • Updated dependencies [887062c]

  • Updated dependencies [055e1d2]

  • Updated dependencies [9e2d58f]

  • Updated dependencies [dea65f7]

  • Updated dependencies [f30ff68]

  • Updated dependencies [073e7aa]

  • Updated dependencies [6c0135c]

  • Updated dependencies [5b52624]

  • Updated dependencies [4afb251]

  • Updated dependencies [d5b1bc0]

  • Updated dependencies [f94905d]

  • Updated dependencies [f0f10f5]

    • @object-ui/core@14.1.0
    • @object-ui/types@14.1.0
    • @object-ui/react@14.1.0
    • @object-ui/components@14.1.0

14.0.0

Minor Changes

  • 7b4fc36: feat(console-ai): ask→build handoff carries conversation context (ADR-0057 P4 / cloud#817)

    The P4 "Open in Builder →" handoff previously carried only the build prompt + an optional package, so the Builder started cold and the user re-explained themselves. It now also carries the source ask conversation as context — ADR-0057 P4 / cloud#817 — so the build agent's first turn starts with the thread the user already had.

    • @object-ui/app-shell: both handoff sites (the full-page AiChatPage and the console FAB) now append ?parentConversationId=<ask thread id> to the /ai/build URL. The build surface reads it and forwards it to useObjectChat; the existing URL-mirror drops it once the build conversation id is minted, so a reload never re-carries it.
    • @object-ui/plugin-chatbot: useObjectChat accepts parentConversationId and sends it as context.parentConversationId on the first turn only (held in a ref, consumed once) — the backend redeems it into the turn's context and the client owns history from there. New pure helper withHandoffContext (unit tested) does the non-mutating context merge.

    Requires the cloud handoff-context contract (service-ai, cloud#817): the build agent redeems context.parentConversationId into a single system block on its first turn — ownership-checked, and carrying only the user/assistant text the user already saw (ADR-0063 governance boundary). Without it the console degrades cleanly: the id is sent but ignored, and the handoff is a (working) cold start.

  • 7dea792: feat(console-ai): explicit "Open in Builder →" ask→build handoff (ADR-0057 P4)

    When the ask agent declines an app-authoring request it now calls the cloud suggest_builder tool (structured decline). The console renders that as an explicit "Open in Builder →" action that opens the full-page build surface seeded with the handoff prompt — ADR-0063 decline-and-redirect: an explicit, user-initiated switch, never a silent re-route into authoring.

    • @object-ui/plugin-chatbot: detectBuilderHandoff lifts the { status:'build_handoff', prompt, packageId? } result onto the tool invocation; ChatbotEnhanced renders the "Open in Builder →" card and calls a new onOpenBuilder prop (disabled when no host wires it).
    • @object-ui/app-shell: the full-page AiChatPage (ask) and the console FAB wire onOpenBuilder to navigate to /ai/build?package=…&handoffPrompt=…; the build surface seeds that prompt as its first message (auto-sent once the conversation is minted), and the URL-mirror strips ?handoffPrompt so a reload never re-sends it. Full ask-conversation context transfer is a later upgrade (cloud#817); v1 carries the build prompt + optional package.

    Requires the cloud suggest_builder signal (service-ai-studio) to light up; the console degrades cleanly (no card) without it.

  • 9d0fdb1: feat(console-ai): render agent behavior by declared capability (cloud#816 / ADR-0057 "B+")

    GET /api/v1/ai/agents now serves per-agent capabilities; the console consumes them instead of hard-coding isBuildAgent(name):

    • @object-ui/plugin-chatbot: AgentDescriptor.capabilities (normalized from the catalog) + new agentHasCapability(agents, name, cap) — declaration wins when present; falls back to the legacy isBuildAgent(name) check when absent (older server), so shipping order doesn't matter.
    • @object-ui/app-shell: the build-doctor drawer + showDebug key off 'debug', the FAB's resume-vs-fresh keys off 'resume', HomePage's "Build with AI" availability keys off 'authoring'. The ADR-0063 product-axis sites (surface→agent resolver, conversation scope keying, picker availability) intentionally stay name-based — capability describes RENDERED behavior, not which product an agent is.

    A future skill-driven build variant now needs no console change.

  • cd778d4: feat(console-ai): package binding chip + inert handoff cards + honest send hint (#2458 / ADR-0057 A1.a)

    Three UX improvements from live magic-flow testing:

    • A1.a — package binding chip (app-shell): the build surface header shows the package the conversation is bound to (📦 <app>), or "New app" when unbound — so the edit blast-radius is always visible (Claude-Code-shows-the-repo idiom). The magic flow starts unbound and binds the moment its build mints a package (deriveBoundPackageId reads ?package= else the latest draft/handoff result; unit-tested).
    • UX#5 — only the latest handoff card is actionable (plugin-chatbot): when a thread accumulates several "Open in Builder →" cards, only the newest stays clickable; older (superseded) cards' buttons are disabled — derived from message order, so it survives the navigation the button triggers and the pane remount that follows. A stale prompt in an older card can't be re-fired.
    • UX#7 — honest send hint (plugin-chatbot): the composer already sends on plain Enter (Shift+Enter = newline); dropped the misleading glyph from the hint so it no longer implies Cmd+Enter.

Patch Changes

  • 1273f1e: fix(console-ai): reliable ask→build handoff auto-send + second-handoff context re-carry (ADR-0057 P4)

    Two follow-ups to the P4 "Open in Builder →" handoff:

    • Auto-send swallow. The handoff's auto-sent first message could be dropped on a brand-new build conversation: the seed gated on the async-resolved activeAgent, which can settle after the conversation id is minted, so the deferred-send replay ran with an empty pending and never re-fired. The seed now gates on the route (agentSegment, synchronous) and bumps a pendingSignal that useDeferredFirstSend lists in its replay deps, so the seed always fires — no more empty build conversation on handoff.

    • Second-handoff re-carry. A second "Open in Builder →" into the (singleton) build conversation now re-carries the latest ask context. The transport re-arms parentConversationId on each falsy→truthy transition of the prop (the ask thread is a singleton, so the same id repeats — the fresh-arrival signal is the transition the URL-mirror produces, not a changed value), and the seed re-arms on each new handoffPrompt.

    Unit-tested: deferred-send replays a post-id seed via the signal; the transport re-carries across a strip→re-supply cycle.

  • bfea27f: Make the ask-decline wait feel responsive: live thinking indicator + handoff card the moment suggest_builder lands (#2458 item 3).

    When the ask agent declines a build-shaped request, the ~20s before the "Open in Builder →" card is dominated by the LLM's time-to-tool-call. During that wait the chat could show dead air — a blank bubble, or the static "执行过程" activity note (a hydrated-history affordance) when the backend streamed a (called …) tool-call placeholder.

    ChatbotEnhanced now shows the existing live thinking indicator (ThinkingDots) whenever a streaming assistant turn has nothing visible yet — including whitespace-only content, a mid-stream (called …) placeholder, and hidden reasoning in summary mode. The static "执行过程" note is reserved for FINISHED (re-hydrated) tool-call-only turns (#772 preserved). The builderHandoff card already renders at output-available with no gate on the trailing prose, so it surfaces the instant the tool result arrives; the typing cursor now only paints beside real streaming prose (no lone cursor during the tool phase).

  • 408f4ba: fix(plugin-chatbot): build-result summary truncates on mobile instead of overflowing (#2493)

    The draft-review card's summary line (built N artifact(s) — …) is a nowrap truncate span, but its flex row lacked the min-w-0 that lets truncate actually bite — so on a phone the long summary expanded the chat column past the viewport and the whole chat scrolled sideways. The span now gets min-w-0 flex-1 (truncating within the row) and the action row is flex-wrap so its buttons drop to a new line on a narrow screen rather than forcing horizontal scroll. Desktop is unchanged (there's room, so nothing wraps or truncates).

  • Updated dependencies [443360a]

  • Updated dependencies [86c69c3]

  • Updated dependencies [05e56ca]

  • Updated dependencies [a44e7b6]

  • Updated dependencies [6a74160]

    • @object-ui/core@14.0.0
    • @object-ui/react@14.0.0
    • @object-ui/types@14.0.0
    • @object-ui/components@14.0.0

13.2.0

Patch Changes

  • Updated dependencies [80901aa]
  • Updated dependencies [e492b9d]
    • @object-ui/components@13.2.0
    • @object-ui/react@13.2.0
    • @object-ui/types@13.2.0
    • @object-ui/core@13.2.0

13.1.0

Patch Changes

  • @object-ui/types@13.1.0
  • @object-ui/core@13.1.0
  • @object-ui/react@13.1.0
  • @object-ui/components@13.1.0

13.0.0

Patch Changes

  • Updated dependencies [ac04b76]
  • Updated dependencies [619097e]
    • @object-ui/components@13.0.0
    • @object-ui/types@13.0.0
    • @object-ui/react@13.0.0
    • @object-ui/core@13.0.0

12.1.0

Patch Changes

  • Updated dependencies [6cbccf3]
  • Updated dependencies [c31874d]
    • @object-ui/components@12.1.0
    • @object-ui/types@12.1.0
    • @object-ui/react@12.1.0
    • @object-ui/core@12.1.0

12.0.0

Patch Changes

  • Updated dependencies [226fde9]
  • Updated dependencies [e4de456]
    • @object-ui/types@12.0.0
    • @object-ui/core@12.0.0
    • @object-ui/components@12.0.0
    • @object-ui/react@12.0.0

11.5.0

Patch Changes

  • Updated dependencies [6fffd3d]
  • Updated dependencies [9255686]
  • Updated dependencies [fae75e2]
  • Updated dependencies [1072701]
    • @object-ui/react@11.5.0
    • @object-ui/components@11.5.0
    • @object-ui/types@11.5.0
    • @object-ui/core@11.5.0

11.4.0

Patch Changes

  • Updated dependencies [8bf6295]
  • Updated dependencies [1948c5b]
  • Updated dependencies [bce581a]
  • Updated dependencies [c38d107]
  • Updated dependencies [7782698]
  • Updated dependencies [e84d64d]
    • @object-ui/types@11.4.0
    • @object-ui/components@11.4.0
    • @object-ui/core@11.4.0
    • @object-ui/react@11.4.0

11.3.0

Minor Changes

  • 8d351f1: chore(chatbot): upgrade to Vercel AI SDK v7 / @ai-sdk/react v4

    Bump ai ^6 -> ^7 and @ai-sdk/react ^3 -> ^4. The chatbot's useChat, DefaultChatTransport, UIMessage/ChatStatus usage and the mapMessages parts adapter are all source-compatible with v7 — no code changes required.

    Verified: type-check clean, build green, 183/183 unit tests pass on v7.

    Part of the org-wide AI SDK v6->v7 / providers v3->v4 upgrade (framework#2464, cloud#710).

Patch Changes

  • Updated dependencies [d88c8ec]
  • Updated dependencies [b7237bb]
  • Updated dependencies [d23d6eb]
    • @object-ui/components@11.3.0
    • @object-ui/core@11.3.0
    • @object-ui/react@11.3.0
    • @object-ui/types@11.3.0

11.2.0

Patch Changes

  • Updated dependencies [9e7a986]
  • Updated dependencies [1311749]
    • @object-ui/components@11.2.0
    • @object-ui/core@11.2.0
    • @object-ui/react@11.2.0
    • @object-ui/types@11.2.0

11.1.0

Minor Changes

  • 27bef5a: feat(ai-build): event-driven "Designing your app…" progress for the blueprint-design stream (Refs cloud#657, cloud#655)

    propose_blueprint now streams a reconciled data-blueprint-progress part while it drafts the plan (a tens-of-seconds, otherwise-opaque LLM call), so the chat shows the app taking shape — objects appearing one-by-one with their field counts, the summary / extend target revealed progressively, and a seq-driven liveness cue — instead of a purely presentational rotating-hint placeholder.

    • mapMessages: uiMessageToChatMessage lifts the latest data-blueprint-progress frame onto ChatMessage.blueprintProgress (same single-reconciled-part mechanism as data-build-progress; transient, never persisted). This is the shared streaming converter both the full-page AI Build surface (AiChatPage via useObjectChat) and the floating console chatbot already route through.
    • ChatbotEnhanced: a new BlueprintProgressPanel renders the live "Designing…" card (object chips + summary + running counts + liveness). It supersedes the rotating-hint placeholder while events flow, and yields to the authoritative "Proposed plan" card the instant the propose_blueprint result lands.
    • Graceful degradation: with no data-blueprint-progress events (older runtimes / non-streaming turns) the existing rotating-hint placeholder behaves exactly as before — zero regression. On reload the persisted "Proposed plan" card is the record (the live panel is transient by design).

Patch Changes

  • @object-ui/components@11.1.0
  • @object-ui/react@11.1.0
  • @object-ui/types@11.1.0
  • @object-ui/core@11.1.0

7.3.0

Patch Changes

  • @object-ui/types@7.3.0
  • @object-ui/core@7.3.0
  • @object-ui/react@7.3.0
  • @object-ui/components@7.3.0

7.2.0

Patch Changes

  • Updated dependencies [d23db5c]
    • @object-ui/types@7.2.0
    • @object-ui/components@7.2.0
    • @object-ui/react@7.2.0
    • @object-ui/core@7.2.0

7.1.0

Patch Changes

  • Updated dependencies [677f7ed]
  • Updated dependencies [08c47da]
  • Updated dependencies [a71be60]
  • Updated dependencies [cb03bc3]
    • @object-ui/types@7.1.0
    • @object-ui/core@7.1.0
    • @object-ui/react@7.1.0
    • @object-ui/components@7.1.0

7.0.0

Minor Changes

  • 81c0777: feat(studio): ADR-0033 Phase B — draft review surface (chat → designer → generic diff)

    Closes the AI metadata-authoring loop in Studio. The framework (ADR-0033 Phases A + C) makes the assistant stage every change as a DRAFT; this lets a human see and review those drafts.

    @object-ui/plugin-chatbot

    • mapMessages now detects the framework's draft envelopes — { status:'drafted', type, name, … } (single) and { status:'drafted', drafted:[{type,name}] } (apply_blueprint batch) — and lifts the reviewable targets onto ChatToolInvocation.draftReview (mirrors the existing HITL pendingActionId path; the Vercel {type:'text',value} wrapper is peeled). blueprint_proposed is intentionally not surfaced (no draft yet).
    • ChatbotEnhanced renders a "Review N change(s)" button on drafted tool results, driven by a new onReviewDraft callback prop.

    @object-ui/app-shell

    • assistantBus gains a review channel (requestReview / requestAssistantReview); ConsoleFloatingChatbot wires the chat button to it; a small navigator inside AppContent (which knows the app base) routes to /apps/:appName/metadata/:type/:name?review=1.
    • ResourceEditPage honours ?review=1: it force-reloads the pending draft (covers the case where the AI drafted the item after the page mounted) and opens the review/diff.
    • New DraftReviewPanel — a generic, type-agnostic draft↔published structural diff (added / changed / removed by key), reusing LayeredDiff's computeDiffRows. It gives every metadata type (view, dashboard, flow, …) a real "what will publishing change" review, surfaced as a toolbar affordance + sheet whenever a draft exists. The object designer keeps its richer per-field review.

    Nothing is published by any of this — the human still clicks Publish.

  • 9049bbe: Add end-user friendly agent process summaries for chatbot tool calls, with a debug mode for raw reasoning and tool details. Console chat surfaces now keep a sanitized browser-side display cache so refreshes can restore user/assistant text plus grouped tool states when the backend returns no message rows.

  • 053c948: feat(plugin-chatbot): render AI data-query charts inline (data-chart)

    Companion to the framework visualize_data tool: the data-query assistant can now answer with a CHART rendered right in the assistant bubble.

    • mapMessages.tsextractCharts() lifts every data-chart custom stream part onto ChatMessage.charts (defensive narrowing; preserves multiple charts in order), mirroring the existing data-build-progressbuildProgress path.
    • ChatbotEnhanced.tsx — renders each chart via <SchemaRenderer schema={{ type:'chart', … }}/> (decoupled — no hard dep on plugin-charts), giving the chart a definite width: min(520px, 80vw) so recharts' ResponsiveContainer measures a stable non-zero width inside the w-fit bubble (otherwise the circular width dependency leaves bars unpainted).
  • 053c948: feat(plugin-chatbot): honest liveness indicator on running AI turns

    AI app builds run 1–3 min with long quiet gaps (LLM thinking, sample-data generation) where a static spinner is indistinguishable from a dropped connection. The chat now shows a Claude-Code-style liveness indicator driven by REAL observed stream activity, not a free-running clock:

    • useTurnLiveness(active, activityKey) stamps the moment real data arrives (a streamed token / tool delta / data-build-progress update) and measures seconds-since-last-byte.
    • LivenessIndicator renders three honest states — receiving (emerald pulse + m:ss, bytes arrived recently), waiting (request in flight, nothing back yet), and stalled (amber + "no response for Ns", genuinely silent past 6s).
    • The build panel prefers the server's monotonic seq keep-alive heartbeat as its activity key (falling back to the content signature on older runtimes), so a long quiet seed-generation window reads as honestly receiving rather than flipping to amber.

Patch Changes

  • 40c79df: Improve the floating chatbot flow with responsive panel bounds, safer FAB placement, inline responding and stop states, and clearer retryable error feedback.
  • Updated dependencies [5976ba3]
  • Updated dependencies [a00e16d]
  • Updated dependencies [eaccefd]
  • Updated dependencies [f7f325d]
  • Updated dependencies [c12986e]
  • Updated dependencies [71d7ce0]
  • Updated dependencies [053c948]
  • Updated dependencies [ddbe4a2]
  • Updated dependencies [2d47e94]
  • Updated dependencies [9049bbe]
  • Updated dependencies [6c0c92c]
  • Updated dependencies [cb2fdb1]
  • Updated dependencies [c3749eb]
  • Updated dependencies [6cfa330]
  • Updated dependencies [ad8ade6]
  • Updated dependencies [d54346c]
  • Updated dependencies [3870c20]
  • Updated dependencies [2eb3096]
  • Updated dependencies [b88c560]
  • Updated dependencies [d16566f]
  • Updated dependencies [90acb7f]
  • Updated dependencies [7913390]
  • Updated dependencies [1394e34]
  • Updated dependencies [e95cc25]
  • Updated dependencies [abe8ebc]
  • Updated dependencies [300d755]
  • Updated dependencies [bd8b054]
  • Updated dependencies [4eb9cb6]
  • Updated dependencies [7c239fd]
  • Updated dependencies [858ad94]
  • Updated dependencies [2270239]
  • Updated dependencies [8d1195d]
    • @object-ui/core@7.0.0
    • @object-ui/components@7.0.0
    • @object-ui/react@7.0.0
    • @object-ui/types@7.0.0

6.2.3

Patch Changes

  • @object-ui/types@6.2.3
  • @object-ui/core@6.2.3
  • @object-ui/react@6.2.3
  • @object-ui/components@6.2.3

6.2.2

Patch Changes

  • Updated dependencies [a66f788]
    • @object-ui/react@6.2.2
    • @object-ui/components@6.2.2
    • @object-ui/types@6.2.2
    • @object-ui/core@6.2.2

6.2.1

Patch Changes

  • @object-ui/types@6.2.1
  • @object-ui/core@6.2.1
  • @object-ui/react@6.2.1
  • @object-ui/components@6.2.1

6.2.0

Minor Changes

  • 0335ec4: Polish the AI chat surface based on real-world dogfooding feedback.

    @object-ui/plugin-chatbot — new display helpers shared by ChatbotEnhanced:

    • unwrapToolResult(value) peels the MCP-style { type: 'text', value: '<json>' } envelope that backend tools emit (@objectstack/service-ai's data/metadata tools, in particular), and JSON-parses the inner payload. The result panel now renders a structured object tree instead of a doubly-escaped wall of \\\"objects\\\":[…].
    • humanizeToolName(name) converts snake_case / kebab-case / camelCase tool ids into sentence case ("list_objects" → "List objects"), preserving known acronyms (API, ID, SQL, …). Tool-call cards now show the friendly title with the raw id as a small monospace badge for power users.
    • summarizeChatError(err) strips the AI SDK's "Failed after N attempts. Last error: " prefix and keeps the first sentence as a headline; the full text is exposed via an optional details field so the new error banner can render a "Details" disclosure plus a prominent Retry button instead of a 300-character single-line wall.

    A new ⌘⏎ to send hint is shown in the prompt footer (hidden on narrow screens). ToolHeader.title now accepts ReactNode (previously string) so wrappers can compose richer titles.

    @object-ui/app-shellAiChatPage:

    • Removes the fake "Hello! I'm X" assistant welcome bubble so the empty-state suggestion chips can actually render.
    • Adds per-agent default suggestion sets (data_chat, metadata_assistant) with a generic fallback. New conversations open with three actionable starter prompts tailored to the selected agent.
    • Surfaces agent-fetch failures as an inline warning on the agent picker instead of hijacking the welcome message.
    • Placeholder text now hints at the first suggestion (e.g. Ask Data Assistant… (try "系统里有多少个用户?")).

Patch Changes

  • @object-ui/react@6.2.0
  • @object-ui/components@6.2.0
  • @object-ui/types@6.2.0
  • @object-ui/core@6.2.0

6.1.0

Patch Changes

  • Updated dependencies [991b62d]
    • @object-ui/core@6.1.0
    • @object-ui/types@6.1.0
    • @object-ui/components@6.1.0
    • @object-ui/react@6.1.0

6.0.4

Patch Changes

  • @object-ui/types@6.0.4
  • @object-ui/core@6.0.4
  • @object-ui/react@6.0.4
  • @object-ui/components@6.0.4

6.0.3

Patch Changes

  • @object-ui/types@6.0.3
  • @object-ui/core@6.0.3
  • @object-ui/react@6.0.3
  • @object-ui/components@6.0.3

6.0.2

Patch Changes

  • @object-ui/types@6.0.2
  • @object-ui/core@6.0.2
  • @object-ui/react@6.0.2
  • @object-ui/components@6.0.2

6.0.1

Patch Changes

  • @object-ui/types@6.0.1
  • @object-ui/core@6.0.1
  • @object-ui/react@6.0.1
  • @object-ui/components@6.0.1

6.0.0

Minor Changes

  • 451bbee: HITL conversation loop: useHitlInChat now accepts a continueConversation(prompt, ctx) callback. After the operator approves or rejects a tool call from inline chat buttons, the hook synthesises a short follow-up user prompt (tagged [HITL pa_xxx], with the executed result or rejection reason) and invokes the callback so the LLM continues the conversation with full awareness of the outcome.

    ConsoleFloatingChatbot wires this callback to useObjectChat's sendMessage, closing the loop end-to-end. Execution failures stay visible in the inline status badge but do NOT continue automatically — the operator decides next steps.

    No framework changes required. Internal idMap now also tracks the tool name so the synthesised prompt is human-readable. New test suite useHitlInChat.test.tsx covers approve/reject/failed/no-callback branches.

Patch Changes

  • @object-ui/types@6.0.0
  • @object-ui/core@6.0.0
  • @object-ui/react@6.0.0
  • @object-ui/components@6.0.0

5.4.2

Patch Changes

  • @object-ui/types@5.4.2
  • @object-ui/core@5.4.2
  • @object-ui/react@5.4.2
  • @object-ui/components@5.4.2

5.4.1

Patch Changes

  • @object-ui/types@5.4.1
  • @object-ui/core@5.4.1
  • @object-ui/react@5.4.1
  • @object-ui/components@5.4.1

5.4.0

Minor Changes

  • 3a8c754: Rebuilt the chatbot UI on top of Vercel AI Elements (MIT) and wired in the v1 capabilities exposed by @objectstack/service-ai (tracing, generateObject, query_data tool, ModelRegistry).
    • What's new
      • ChatbotEnhanced is now composed from Conversation, Message, PromptInput, Suggestion, Tool, Reasoning, Sources, and friends. Sticky-to-bottom scrolling, keyboard-aware textarea, file pill chips, copy/retry actions, and the streaming/error banners now match the shadcn-style AI surface used across the ecosystem.
      • Tool / reasoning / sources rendering: assistant messages with toolInvocations, reasoning, or sources automatically render the collapsible tool panels, the chain-of-thought block, and the citation pill. useObjectChat parses these directly from vercel/ai's UIMessage.parts stream — no extra wiring needed at the call site.
      • Model picker: optional models + selectedModelId + onModelChange props render an inline <select> in the prompt-input toolbar. Designed to be fed straight from GET /api/v1/ai/models (new in service-ai v1).
      • Trace links: new optional traceId on ChatMessage surfaces a small "trace" link on assistant messages — pair with the ai_traces object exposed by service-ai's auto-tracing.
      • New optional suggestions?: string[] prop renders a chip row in the empty state and forwards the picked suggestion to onSendMessage.
      • All vendored AI Elements (10 components) plus two missing shadcn primitives (button-group, input-group) are exported as a namespace — import { AIElements } from '@object-ui/plugin-chatbot' — so apps can compose bespoke chat surfaces without dropping back to the legacy primitives.
    • Type-level changes
      • @object-ui/types ChatMessage gains optional reasoning, sources, traceId fields, and a new ChatMessageSource interface.
      • ChatToolInvocation accepts the AI SDK v6 lifecycle states (input-streaming/input-available/output-available/output-error/ …) in addition to the legacy partial-call/call/result. args is now optional and accepts arbitrary shapes; new optional errorText field.
    • What hasn't changed
      • Public prop signature on FloatingChatbot, FloatingChatbotPanel, and the SDUI "chatbot" renderer.
      • Hook contracts: useObjectChat, useAgents, useFloatingChatbot.
      • SSR / Tailwind 4 / React 18+19 support.
    • Under the hood
      • New deps: streamdown, use-stick-to-bottom, shiki, motion, nanoid, @radix-ui/react-use-controllable-state, @radix-ui/react-slot, class-variance-authority.
      • Vendored sources live under src/elements/ with header comments pointing back to registry.ai-sdk.dev. Rule #7 No-Touch Zones are respected — packages/components/src/ui/** was not modified.

Patch Changes

  • Updated dependencies [3a8c754]
    • @object-ui/types@5.4.0
    • @object-ui/components@5.4.0
    • @object-ui/core@5.4.0
    • @object-ui/react@5.4.0

5.3.2

Patch Changes

  • @object-ui/types@5.3.2
  • @object-ui/core@5.3.2
  • @object-ui/react@5.3.2
  • @object-ui/components@5.3.2

5.3.1

Patch Changes

  • @object-ui/types@5.3.1
  • @object-ui/core@5.3.1
  • @object-ui/react@5.3.1
  • @object-ui/components@5.3.1

5.3.0

Patch Changes

  • @object-ui/types@5.3.0
  • @object-ui/core@5.3.0
  • @object-ui/react@5.3.0
  • @object-ui/components@5.3.0

5.2.1

Patch Changes

  • @object-ui/types@5.2.1
  • @object-ui/core@5.2.1
  • @object-ui/react@5.2.1
  • @object-ui/components@5.2.1

5.2.0

Patch Changes

  • Updated dependencies [de0c5e6]
  • Updated dependencies [9997cae]
  • Updated dependencies [b2d1704]
  • Updated dependencies [87bc8ff]
  • Updated dependencies [3ebba63]
  • Updated dependencies [a8d12ec]
  • Updated dependencies [70b5570]
  • Updated dependencies [aa063db]
  • Updated dependencies [d1442e3]
  • Updated dependencies [7c7400a]
    • @object-ui/types@5.2.0
    • @object-ui/core@5.2.0
    • @object-ui/react@5.2.0
    • @object-ui/components@5.2.0

5.1.1

Patch Changes

  • Updated dependencies [8955b9c]
    • @object-ui/components@5.1.1
    • @object-ui/types@5.1.1
    • @object-ui/core@5.1.1
    • @object-ui/react@5.1.1

5.1.0

Patch Changes

  • Updated dependencies [bd8447d]
  • Updated dependencies [fbd5052]
  • Updated dependencies [d51a577]
  • Updated dependencies [d1ec6a2]
  • Updated dependencies [cf30cc2]
  • Updated dependencies [5b80cfd]
  • Updated dependencies [d548d6b]
    • @object-ui/components@5.1.0
    • @object-ui/react@5.1.0
    • @object-ui/types@5.1.0
    • @object-ui/core@5.1.0

5.0.2

Patch Changes

  • @object-ui/components@5.0.2
  • @object-ui/react@5.0.2
  • @object-ui/types@5.0.2
  • @object-ui/core@5.0.2

5.0.1

Patch Changes

  • @object-ui/types@5.0.1
  • @object-ui/core@5.0.1
  • @object-ui/react@5.0.1
  • @object-ui/components@5.0.1

5.0.0

Patch Changes

  • Updated dependencies [8930b15]
  • Updated dependencies [95b6b21]
  • Updated dependencies [ddb08a7]
  • Updated dependencies [765d50f]
  • Updated dependencies [927187a]
  • Updated dependencies [bae8ba8]
  • Updated dependencies [8435860]
  • Updated dependencies [bb2ea48]
  • Updated dependencies [b14fe09]
  • Updated dependencies [a7bef6e]
  • Updated dependencies [74962b0]
  • Updated dependencies [3154334]
  • Updated dependencies [fa4c2cb]
  • Updated dependencies [7213027]
    • @object-ui/components@5.0.0
    • @object-ui/react@5.0.0
    • @object-ui/types@5.0.0
    • @object-ui/core@5.0.0

4.8.0

Patch Changes

  • @object-ui/types@4.8.0
  • @object-ui/core@4.8.0
  • @object-ui/react@4.8.0
  • @object-ui/components@4.8.0

4.7.0

Patch Changes

  • @object-ui/types@4.7.0
  • @object-ui/core@4.7.0
  • @object-ui/react@4.7.0
  • @object-ui/components@4.7.0

4.6.0

Patch Changes

  • Updated dependencies [3ee436d]
    • @object-ui/components@4.6.0
    • @object-ui/types@4.6.0
    • @object-ui/core@4.6.0
    • @object-ui/react@4.6.0

4.5.0

Patch Changes

  • Updated dependencies [ab5e281]
  • Updated dependencies [6b6afd1]
  • Updated dependencies [aa7855f]
  • Updated dependencies [170d89f]
    • @object-ui/types@4.5.0
    • @object-ui/components@4.5.0
    • @object-ui/core@4.5.0
    • @object-ui/react@4.5.0

4.4.0

Patch Changes

  • Updated dependencies [2bd45af]
    • @object-ui/components@4.4.0
    • @object-ui/types@4.4.0
    • @object-ui/core@4.4.0
    • @object-ui/react@4.4.0

4.3.1

Patch Changes

  • Updated dependencies [6b683c8]
    • @object-ui/components@4.3.1
    • @object-ui/react@4.3.1
    • @object-ui/types@4.3.1
    • @object-ui/core@4.3.1

4.3.0

Patch Changes

  • Updated dependencies [4e7bc1b]
  • Updated dependencies [8442c05]
    • @object-ui/components@4.3.0
    • @object-ui/react@4.3.0
    • @object-ui/types@4.3.0
    • @object-ui/core@4.3.0

4.2.1

Patch Changes

  • @object-ui/types@4.2.1
  • @object-ui/core@4.2.1
  • @object-ui/react@4.2.1
  • @object-ui/components@4.2.1

4.2.0

Patch Changes

  • @object-ui/components@4.2.0
  • @object-ui/react@4.2.0
  • @object-ui/types@4.2.0
  • @object-ui/core@4.2.0

4.1.0

Patch Changes

  • @object-ui/types@4.1.0
  • @object-ui/core@4.1.0
  • @object-ui/react@4.1.0
  • @object-ui/components@4.1.0

4.0.12

Patch Changes

  • @object-ui/types@4.0.12
  • @object-ui/core@4.0.12
  • @object-ui/react@4.0.12
  • @object-ui/components@4.0.12

4.0.11

Patch Changes

  • @object-ui/components@4.0.11
  • @object-ui/react@4.0.11
  • @object-ui/types@4.0.11
  • @object-ui/core@4.0.11

4.0.10

Patch Changes

  • @object-ui/types@4.0.10
  • @object-ui/core@4.0.10
  • @object-ui/react@4.0.10
  • @object-ui/components@4.0.10

4.0.9

Patch Changes

  • @object-ui/types@4.0.9
  • @object-ui/core@4.0.9
  • @object-ui/react@4.0.9
  • @object-ui/components@4.0.9

4.0.8

Patch Changes

  • @object-ui/components@4.0.8
  • @object-ui/react@4.0.8
  • @object-ui/types@4.0.8
  • @object-ui/core@4.0.8

4.0.7

Patch Changes

  • Updated dependencies [7c9b85c]
    • @object-ui/core@4.0.7
    • @object-ui/react@4.0.7
    • @object-ui/components@4.0.7
    • @object-ui/types@4.0.7

4.0.6

Patch Changes

  • 1b6dc64: fix: complete Tailwind v3→v4 migration cleanup

    • Rename deprecated flex-shrink-0shrink-0 and flex-grow-Ngrow-N (Tailwind v4 dropped the long-form aliases). Affects data-table, fields/index, FileField, ChatbotEnhanced, FloatingChatbotPanel, ProcessDesigner, HistoryPanel, KanbanEnhanced, KanbanImpl, plugin-timeline index, FlowDesigner, LayoutRenderer.
    • Replace theme(spacing.4) inside arbitrary-value [calc(...)] with literal 1rem in sidebar.tsx — theme() is deprecated in v4.
    • Remove obsolete v3-escape CSS overrides from index.css and sidebar-fixes.css. The component source now uses native v4 stacked data variants (group-data-[state=collapsed]:group-data-[collapsible=icon]:w-(--sidebar-width-icon)) which Tailwind v4 emits correctly without the manual overrides. Only the bespoke .sidebar-menu-button-icon-mode* rules are kept.
  • Updated dependencies [925051d]

  • Updated dependencies [1b6dc64]

    • @object-ui/components@4.0.6
    • @object-ui/types@4.0.6
    • @object-ui/core@4.0.6
    • @object-ui/react@4.0.6

4.0.5

Patch Changes

  • 1dc6061: fix(build): inline dynamic imports in library outputs

    Library vite build --lib outputs were emitting separate code-split chunks (rolldown-runtime-*.js, LookupField-*.js, etc.) when source files used React.lazy() / dynamic import(). When consumer apps re-bundled these multi-file dists, the library's per-chunk rolldown-runtime collided with the consumer's own runtime, causing "TypeError: i is not a function" at runtime when lazy components tried to register themselves (e.g. TextField in @object-ui/fields after 4.0.4).

    Adding output.inlineDynamicImports: true to all @object-ui/* library vite configs forces a single dist/index.js per package, which lets consumer bundlers handle the library as an opaque ESM module without identifier mismatches across chunks.

    Affected packages: components, fields, layout, plugin-aggrid, plugin-ai, plugin-calendar, plugin-charts, plugin-chatbot, plugin-dashboard, plugin-designer, plugin-detail, plugin-editor, plugin-form, plugin-gantt, plugin-grid, plugin-kanban, plugin-list, plugin-map, plugin-markdown, plugin-report, plugin-timeline, plugin-view, plugin-workflow.

  • Updated dependencies [1dc6061]

    • @object-ui/components@4.0.5
    • @object-ui/types@4.0.5
    • @object-ui/core@4.0.5
    • @object-ui/react@4.0.5

4.0.4

Patch Changes

  • d2b6ece: fix: externalize all bare imports in library builds

    Library builds (vite lib mode) now externalize every non-relative import instead of bundling third-party CJS dependencies into the published dist. This avoids inlined require("react") / require("react-dom") calls that cause Calling \require` for "react" in an environment that doesn't expose the `require` function` runtime errors when consumer apps re-bundle the published dist.

    Specifically fixes:

    • @object-ui/plugin-dashboard no longer inlines react-grid-layout (and its transitive react-draggable / react-resizable CJS bundles). react-grid-layout is now declared as a peer dependency so consumers install a single ESM-friendly copy.
    • @object-ui/components, @object-ui/plugin-calendar, @object-ui/plugin-charts, @object-ui/plugin-designer no longer inline react-i18next / i18next / use-sync-external-store CJS shims.
    • All plugin packages now use a unified external: (id) => !/^[./]/.test(id) && !id.startsWith(__dirname) rule, ensuring future additions of CJS deps are automatically externalized.
  • Updated dependencies [d2b6ece]

    • @object-ui/components@4.0.4
    • @object-ui/types@4.0.4
    • @object-ui/core@4.0.4
    • @object-ui/react@4.0.4

4.0.3

Patch Changes

  • 4be43e2: Page-mode record forms (editMode: 'page'). New per-object metadata flag that opts a record's create/edit form into a dedicated full-screen route (/apps/:appName/:objectName/new, /apps/:appName/:objectName/record/:recordId/edit). Two new declarative actions navigate_create and navigate_edit open these routes from JSON action buttons. Default modal behavior is preserved for objects that do not set editMode.

    @object-ui/plugin-list & @object-ui/plugin-detail: ComponentRegistry singleton fix. Both plugins' Vite configs now mark all @object-ui/* packages as external so each plugin no longer bundles its own private copy of @object-ui/core. Cross-plugin component lookups now resolve correctly from the same singleton registry. plugin-list dist shrank from multi-MB to 67 kB (gzip 16 kB); plugin-detail to 124 kB (gzip 28 kB).

    @object-ui/app-shell CreateViewDialog churn fix. existingSet is now memoised on the joined string key of existingLabels rather than the raw array reference, preventing the name-suggest useEffect from re-firing on every parent render.

    CI fixes. ReportViewer conditional-formatting test now accepts both rgb(...) and hex color representations. ObjectView i18n mocks rewritten to mirror the real hook shapes (useObjectTranslation, useObjectLabel).

  • Updated dependencies [4be43e2]

    • @object-ui/types@4.0.3
    • @object-ui/core@4.0.3
    • @object-ui/react@4.0.3
    • @object-ui/components@4.0.3

4.0.1

Patch Changes

  • @object-ui/types@4.0.1
  • @object-ui/core@4.0.1
  • @object-ui/react@4.0.1
  • @object-ui/components@4.0.1

4.0.0

Patch Changes

  • Updated dependencies
    • @object-ui/types@4.0.0
    • @object-ui/components@4.0.0
    • @object-ui/core@4.0.0
    • @object-ui/react@4.0.0

3.4.0

Patch Changes

  • Updated dependencies [a2d7023]
  • Updated dependencies [f1ca238]
  • Updated dependencies [de881ef]
    • @object-ui/components@3.4.0
    • @object-ui/types@3.4.0
    • @object-ui/core@3.4.0
    • @object-ui/react@3.4.0

3.3.2

Patch Changes

  • @object-ui/types@3.3.2
  • @object-ui/core@3.3.2
  • @object-ui/react@3.3.2
  • @object-ui/components@3.3.2

3.3.1

Patch Changes

  • Updated dependencies [b429568]
    • @object-ui/components@3.3.1
    • @object-ui/types@3.3.1
    • @object-ui/core@3.3.1
    • @object-ui/react@3.3.1

3.3.0

Patch Changes

  • @object-ui/types@3.3.0
  • @object-ui/core@3.3.0
  • @object-ui/react@3.3.0
  • @object-ui/components@3.3.0

3.2.0

Patch Changes

  • @object-ui/types@3.2.0
  • @object-ui/core@3.2.0
  • @object-ui/react@3.2.0
  • @object-ui/components@3.2.0

3.1.5

Patch Changes

  • @object-ui/react@3.1.5
  • @object-ui/components@3.1.5
  • @object-ui/types@3.1.5
  • @object-ui/core@3.1.5

3.1.4

Patch Changes

  • @object-ui/types@3.1.4
  • @object-ui/core@3.1.4
  • @object-ui/react@3.1.4
  • @object-ui/components@3.1.4

3.1.3

Patch Changes

  • @object-ui/types@3.1.3
  • @object-ui/core@3.1.3
  • @object-ui/react@3.1.3
  • @object-ui/components@3.1.3

3.1.2

Patch Changes

  • @object-ui/types@3.1.2
  • @object-ui/core@3.1.2
  • @object-ui/react@3.1.2
  • @object-ui/components@3.1.2

3.1.1

Patch Changes

  • Updated dependencies
    • @object-ui/types@3.1.1
    • @object-ui/components@3.1.1
    • @object-ui/core@3.1.1
    • @object-ui/react@3.1.1

3.0.3

Patch Changes

  • @object-ui/types@3.0.3
  • @object-ui/core@3.0.3
  • @object-ui/react@3.0.3
  • @object-ui/components@3.0.3

3.0.2

Patch Changes

  • @object-ui/types@3.0.2
  • @object-ui/core@3.0.2
  • @object-ui/react@3.0.2
  • @object-ui/components@3.0.2

3.0.1

Patch Changes

  • Updated dependencies [adf2cc0]
    • @object-ui/react@3.0.1
    • @object-ui/components@3.0.1
    • @object-ui/types@3.0.1
    • @object-ui/core@3.0.1

3.0.0

Minor Changes

  • 87979c3: Upgrade to @objectstack v3.0.0 and console bundle optimization
    • Upgraded all @objectstack/* packages from ^2.0.7 to ^3.0.0
    • Breaking change migrations: Hub → Cloud namespace, definePlugin removed, PaginatedResult.value → .records, PaginatedResult.count → .total, client.meta.getObject() → client.meta.getItem()
    • Console bundle optimization: split monolithic 3.7 MB chunk into 17 granular cacheable chunks (95% main entry reduction)
    • Added gzip + brotli pre-compression via vite-plugin-compression2
    • Lazy MSW loading for build:server (~150 KB gzip saved)
    • Added bundle analysis with rollup-plugin-visualizer

Patch Changes

  • Updated dependencies [87979c3]
    • @object-ui/types@3.0.0
    • @object-ui/core@3.0.0
    • @object-ui/react@3.0.0
    • @object-ui/components@3.0.0

2.0.0

Major Changes

  • b859617: Release v1.0.0 — unify all package versions to 1.0.0

Patch Changes

  • Updated dependencies [b859617]
    • @object-ui/types@2.0.0
    • @object-ui/core@2.0.0
    • @object-ui/react@2.0.0
    • @object-ui/components@2.0.0

0.3.1

Patch Changes

  • Maintenance release - Documentation and build improvements
  • Updated dependencies
    • @object-ui/types@0.3.1
    • @object-ui/core@0.3.1
    • @object-ui/react@0.3.1
    • @object-ui/components@0.3.1