Back to Updates

Platform Update — November 6, 2026

ibl.ai Engineering
Application

Eleven services and packages moved in one week, led by a rewritten SSO module with generic OpenID Connect and Microsoft Entra sign-in, large-file offloading so chat reads PDFs over 600 pages, capability flags on every agent, a platform MCP server over a 79-route v1 facade, agent messaging channels, sandbox VMs on by default, an organization chooser in the auth app, and a default-deny edX firewall.

Platform digest covering releases from iblai/iblai-prod-images (platform pins 1.356.0 – 1.398.0) and iblai/iblai-web-frontend (SDK and app packages), published between 2026-10-30 and 2026-11-06.

Service / PackageImage / PinVersion Span
dmiblai-dm-pro4.462.0-ai → 4.476.0-ai
osiblai-os-spa0.183.1 → 0.190.0
lmsiblai-lms-spa0.100.1 → 0.102.0
cliibl-cli7.33.0 → 7.39.0
authiblai-auth-spa2.9.0 → 2.10.1
web-containers@iblai/web-containers1.59.1 → 1.65.3
web-utils@iblai/web-utils2.18.0 → 2.21.2
data-layer@iblai/data-layer1.38.1 → 1.39.0
mcp@iblai/mcp1.37.1 → 1.41.0
agent-ai@iblai/agent-ai2.13.3 → 2.13.4
iblai-js@iblai/iblai-js2.59.1 → 2.65.4

iblai-dm-pro (4.462.0-ai → 4.476.0-ai)

DM SSO overhaul. The SSO module (ibl-dm-sso-app 0.4.0) was rewritten. DM now serves edX's /api/mfe_context document from GET /auth/providers/, so the auth SPA can discover providers from DM instead of edX. A new POST /auth/login/ proxies the auth SPA's password-grant form to edX (rate-limited by EDX_PROXY_LOGIN_RATE, default 20/5m), and GET /auth/sso-login-url/ and GET /auth/provider-slugs/ replace the edX SSO helpers. New SSO provider flavours: GENERIC_OIDC (a catch-all for any spec-compliant OpenID Connect IdP), MICROSOFT_GRAPH (one Azure app registration accepting both personal and work/school accounts from any Entra tenant, resolving email from Graph mail with a deliverable UPN fallback), ATOM_BROKER, CLOUD_OAUTH2 and IHP_OAUTH2. New accounts created through SSO take the IdP's username when valid and free, otherwise a generated one. Disposable-email blocking, already on magic-link sign-up, now applies to SSO account creation (ENABLE_DISPOSABLE_EMAIL_BLOCK, on by default; existing users are not affected). Per-IP rate limits on SSO, magic-link and edX-proxy endpoints respect THROTTLE_TRUSTED_PROXIES behind a load balancer. Per-provider STRIP_REDIRECT_URI_TRAILING_SLASH setting accommodates IdPs that exact-match a slashless callback URI. Deploy: migration 0002 (choices-only AlterField). Set THROTTLE_TRUSTED_PROXIES to the load-balancer addresses where it is not already set.

