Skip to content

chore: release packages#2415

Closed
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Closed

chore: release packages#2415
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@object-ui/app-shell@13.3.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.

Patch Changes

  • 443360a: Action params support a visible CEL predicate — the param dialog omits a param
    when it evaluates false, against the same scope as action visible (features /
    user / app / data). Fixes the create-user form offering a Phone Number field
    the default backend rejects ("Phone numbers require the phoneNumber auth plugin"):
    paired with the framework gating that param on features.phoneNumber, the form
    now follows the plugin — no phone field unless the opt-in phoneNumber auth plugin
    is loaded. filterVisibleParams is exported + unit-tested (feature-off hides,
    feature-on shows, malformed predicate fails open).

  • 9442310: feat(console-ai): key AI chat conversations on (user, app, product), not on surface (ADR-0057 P1)

    The console rendered AI chat through parallel shells that forked the
    conversation
    : the Studio design copilot scoped its thread as
    studio:${packageId}:${agent} while the full-page /ai/build focus view scoped
    on the agent alone — so opening the same app in both showed an empty "Build
    with AI" copilot beside an active full-page build thread (indistinguishable from
    data loss).

    Per ADR-0057 (surface = view · conversation = model · product = binding
    axis
    ), conversations are now keyed on (user, app, product):

    • New pure, unit-tested chatConversationScope({ appId, product }) +
      chatProductOfAgent(name) helper (hooks/chatScope.ts) is the single place
      the scope key is formed. product is the ADR-0063 axis (ask | build),
      derived from the resolved agent — never a per-surface choice.
    • StudioAiCopilot and the full-page AiChatPage both resolve
      app:${packageId}:${product} for a package-scoped surface (the Studio copilot
      editing package X and the /ai/build?package=X "Edit with AI" focus view now
      resume ONE shared thread). The legacy studio: surface prefix is dropped.
    • A generic /ai/:agent visit with no ?package= degrades to the product alone
      (build / ask) — unchanged behaviour for that surface.

    Enablement stays on the single access-filtered agent-catalog gate
    (useAiSurfaceEnabled, ADR-0068) — a seat-less user's empty catalog hides the
    whole AI surface. No layout change.

  • 9442310: feat(console-ai): one declarative surface→agent resolver (ADR-0057 P2)

    The console re-implemented the ADR-0063 surface→agent chain in ~5 places, each
    spelled slightly differently — and ConsoleLayout carried an AI-Studio-off
    downgrade special case that existed nowhere else. This collapses them into one
    pure, unit-tested resolver so ADR-0063 (exactly two products ask/build,
    bound by surface — no roster, no per-turn classifier) becomes a structural
    guarantee.

    • New hooks/surfaceAgent.ts: resolveSurfaceAgent(surface, { agents, appDefaultAgent, aiStudioEnabled }) + SURFACE_DEFAULT. app.defaultAgent is
      bounded to ask/build (alias-aware) — a withdrawn tenant custom agent is
      rejected, not passed through, so no roster is representable (ADR-0057 open
      question Add default props to all components to prevent collapse in designer #4). The AI-Studio-off build → ask downgrade is folded in ONCE.
    • StudioAiCopilot (studio-build → build) and the console FAB (default → ask)
      resolve through it. The FAB keeps chore(deps): bump lucide-react from 0.574.0 to 0.575.0 #771's "prefer build when the catalog unlocks
      it and nothing pinned a product" by passing that as its default PRODUCT input —
      so the resolver still owns bounding + the downgrade, which now also applies to
      the chore(deps): bump lucide-react from 0.574.0 to 0.575.0 #771 preference (closing the leak where an authoring-disabled deployment
      could still open build).
    • ConsoleLayout's bespoke !aiStudioEnabled && isBuildAgent(...) downgrade is
      deleted; it passes the raw app.defaultAgent and the resolver downgrades.

    Ships a unit table proving the ADR-0063 rows: Studio→build, other→ask,
    AI-Studio-off downgrade, app.defaultAgent bounded (valid override wins, roster
    rejected), alias-aware catalog resolution, empty catalog → inert (ADR-0025).

  • 9138e68: fix(metadata-admin): authenticate console MetadataClient requests (Bearer token)

    Studio / metadata-admin surfaces issued /api/v1/meta/* requests (list types,
    ?package=… reads, _drafts, the /meta root) that came back 401 unauthenticated in the token-based console, while the runtime data adapter's
    reads (/meta/object|view|app) succeeded — so the same page showed some
    metadata requests failing and others working.

    Root cause: useMetadataClient and MetadataProvider's draft-preview client
    constructed MetadataClient without a fetch, so it fell back to the bare
    globalThis.fetch and sent no Authorization header. The console
    authenticates by a Bearer token in localStorage (auth-session-token) — there
    is no session cookie — so those requests were unauthenticated. A same-origin
    cookie deployment masks the bug, which is why it went unnoticed and regressed
    twice.

    Both sites (and every future console surface) now construct through a single
    createConsoleMetadataClient factory that bakes in createAuthenticatedFetch
    (Bearer token + X-Tenant-ID + Accept-Language), matching the runtime data
    adapter. This is additive for cookie deployments — credentials is untouched,
    so a same-origin session cookie still flows. A
    metadata-client-auth.ratchet.test.ts guard forbids a bare
    new MetadataClient( elsewhere in app-shell so authentication can't silently
    regress again.

  • 2fb38ed: fix(app-shell): propagate action-param visible predicate through resolveActionParams

    The create-user phone fix (feat(core,app-shell): action params honor a 'visible' predicate; hide create-user phone when plugin off #2406) gated the phoneNumber param with
    visible: 'features.phoneNumber == true', but resolveActionParam dropped
    visible when flattening raw spec params into ActionParamDef — so
    ActionParamDialog's filterVisibleParams never saw the predicate and the
    phone field kept rendering even with the phoneNumber auth plugin off.

    Propagate visible in all three resolve branches (inline / field-backed /
    missing-field), unwrapping the spec's { dialect, source } ExpressionInput
    envelope to a plain CEL string. Completes the create-user phone fix end to end.

  • Updated dependencies [443360a]

  • Updated dependencies [94d00d4]

  • Updated dependencies [6a74160]

    • @object-ui/core@13.3.0
    • @object-ui/auth@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/data-objectstack@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/layout@13.3.0
    • @object-ui/plugin-editor@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/collaboration@13.3.0
    • @object-ui/permissions@13.3.0
    • @object-ui/providers@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/auth@13.3.0

Minor Changes

  • 94d00d4: feat(auth): phone number + password sign-in on the login page

    The login page's password mode now accepts an email OR a phone number as the
    identifier and routes by shape — email → /sign-in/email, phone →
    /sign-in/phone-number (better-auth phoneNumber plugin, framework#2780). It
    coexists with the existing phone-OTP mode.

    • Gated on features.phoneNumber (phoneNumber plugin enabled). Unlike phone-OTP
      it needs no SMS service, so it uses that coarser capability flag, not
      features.phoneNumberOtp. When the flag is off the field stays email-only.
    • New AuthClient.signInWithPhonePassword(phoneNumber, password) wired through
      AuthContext / AuthProvider / useAuth.
    • New normalizePhoneIdentifier / looksLikePhoneIdentifier helpers that mirror
      the backend's normalizePhoneNumber exactly (strip [\s\-().], validate
      ^\+?[0-9]{6,15}$, no forced E.164 / country code — the backend stores the
      light-stripped form, so anything heavier would break the lookup).
    • SSO stays email-only (a phone-shaped identifier no longer attempts domain
      routing).

    Only works for accounts that have both a phone number and a password set;
    phone-only accounts set a password on first OTP sign-in.

Patch Changes

  • Updated dependencies [6a74160]
    • @object-ui/types@13.3.0

@object-ui/components@13.3.0

Minor Changes

  • 6a74160: Sharing-rule form: pick, don't type. Three new widget-hint field components make
    the generic object form render pickers where an admin previously had to type
    machine data (driven by the framework widget hints on sys_sharing_rule;
    generalizes the capability-multiselect pattern). All degrade to the underlying
    type renderer when a widget is unregistered.

    • object-ref — choose a registered object by name (searchable Combobox),
      backed by the new DataSource.getObjects() (ObjectStackAdapter lists code-
      and DB-defined objects via /api/v1/meta/object), falling back to a
      sys_metadata query. Stores the object's name.
    • filter-condition — a visual criteria builder (FilterBuilder) scoped to
      the fields of the object chosen in a sibling field (via getObjectSchema),
      round-tripping the stored MongoDB-style FilterCondition JSON. Criteria the
      builder can't represent (or invalid JSON) fall back to a raw-JSON editor, with
      an always-available "Edit as JSON" toggle — nothing is hidden or lost.
    • recipient-picker — a record picker whose target object follows a sibling
      recipient_type (user→sys_user, team→sys_team, business_unit/
      unit_and_subordinates→sys_business_unit, position→sys_position), storing the
      value the evaluator matches on (a record id, or the position name). Resets
      the stored id when the type changes.

    Wiring: the three keys join DATA_SOURCE_FIELD_TYPES (form.tsx) so the form
    threads dataSource + dependentValues to them, and INLINE_EXCLUDED_FIELD_TYPES
    (they're authored in the record form, not a grid cell). DataSource.getObjects()
    is optional on the interface; the ObjectStack adapter implements it.

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/i18n@13.3.0
    • @object-ui/react-runtime@13.3.0
    • @object-ui/sdui-parser@13.3.0

@object-ui/data-objectstack@13.3.0

Minor Changes

  • 6a74160: Sharing-rule form: pick, don't type. Three new widget-hint field components make
    the generic object form render pickers where an admin previously had to type
    machine data (driven by the framework widget hints on sys_sharing_rule;
    generalizes the capability-multiselect pattern). All degrade to the underlying
    type renderer when a widget is unregistered.

    • object-ref — choose a registered object by name (searchable Combobox),
      backed by the new DataSource.getObjects() (ObjectStackAdapter lists code-
      and DB-defined objects via /api/v1/meta/object), falling back to a
      sys_metadata query. Stores the object's name.
    • filter-condition — a visual criteria builder (FilterBuilder) scoped to
      the fields of the object chosen in a sibling field (via getObjectSchema),
      round-tripping the stored MongoDB-style FilterCondition JSON. Criteria the
      builder can't represent (or invalid JSON) fall back to a raw-JSON editor, with
      an always-available "Edit as JSON" toggle — nothing is hidden or lost.
    • recipient-picker — a record picker whose target object follows a sibling
      recipient_type (user→sys_user, team→sys_team, business_unit/
      unit_and_subordinates→sys_business_unit, position→sys_position), storing the
      value the evaluator matches on (a record id, or the position name). Resets
      the stored id when the type changes.

    Wiring: the three keys join DATA_SOURCE_FIELD_TYPES (form.tsx) so the form
    threads dataSource + dependentValues to them, and INLINE_EXCLUDED_FIELD_TYPES
    (they're authored in the record form, not a grid cell). DataSource.getObjects()
    is optional on the interface; the ObjectStack adapter implements it.

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/types@13.3.0

@object-ui/fields@13.3.0

Minor Changes

  • 6a74160: Sharing-rule form: pick, don't type. Three new widget-hint field components make
    the generic object form render pickers where an admin previously had to type
    machine data (driven by the framework widget hints on sys_sharing_rule;
    generalizes the capability-multiselect pattern). All degrade to the underlying
    type renderer when a widget is unregistered.

    • object-ref — choose a registered object by name (searchable Combobox),
      backed by the new DataSource.getObjects() (ObjectStackAdapter lists code-
      and DB-defined objects via /api/v1/meta/object), falling back to a
      sys_metadata query. Stores the object's name.
    • filter-condition — a visual criteria builder (FilterBuilder) scoped to
      the fields of the object chosen in a sibling field (via getObjectSchema),
      round-tripping the stored MongoDB-style FilterCondition JSON. Criteria the
      builder can't represent (or invalid JSON) fall back to a raw-JSON editor, with
      an always-available "Edit as JSON" toggle — nothing is hidden or lost.
    • recipient-picker — a record picker whose target object follows a sibling
      recipient_type (user→sys_user, team→sys_team, business_unit/
      unit_and_subordinates→sys_business_unit, position→sys_position), storing the
      value the evaluator matches on (a record id, or the position name). Resets
      the stored id when the type changes.

    Wiring: the three keys join DATA_SOURCE_FIELD_TYPES (form.tsx) so the form
    threads dataSource + dependentValues to them, and INLINE_EXCLUDED_FIELD_TYPES
    (they're authored in the record form, not a grid cell). DataSource.getObjects()
    is optional on the interface; the ObjectStack adapter implements it.

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/providers@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-chatbot@13.3.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.

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0

@object-ui/types@13.3.0

Minor Changes

  • 6a74160: Sharing-rule form: pick, don't type. Three new widget-hint field components make
    the generic object form render pickers where an admin previously had to type
    machine data (driven by the framework widget hints on sys_sharing_rule;
    generalizes the capability-multiselect pattern). All degrade to the underlying
    type renderer when a widget is unregistered.

    • object-ref — choose a registered object by name (searchable Combobox),
      backed by the new DataSource.getObjects() (ObjectStackAdapter lists code-
      and DB-defined objects via /api/v1/meta/object), falling back to a
      sys_metadata query. Stores the object's name.
    • filter-condition — a visual criteria builder (FilterBuilder) scoped to
      the fields of the object chosen in a sibling field (via getObjectSchema),
      round-tripping the stored MongoDB-style FilterCondition JSON. Criteria the
      builder can't represent (or invalid JSON) fall back to a raw-JSON editor, with
      an always-available "Edit as JSON" toggle — nothing is hidden or lost.
    • recipient-picker — a record picker whose target object follows a sibling
      recipient_type (user→sys_user, team→sys_team, business_unit/
      unit_and_subordinates→sys_business_unit, position→sys_position), storing the
      value the evaluator matches on (a record id, or the position name). Resets
      the stored id when the type changes.

    Wiring: the three keys join DATA_SOURCE_FIELD_TYPES (form.tsx) so the form
    threads dataSource + dependentValues to them, and INLINE_EXCLUDED_FIELD_TYPES
    (they're authored in the record form, not a grid cell). DataSource.getObjects()
    is optional on the interface; the ObjectStack adapter implements it.

@object-ui/console@13.3.0

Patch Changes

  • 94d00d4: feat(auth): phone number + password sign-in on the login page

    The login page's password mode now accepts an email OR a phone number as the
    identifier and routes by shape — email → /sign-in/email, phone →
    /sign-in/phone-number (better-auth phoneNumber plugin, framework#2780). It
    coexists with the existing phone-OTP mode.

    • Gated on features.phoneNumber (phoneNumber plugin enabled). Unlike phone-OTP
      it needs no SMS service, so it uses that coarser capability flag, not
      features.phoneNumberOtp. When the flag is off the field stays email-only.
    • New AuthClient.signInWithPhonePassword(phoneNumber, password) wired through
      AuthContext / AuthProvider / useAuth.
    • New normalizePhoneIdentifier / looksLikePhoneIdentifier helpers that mirror
      the backend's normalizePhoneNumber exactly (strip [\s\-().], validate
      ^\+?[0-9]{6,15}$, no forced E.164 / country code — the backend stores the
      light-stripped form, so anything heavier would break the lookup).
    • SSO stays email-only (a phone-shaped identifier no longer attempts domain
      routing).

    Only works for accounts that have both a phone number and a password set;
    phone-only accounts set a password on first OTP sign-in.

    • @object-ui/react-runtime@13.3.0
    • @object-ui/sdui-parser@13.3.0

@object-ui/cli@13.3.0

Patch Changes

  • Updated dependencies [6a74160]
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0

@object-ui/collaboration@13.3.0

Patch Changes

  • Updated dependencies [6a74160]
    • @object-ui/types@13.3.0

@object-ui/core@13.3.0

Patch Changes

  • 443360a: Action params support a visible CEL predicate — the param dialog omits a param
    when it evaluates false, against the same scope as action visible (features /
    user / app / data). Fixes the create-user form offering a Phone Number field
    the default backend rejects ("Phone numbers require the phoneNumber auth plugin"):
    paired with the framework gating that param on features.phoneNumber, the form
    now follows the plugin — no phone field unless the opt-in phoneNumber auth plugin
    is loaded. filterVisibleParams is exported + unit-tested (feature-off hides,
    feature-on shows, malformed predicate fails open).
  • Updated dependencies [6a74160]
    • @object-ui/types@13.3.0

@object-ui/layout@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0

@object-ui/mobile@13.3.0

Patch Changes

  • Updated dependencies [6a74160]
    • @object-ui/types@13.3.0

@object-ui/permissions@13.3.0

Patch Changes

  • Updated dependencies [6a74160]
    • @object-ui/types@13.3.0

@object-ui/plugin-ai@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0

@object-ui/plugin-calendar@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/plugin-detail@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/mobile@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-charts@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-dashboard@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-designer@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/data-objectstack@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/plugin-form@13.3.0
    • @object-ui/plugin-grid@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-detail@13.3.0

Patch Changes

  • @object-ui/i18n@13.3.0

@object-ui/plugin-editor@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0

@object-ui/plugin-form@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/permissions@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-gantt@13.3.0

Patch Changes

  • a506e6d: ObjectGantt now supports the api data source for both read and write-back.
    Previously provider: 'api' logged "API provider not yet implemented" and rendered
    nothing, and every write-back (reschedule, dependency edit, delete, drawer
    inline-edit) was hard-wired to the context ObjectQL dataSource + objectName,
    so the api provider's write config was never used.

    All reads and writes now flow through a single adapter resolved by
    resolveDataSource(schema.data, dataSource): object → context DataSource
    (unchanged), apiApiDataSource (executes the read/write HttpRequest
    config), value → in-memory ValueDataSource. A pure-api view needs no
    objectName and no context dataSource prop. Object-backed views are behavior-
    preserving. Lookup/master_detail quick-filter option domains still resolve from
    the context object backend (they degrade to distinct in-row values when absent).

  • 42b36c4: 新增逐任务预警描边(甘特图产品化补齐:依赖校验、行级只读完整性、预警描边、树筛选、写后回读、刷新按钮(7 项) #2436 第 3 项):视图配置 borderColorField 指向
    记录上的预警颜色字段(常为服务端计算的超期/临期字段),该行条形在保留
    原有填充色的同时,以该颜色描边并加 2px 光晕——任务条、里程碑菱形、
    汇总条均生效。语义色名(red/orange/…)映射为调色板 hex,其余 CSS 颜色
    原样透传;空值不描边。开启关键路径高亮时,关键路径样式在其标记行上优先。

  • 8a7d5af: 拖拽连线增加内建校验与宿主否决钩子(甘特图产品化补齐:依赖校验、行级只读完整性、预警描边、树筛选、写后回读、刷新按钮(7 项) #2436 第 1、2 项)。落点为锁定行
    (locked)或分组行(type: 'group')时,悬停不再高亮、松手不再创建;
    成环依赖(直接回边、跨层级传递回边)基于全量任务集检测并拒绝——不受
    折叠子树导致可见连线缺边的影响。新增 onBeforeDependencyCreate(source, target, type) 钩子,在内建校验通过后调用,返回 false 可否决本次连线
    (即 DHTMLX onBeforeLinkAdd / Syncfusion actionBegin 惯例)。
    wouldCreateDependencyCyclescheduling 导出并单测覆盖。

  • 0b03b34: 快速筛选改为树感知(甘特图产品化补齐:依赖校验、行级只读完整性、预警描边、树筛选、写后回读、刷新按钮(7 项) #2436 第 4 项):命中任务的全部祖先链一并保留。
    此前 displayTasks 是平铺过滤,项目/产品等分组行本身没有可筛字段值,
    一筛就被丢掉,命中的子任务成孤儿、树结构被打散。现在祖先随命中下级
    自动保留、无命中下级时照常剔除,多分支命中共享祖先不重复。

  • Updated dependencies [443360a]

  • Updated dependencies [6a74160]

    • @object-ui/core@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/plugin-detail@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-grid@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/mobile@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-kanban@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/plugin-detail@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-map@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0

@object-ui/plugin-markdown@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0

@object-ui/plugin-report@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/fields@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/plugin-grid@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/plugin-timeline@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/mobile@13.3.0

@object-ui/plugin-tree@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/react@13.3.0

@object-ui/plugin-view@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/plugin-form@13.3.0
    • @object-ui/plugin-grid@13.3.0
    • @object-ui/react@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/providers@13.3.0

Patch Changes

  • Updated dependencies [6a74160]
    • @object-ui/types@13.3.0

@object-ui/react@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/data-objectstack@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/i18n@13.3.0

@object-ui/runner@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/components@13.3.0
    • @object-ui/types@13.3.0
    • @object-ui/plugin-charts@13.3.0
    • @object-ui/plugin-kanban@13.3.0
    • @object-ui/react@13.3.0

@object-ui/tenant@13.3.0

Patch Changes

  • Updated dependencies [6a74160]
    • @object-ui/types@13.3.0

@object-ui/create-plugin@13.3.0

@object-ui/i18n@13.3.0

@object-ui/plugin-list@13.3.0

@object-ui/react-runtime@13.3.0

@object-ui/sdui-parser@13.3.0

object-ui@13.3.0

Patch Changes

  • Updated dependencies [443360a]
  • Updated dependencies [6a74160]
    • @object-ui/core@13.3.0
    • @object-ui/types@13.3.0

@vercel

vercel Bot commented Jul 13, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored Jul 13, 2026 11:18am

Request Review

@github-actions github-actions Bot force-pushed the changeset-release/main branch 7 times, most recently from bc70e95 to 82357ef Compare July 13, 2026 09:59
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 82357ef to 92ec6dc Compare July 13, 2026 11:18
@os-zhuang os-zhuang closed this Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant