v2.3.0
What's Changed
Aivory 2.3.0 introduces a complete workspace authorization model for teams, governed member invitations, workspace-scoped skills and prompts, and administrator-controlled enterprise OAuth/OIDC entry policies. This release also hardens authorization across conversations, projects, knowledge bases, files, tools, and generation flows; improves modal behavior during asynchronous updates; fixes Gemini thought-signature compatibility; and strengthens release-image publishing.
Workspace Roles and Authorization
- Adds three explicit workspace roles: administrator, member, and guest. The workspace creator remains the canonical owner and is represented as an administrator with owner-only authority where required.
- Gives workspace administrators management access across workspace conversations, projects, knowledge bases, members, invitations, policies, and audit history.
- Keeps member access bounded to shared workspace resources and resources they created, while allowing administrators to inspect private workspace content for governance.
- Makes guests read-only across workspace content. Creation, mutation, generation, feedback, branching, retry, rename, sharing, and deletion controls are hidden when unavailable and are independently rejected by the API.
- Removes archive behavior from workspace conversations for every role, preventing workspace threads from disappearing into a personal archived-chat view.
- Shows the creator alongside the private marker when an administrator views another member's private workspace conversation.
- Adds per-member permissions for creating projects, creating private conversations, creating skills and prompts, creating knowledge bases, adding knowledge-base files, and deleting knowledge-base content.
- Applies authorization at the API and storage layers instead of relying on frontend visibility. PostgreSQL and SQLite use equivalent authorization paths.
- Rechecks authority inside sensitive transactions so stale administrator requests cannot complete after a role downgrade or removal.
- Revokes generation work when a membership or workspace policy change removes the authority required to continue it.
Workspace Capability Policies
- Adds workspace-level model allowlists and makes the configured model set selectable from workspace management.
- Adds workspace restrictions for built-in and hosted tools, MCP services, sandbox execution, image generation, knowledge bases, and file uploads.
- Adds an optional monthly member-credit ceiling scoped to workspace activity.
- Enforces capability policy when catalogs are listed and again when a request is executed, preventing clients from bypassing a hidden or disabled option with a direct API call.
- Keeps owner-only and administrator-only operations distinct, including administrator promotion, ownership transfer, and high-privilege invitation creation.
- Clears stale role-update loading state in the management UI and provides explicit loading, success, failure, and empty states for workspace administration requests.
Governed Workspace Invitations
- Replaces the legacy permanent workspace token flow with managed invitation records.
- Supports invitation role, optional exact-email binding, expiration, maximum-use limits, revocation, and usage tracking.
- Restricts administrator invitations to the workspace owner and defaults unrestricted invitations to the read-only guest role.
- Performs invitation authorization, validity checks, use-count updates, membership creation, and audit writes transactionally.
- Returns an existing member's actual stored role when they follow another invitation, avoiding temporary permission escalation in the client.
- Invalidates administrator invitations created by the former owner when workspace ownership is transferred.
- Prevents old permanent tokens, stale requests, concurrent consumption, removed invite creators, and ownership changes from bypassing current invitation governance.
- Adds a compact single-row invitation editor with styled role and expiry selectors, responsive wrapping, and no horizontal overflow.
- Adds workspace audit events for invitation lifecycle, member and role changes, policy updates, and ownership transfer.
Workspace Resource Library
- Renames the Skills page to Resource Library and adds a dedicated workspace scope for skills and prompt templates.
- Separates personal resources from workspace resources at storage, API, catalog, and conversation-execution boundaries.
- Allows workspace administrators and authorized members to create and manage workspace skills and prompts; guests remain read-only.
- Makes workspace resources available to conversations in that workspace without leaking them into personal or unrelated workspace catalogs.
- Adds the create-skills-and-prompts member permission to workspace role management.
- Aligns empty states across Files, Resource Library, Knowledge Bases, and Projects, including consistent typography and positioning in split file views.
- Fixes sidebar collapse and navigation shortcuts on macOS, including the workspace-aware new-chat shortcut behavior.
- Orders workspace library schema migrations before workspace indexes are created, preventing startup failures caused by a missing
workspace_idcolumn during upgrade.
Enterprise OAuth and OIDC Login Policy
- Adds administrator-controlled password-login availability without limiting configured OAuth/OIDC providers.
- Adds three unauthenticated entry modes: the regular login page, a provider picker, or immediate redirect to a selected provider.
- Falls back safely to the provider picker or login page when an automatic-redirect provider is unavailable, preventing redirect loops and inaccessible login screens.
- Adds required, optional, and disabled initial-password policies for accounts created through OAuth/OIDC.
- Separates public password registration from OAuth/OIDC automatic account provisioning, allowing existing third-party identities to log in while new automatic provisioning is disabled.
- Enforces disabled password authentication and password-management endpoints on the backend rather than only hiding frontend controls.
- Restricts identity linking and unlinking when the effective enterprise policy would make those operations unsafe.
- Validates policy changes against enabled, usable providers and the current administrator's linked identity to prevent an administrator from locking the installation out of every login method.
- Exposes the effective public policy without secrets, refreshes it across login and authenticated flows, and includes the new settings in administrator configuration backup and restore.
- Adds localized policy controls and error states in English, French, Japanese, Simplified Chinese, and Traditional Chinese.
Conversation and Content Safety
- Aligns workspace conversation controls with effective role and member permissions across the sidebar, composer, message actions, inline threads, project views, and conversation pages.
- Prevents read-only users from creating conversations or invoking edit, retry, regenerate, branch, feedback, rename, favorite, share, or delete actions.
- Preserves personal-space behavior outside a workspace; the new workspace restrictions are applied only when a workspace is active.
- Fixes the Knowledge Base detail page initialization order that could produce
Cannot access 'n' before initializationand render a blank page. - Fixes workspace member and audit authorization queries under PostgreSQL.
Gemini Thought-Signature Compatibility
- Filters Gemini parts that contain provider metadata or a thought signature but no text, inline data, function call, or function response payload.
- Prevents invalid requests where Gemini receives an uninitialized
dataoneof, which previously caused400responses in longer tool-enabled conversations. - Preserves thought signatures on parts that also contain a valid payload, maintaining provider reasoning continuity where supported.
- Adds regression coverage for metadata-only parts and valid signed content.
Dialog and Loading Experience
- Keeps dialogs centered while their width or height changes, avoiding the transient jump to the upper-left corner seen during tab changes.
- Animates geometry changes caused by tabs, validation messages, skeleton replacement, and asynchronously loaded content.
- Continues an in-progress resize transition from the currently painted dimensions so rapid updates do not snap back to an earlier size.
- Adds a restrained content transition when asynchronous data replaces a placeholder without changing the dialog's outer dimensions.
- Constrains dialog bodies to the viewport, preserves fixed header and footer regions, and avoids accidental horizontal scrolling.
- Honors reduced-motion preferences for resize and content transitions.
- Refines workspace invitation and settings dialogs for denser controls and more stable loading behavior.
CI and Documentation
- Serializes application image publishing per Git ref and cancels stale in-progress builds so an older
mainbuild cannot overwrite a newerlatestimage. - Passes the repository token explicitly to Docker metadata generation to improve release workflow reliability.
- Keeps semantic image tags for the application, sandbox runtime, and sandbox sidecar when
v2.3.0is published. - Updates project acknowledgements to Qdrant, Radix UI, and Linux Do.
Upgrade Notes
- Database schema changes are applied automatically at startup. Back up the database before upgrading and allow one application instance to finish migration before scaling the new version out.
- This release adds workspace role, permission, policy, invitation, audit, and resource-library schema. No manual SQL is required.
- Existing workspace owners remain administrators with owner authority. Existing legacy workspace role values are normalized by the new authorization layer.
- Existing personal conversations, projects, knowledge bases, skills, prompts, and files remain personal and retain their previous behavior.
- Review each workspace's member roles, per-member creation permissions, model allowlist, tool/MCP access, and capability switches after upgrade.
- Review Authentication and Registration settings before disabling password login or enabling automatic provider redirect. A ready OAuth/OIDC provider and a usable administrator identity are required for strict settings.
- For version-pinned Docker deployment, set
IMAGE_TAG=2.3.0and leaveSANDBOX_IMAGE_TAGunset so the application, sandbox runtime, and sandbox sidecar use the same release tag.
Validation
npm run typechecknpm run lintnpm run testnpm run buildgo test ./...fromserver/go build ./...fromserver/- Locale JSON validation with
jq empty git diff --check
Release Scope
- Workspace RBAC and governed invitations:
e384f91(feat(workspaces): add RBAC and governed invitations). - PostgreSQL workspace authorization:
867b7e5(fix(workspaces): support PostgreSQL authorization queries). - Knowledge Base detail initialization:
4100a41(fix(kb): initialize detail state before workspace lookup). - Workspace interface and role-state fixes:
98f284e,0955bd6,d977a65, and6ad107d. - Workspace resource library and migration ordering:
bca8875andc4092e5. - Enterprise OAuth/OIDC login policy:
edcea1e(feat(auth): add enterprise OAuth and OIDC login policy). - Gemini metadata-only part filtering:
edd586c(fix(gemini): filter invalid metadata-only parts). - Dialog geometry and asynchronous content transitions:
c2be598andacbb0a9. - Release workflow reliability:
e932240andbedd2e5. - Acknowledgements:
9867f01(docs: update acknowledgements).
Full Changelog: v2.2.13...v2.3.0