Channel credentials and agent channels. Two new subsystems lay the groundwork for connecting agents to external messaging channels:

  • ChannelCredential and native GET /v1/channels (catalog) and /v1/channels/credentials CRUD, with values masked by default and a separate unmask action. The creator owns a credential (new channel-credential-owner role). Credentials are verified with their provider on create and on value changes; a rejection is recorded on the credential. RBAC actions Ibl.Mentor/ChannelCredentials/* and Ibl.Mentor/ChannelCredentialsUnmask/action, seeded to no member role.
  • AgentChannel, ChannelAllowEntry, ChannelPairingRequest, ChannelIdentity, ChannelConversation, and native /v1/agents/{agent_id}/channels[/{channel}[/allow-entries|/pairings]]. Tenant admins connect credentials; the agent's owner can manage ordinary channel settings. Deleting a credential in use by an agent channel returns 409. RBAC actions Ibl.Mentor/AgentChannels/* and Ibl.Mentor/AgentChannelAccess/*.
  • Deploy: migrations core.0075, ibl_ai_mentor.0410_channelcredential, ibl_ai_mentor.0412_agent_channels, then seed_rbac_data.

Capability flags on mentors and sessions. capability_* booleans on Mentor and Session replace the tools many-to-many relationships as the source of truth for which tools run. New flags include capability_subagents (gates the deep agent's task tool) and Mentor.embed_enable_screen_sharing. The existing tool_slugs, session tools, mentor_tools and tool-list endpoints keep working and both stores stay in step. Turning a capability off on a mentor stops it on the next turn of existing sessions. Web Search and Web Fetch are one capability. Course Creation, Google Docs/Slides/Calendar, Deep Research and Study Mode are hidden from the tool lists but keep working where already enabled. Deploy: migration ibl_ai_mentor.0411_capability_flags, then seed_rbac_data, seed_tools, sync_capability_flags (add --sessions to repair session rows).

MCP v1 facade migration (Phases 1–2). Built-in MCP tools are now generated only from routes staged in the /v1 facade, named after the facade's SDK operations, with organization and user taken from the caller's credentials. No tool is built from a legacy /api/... URL. The Canvas user and Canvas course MCP servers are removed. A new platform MCP server at /mcp/platform serves sessions, projects, disclaimers, configurations, notifications, organization, LLMs, features, audit logs, and RBAC checks. Agent-create uses the staged /v1/agents/* routes. 29 /v1/analytics/* routes (overview, users, sessions, topics, chat history and reports, costs, content, financial, LLM usage, time update) are staged, taking the facade from 50 to 79 routes. Failed tool calls now return isError: true with the view's response body as the error text. Deploy: no migration. The ASGI image must ship /code/facade/routes.json. Mentors and external clients attached to the analytics, user, search or workflow servers lose generated tools until the routes are staged.

Large-file offloading in chat. On the graph runner, files too large for the active model stay in storage and the agent reads them through a read-only /uploads/ route, so large CSVs and PDFs over 600 pages no longer fail. Files that fit are sent inline as before. VM mentors without privacy rails get every session upload under /workspace/chat_uploads/, and the system prompt lists the exact paths. Threads stuck on an oversized file recover on their next turn; a provider's file rejection before any output retries once with the current turn's documents offloaded. POST users/<user_id>/chat/files/upload-url/ and the chat consumer allow PDF, text and Office files up to MENTOR_IN_CHAT_MAXIMUM_FILE_SIZE on graph-routed mentors. New optional settings: CHAT_FILE_OFFLOAD_ENABLED (default on), CHAT_FILE_INLINE_MAX_TOKENS, CHAT_FILE_PDF_INLINE_MAX_PAGES, CHAT_FILE_PDF_INLINE_MAX_BYTES, CHAT_FILE_IMAGE_INLINE_MAX_BYTES.

Isolated fetch proxy for document training. Optional isolated proxy for URL, web-crawler, multilingual and remote-file document fetches during training: ENABLE_TRAINING_FETCH_PROXY, TRAINING_FETCH_PROXY_URL, fetch_proxy_key credential. When enabled, fetches run on a separate host with no platform data; sitemap documents are refused. Off by default. CLI setting: IBL_DM.TRAINING_FETCH_PROXY_URL (default https://training.<BASE_DOMAIN>).

Multimodal capabilities after catalogue sync. Catalogue/route syncs now write default multimodal_capabilities for multimodal models. Vertex Gemini and Claude on Vertex are registered multimodal. get_multimodal_llm uses any provider's multimodal model instead of forcing non-OpenAI/Google providers onto gpt-4o. New settings: DEFAULT_MULTIMODAL_LLM_PROVIDER / DEFAULT_MULTIMODAL_LLM_MODEL (tenant-overridable; built-in openai / gpt-4o). Run seed_llm_registry on affected deployments.

Sandbox VM default for new agents. New mentors start with the sandbox virtual machine on and public egress, controlled by DEFAULT_MENTOR_ENABLE_VIRTUAL_MACHINE / DEFAULT_MENTOR_VIRTUAL_MACHINE_EGRESS (global defaults from env, with per-tenant overrides through Config). Existing mentors are not changed. Set a tenant override to false / none for tenants that should not get VMs by default.

Lesson context in the system prompt. When a chat payload carries an edX lesson_context, the agent system prompt names the learner's current lesson and says page content in the student's latest message comes from that lesson. Mentors with enable_prompt_caching miss the cache when the learner moves to a new lesson.

PHI clinical entity options. PHI clinical entity options now match the medical recognizer labels the app can serve; unsupported labels are rejected on mentor settings/template requests.

Chat auth refactor. Chat and session creation are now handled by a single unified authentication pipeline.

Deploy summary (DM): migrations core.0075, ibl_ai_mentor.0410–0412, ibl_dm_sso.0002. Post-migration commands: seed_rbac_data, seed_tools, sync_capability_flags [--sessions], seed_llm_registry.


iblai-os-spa (0.183.1 → 0.190.0)

Organization chooser. Organization switching is now handled by the auth app. Clicking the org switcher opens the auth app's chooser in its own tab. Embeds and the Chrome extension forward the switch request so the host page can navigate to the chooser. The desktop app (Tauri v0.95.31) also routes through the auth app.

MCP in the chat prompt box. The MCP server selector is now available directly in the OS chat composer, matching the SDK's chat-composer MCP integration.

Discovery sub-tab redesign. A redesigned Discovery sub-tab with access labels (mentor_visibility controls), a pill-style latest-features banner, and a new e2e journey covering Discovery audience and catalog.

History conversation list. The agent History conversation list is uncluttered for faster scanning.

Tenant and user metadata from storage. The OS reads tenant metadata from the tenant object and user metadata from localStorage, eliminating extra API calls. Saved org metadata syncs to localStorage on update.

RBAC for anonymous viewers. Anonymous viewers can now chat on anonymous-allowed mentors without hitting RBAC gates.

Embed organization switching. The embed's generated code answers the auth app's tenant-switch request, and the embed no longer reloads — it switches through /join.

Mobile layout. The app shell <main> no longer scrolls in the mobile apps; the Tauri CSS offsets the status bar.

Chrome extension v1.1.11. Silent runs, batched form actions, longer retries, and named rows.

Desktop app v0.95.31.


iblai-lms-spa (0.100.1 → 0.102.0)

Discussion tab conditional. The Discussion tab no longer displays when discussions are disabled for a course.

Profile sidebar shortcuts. Sidebar shortcuts now open the full profile component instead of a partial view.

Course intro video. The course About page now plays the course intro video inline.


ibl-cli (7.33.0 → 7.39.0)

edX default-deny WAF. The edX web-application firewall moves from block-lists to allow-lists: edx-lms-allow.yml and edx-studio-allow.yml list what is used and deny everything else, like dm.yml. Both files cover every host that reaches edX — the edX host, the unified API gateway, and each SPA's same-origin /backend/lms and /backend/studio. New rule key from_dm: true grants an exception to IBL_REVERSE_PROXY.MODSECURITY_DM_EGRESS_IPS, so the DM's requests to edX are never blocked. ibl global-proxy dm-ips (--add/--remove/--set) manages the IP list. The old edx-lms.yml and edx-studio.yml block-lists are removed. /styles/lms.css and /faq are also allowed to stop logging false positives.

Firewall targets for renamed SPAs. ibl global-proxy firewall targets (--add/--remove/--set) and IBL_REVERSE_PROXY.MODSECURITY_SPA_HOSTS cover SPAs on renamed domains (e.g. mentorai.<domain>, os.ibl.ai). Each listed host joins every configured file that targets the SPAs. The list lives in config.yml, so reinstalling a rule file with --force no longer loses it.

v1 facade analytics routes. routes.json ships the 29 /v1/analytics/* routes the SPAs call. dm.yml also allows /mcp/ on every DM target. Deploy: upgrade CLI, ibl config save, ibl global-proxy reload.

Isolated fetch proxy address. IBL_DM.TRAINING_FETCH_PROXY_URL (default https://training.<BASE_DOMAIN>).

DM SSO registration. IBL_DM.ENABLE_DM_SSO (default false) is now registered, so ibl render no longer stops on nodes that set it.


iblai-auth-spa (2.9.0 → 2.10.1)

Organization chooser. Organization switching is now handled inside the auth app. The chooser opens in its own tab, replacing the inline org-switch dropdown in each SPA. The login flow joins the tenant the login was started for. An expired forwarded token recovers instead of failing.


@iblai/web-containers (1.59.1 → 1.65.3)

Discovery sub-tab redesign. The discovery sub-tab, latest-features banner (pill-style), access labels, and mentor_visibility controls are redesigned.

Full profile components. Gradebook, skills, credentials, and the organization account sheet now open the full profile component instead of a partial view.

Create Agent with RBAC. The Create Agent form enforces RBAC permissions.

Conversation history. The profile history conversation list is uncluttered.

Transcript viewer. Transcript conversations render at a bigger size.

Google Drive picker. Users can get past Google Drive's cookie screen in the file picker.

Tenant metadata. The component reacts to tenant metadata changes in Advanced settings and reads user metadata from storage only.

Logo version. The logo version bumps after a light-logo upload, so the cached logo refreshes.

Embed tenant switching. Generated embed code answers the auth app's tenant-switch request; the embed re-renders in place.

Cowork panel. A panel Cowork turn stays alive on socket close; private skills are no longer assigned in panel contexts.


@iblai/web-utils (2.18.0 → 2.21.2)

Replaced-session guard. Chat history that arrives for a replaced session is ignored, preventing stale messages from appearing in a new session.

Tenant metadata from storage. useTenantObjectMetadata reads from the tenant object; the TenantProvider metadata fetch is dropped for the resolved tenant. User metadata from localStorage is synchronized on update.

Logo version hook. Per-organization logo version for cache busting.

Organization switching. Helpers for the auth-app org chooser flow, including embed address hand-off and desktop-app support.


@iblai/data-layer (1.38.1 → 1.39.0)

API types for v1 facade. Typed endpoints for the DM's MCP v1 facade migration and agent channel endpoints.


@iblai/mcp (1.37.1 → 1.41.0)

Rolls up the web-containers, data-layer, and web-utils changes above — discovery redesign, create-agent RBAC, logo version hooks, and org-chooser support.


@iblai/agent-ai (2.13.3 → 2.13.4)

Expired host session. The embed no longer replays an expired host session, preventing stale auth from being sent to the iframe.


@iblai/iblai-js (2.59.1 → 2.65.4)

Umbrella SDK package. Rolls up all agent-ai, web-containers, web-utils, data-layer, mcp, and auth changes listed above.