Live App →

Changelog

Release history for Sentinel AI Studio. All dates are in 2026 unless otherwise noted.


v6.4 – Comprehensive AIF Extraction Support

Released: April 6, 2026

Major enhancement to Nexus document intelligence with comprehensive Alternative Investment Fund (AIF) extraction capabilities and flexible multi-format support.

AIF Extraction Engine

  • Multi-format support: Added 5+ AIF format variations with automatic detection and normalization (AIFExtraction, AIFStatementExtraction, AIFAccountStatementExtraction, AIFFlatStatementExtraction, NexusAifSoaExtraction)
  • Portfolio Companies Table: Interactive table displaying portfolio company holdings with MOIC (Multiple on Invested Capital) and IRR metrics, sortable by investment amount, current value, and performance indicators
  • Transaction History Table: Paginated display of AIF transaction history with capital calls, distributions, and NAV updates
  • Format-agnostic architecture: Type guards and normalization layers handle schema variations across different AMCs (Axis, Motilal Oswal, etc.) without breaking existing functionality

Type System Enhancements

  • PortfolioCompanyData: Portfolio company holdings with investment metrics (name, sector, invested_amount, current_value, moic, irr, status)
  • AIFStatementExtraction: New NEXUS format with normalized account info, holdings summary, and transaction arrays
  • AIFHolder / AIFNominee: Investor and nominee information structures
  • AIFInvestorDetails: Unified investor data model (primary holder, joint holders, guardian)
  • AIFHoldingSummary: Capital commitment, contribution, uncalled amounts, units, NAV, valuation
  • AIFTransaction: Transaction-level data with type, units, NAV, amount, charges

UI Components

  • PortfolioCompaniesTable: Full-featured table with:
    • Multi-column sorting (name, sector, invested_amount, current_value, MOIC, IRR)
    • Search/filter across company names and sectors
    • Aggregated statistics (total companies, total invested, total NAV)
    • Pagination with 20 items per page
  • TransactionsDataTable: Transaction history display with search and pagination
  • Enhanced AccountMetadataCard: Now handles complex nested objects (e.g., {name, pan}) instead of only scalar values using new metaVal() helper
  • AI Summary Card: Updated to render AIF-specific metadata and insights

Format Normalization

  • normalizeAIFStatementNexus(): Transforms new NEXUS format to component-compatible structure:
    • Maps account_infoaccount_statement
    • Converts holding_summary (singular) → holdings_summary (plural)
    • Extracts holder_1/2/3 → unified investor_details
    • Builds nominees array from individual nominee objects
    • Handles field name variations (capital_commitment vs commitment_amount, units_allocated vs units_allotted, etc.)
  • extractHolderInfo(): Validates and extracts holder details with null safety
  • buildNomineeArray(): Consolidates nominee objects into array structure

Type Guards

Added type guard functions for automatic format detection:

  • isAIFExtraction(): Portfolio companies format
  • isAIFAccountStatement(): Wrapped AccountStatement format
  • isAIFFlatStatement(): Flat formats (Format C/D/Generic)
  • isAIFStatement(): New structured format with transaction_count field
  • isNexusAifSoa(): Generic SOA format

Documentation

  • nexus.md: New “AIF Extraction Support” section documenting format variations, portfolio companies data, transaction history, account information, and normalization approach
  • Type coverage: 250+ lines of new TypeScript type definitions in types/index.ts

Files Changed

  • app/src/app/(dashboard)/nexus/documents/[docId]/page.tsx: +2,315 lines (AIF rendering components)
  • app/src/types/index.ts: +249 lines (AIF type definitions)
  • app/src/components/nexus/ai-summary-card.tsx: +94 lines (AIF metadata rendering)
  • docs/pages/nexus.md: AIF extraction documentation section
  • docs/pages/changelog.md: This entry

v6.3 – Nexus Documents List: Document Type Column & Live Polling

Released: March 8, 2026

Nexus Documents List

  • document_type column: The Type column in /nexus/documents now displays the AI-classified document type (document_type) instead of the product category (product_type). Each of the 11 document types renders with a distinct colour-coded badge (e.g. Factsheet → blue, Holdings → purple, Snapshot → indigo, Bankbook → green, AUM → rose).
  • 30-second live polling: useNexusDocuments now sets refetchInterval: 30_000 and staleTime: 30_000, matching the X-Poll-Interval: 30 / Cache-Control: no-store, max-age=30 headers returned by GET /documents/me. The documents list updates automatically without a manual refresh.

Hydration Fixes

  • chat-sidebar.tsx: toLocaleDateString() now pins locale to 'en-US' to prevent server/client locale mismatch causing React hydration errors.
  • document-card.tsx: Added suppressHydrationWarning to the relative-date <span> in DocumentCard to suppress hydration mismatch from new Date() timezone differences.

v6.2 – Nexus-in-Zen Integration & Auth Hardening

Released: March 3, 2026

Nexus document processing is now surfaced directly inside the Zen chat interface. The dashboard activity feed was rebuilt with real data, the auth cookie lifecycle was tightened, and the API client gained opt-in keepalive and suppressAuthEvent options for background operations.

Nexus Processing in Zen Chat

  • NexusProcessingIndicator component: When a Nexus-sourced document is attached to a Zen session, the chat page now renders a live status indicator that polls GET /chat/{sessionId}/documents/{docId}/status and displays the Nexus pipeline stage.
  • Session documents: ChatSession now carries a documents array (SessionDocument[]) with doc_id, filename, source, status, nexus_process_id, and nexus_job_id. The backend response is mapped in getChatSession.
  • getDocumentStatus API: New function in zen.ts polls GET /zen/chat/{sessionId}/documents/{docId}/status. Uses suppressAuthEvent: true so background polls do not trigger the global session-expired modal.
  • System message role: ChatMessage.role now includes 'system' (was 'user' | 'assistant' only). The backend occasionally injects system messages for pipeline status notifications; these are now rendered correctly.
  • deleteChatSession keepalive: Accepts an optional { keepalive: true } flag so the DELETE request survives page navigation (used for cleanup on tab close).

Dashboard Activity Feed

  • Real Zen sessions in activity feed: The dashboard now fetches GET /zen/chat/ via React Query and merges real session titles into the activity feed. Sessions titled “New Chat” are excluded.
  • Unified activity timeline: Zen and Nexus activity entries are sorted by timestamp and displayed in a single feed, replacing the previous placeholder-data implementation.

User-Scoped Documents Endpoint

  • getDocuments now calls /documents/me: The Nexus document list fetches only the authenticated user’s documents. Previously called /documents/ (admin-scoped). The same change was applied to lib/studio/services/nexus.ts → listDocuments().
  • Query string construction changed: Now uses URLSearchParams directly against studioApi.get instead of routing through nexusRequest.

API Client Enhancements

  • keepalive option: Passes keepalive: true to fetch for requests that must survive page unloads (cleanup on navigation).
  • suppressAuthEvent option: When set, a 401 response does not dispatch the global auth:session-expired event. Used for background polling loops that should not disrupt the user’s session state.
  • RequestOptions exported: Previously an unexported interface; now exported so gateway layers can pass typed options through.

Auth Layer Fixes

  • Stale cookie redirect loop fix: verifySession now deletes the session cookie before redirecting to /login when the JWT is invalid or malformed. Previously, leaving the stale cookie caused a redirect loop (middleware → / → layout → /login → middleware → …).
  • Removed redundant expiry check: Session expiry is now fully managed by the JWT itself. The separate expiresAt > Date.now() check in verifySession and hasValidSession was removed to avoid double-validation mismatch.
  • Proactive token refresh on mount: useActivityRefresh now checks on mount whether the token is already expired or near expiry and triggers a refresh immediately, rather than waiting for the next polling interval.

Hydration & Theme Fixes

  • Theme provider hydration fix: ThemeProvider initializes to 'light' (matching the server render) and syncs from localStorage in useLayoutEffect. Eliminates the flash-of-incorrect-theme on first paint.
  • Storage key: localStorage theme key confirmed as sentinel-theme-mode (was toolit-theme-mode in older builds).
  • Auth store key: Zustand persistence key confirmed as sentinel-auth-v2 (was toolit-auth-v2 in older builds).
  • useOnlineStatus refactored: Now uses useSyncExternalStore for hydration-safe SSR/CSR consistency.

New Types

Type Description
DocumentProcessingStatus 'processing' \| 'nexus_processing' \| 'completed' \| 'failed'
NexusProgress Live stage info from Nexus pipeline: current_stage, stages_completed, progress_pct, status
DocumentStatusResponse Full response from GET /chat/{sessionId}/documents/{docId}/status
SessionDocument Document record attached to a ChatSession

v6.1 – Production Hardening

Released: February 19, 2026

A major stability and correctness release focused on production readiness. The Nexus document detail page was rebuilt from scratch, the Zen chatbot was aligned to live API response shapes, and the auth layer was hardened.

Nexus Document Detail Page (Full Rebuild)

  • Introduced a 5-tab layout: Pipeline, Data, Insights, Costs, Export – each wired to live API data
  • Pipeline timeline: 10-stage animated progress visualization with V2 process-based polling
  • Extraction tables: Securities holdings with interactive data tables and asset allocation charts
  • Token usage: Per-stage cost breakdown with INR conversion and model attribution on the Costs tab
  • Export system: Holdings and underlying export types aligned to the backend schema
  • PDF viewer: Document fetch via getDocumentPdfUrl() with layout image support

Zen Chatbot API Alignment

  • Message ID fix: AI messages now correctly use response_message_id (was incorrectly using message_id)
  • Agent badges: agents_invoked array rendered as badges below AI responses
  • Web search indicator: meta.web_search string (“True”/”False”) parsed and displayed correctly
  • Guardrail null safety: guardrail: null handled gracefully without .passed access errors
  • File attachment chips: Uploaded file names shown as chips above user messages
  • Theme consistency: Replaced all hardcoded color classes with design system tokens

Auth and API Layer

  • In-memory token storage: Removed accessToken from Zustand persistence – now held in memory only
  • Removed BroadcastChannel: Cross-tab token sync removed (unnecessary with cookie-based refresh)
  • V2 progress normalization: Field names aligned (progress_percent to progress_pct, stages_completed array to count)
  • ProcessingStatus: Added 'completed' to the status union for V2 pipeline completion
  • New API functions: getDocumentPdfUrl() and getDocumentLayoutImages() added to nexus.ts

Type Corrections

  • SendMessageResponse: Removed phantom fields (session_id, sources, web_search_results)
  • UploadResponse: Added status, password_required, password_hint
  • ProcessProgress: Fixed field names to match the V2 endpoint
  • ExportType: Changed to 'holdings' | 'underlying' (was 'excel' | 'json' | 'csv')

v1.4.2 – API Alignment, Zen UI Cleanup, Test Restructure

Released: February 16, 2026

Comprehensive alignment of the API layer with BFF middleware routes, V2 process-based polling, Zen UI refinements, and a complete test suite restructure.

API Layer

  • Nexus API: Deprecated getJobDetailedStatus, aligned extraction and doc-fetch calls with middleware routes
  • Zen API: Fixed document_ids field (was document_id), added skip_guardrail parameter, added uploadSessionDocument function
  • Types: Updated SendMessageResponse and ProcessProgress for V2 pipeline compatibility

Hooks and Pages

  • useProcessProgress: New hook for process_id-based progress polling (V2 pipeline)
  • use-results.ts: Rewritten for process-based polling instead of the deprecated job-based approach
  • History page: Uses getDocument for enrichment instead of a deprecated endpoint

Zen UI Cleanup

  • Added Home button to the chat sidebar for returning to the dashboard
  • Removed user profile dropdown from the Zen header (consolidated into the global header)

Test Suite Restructure

  • Replaced 19 overlapping test files with 14 focused, screen-based specs
  • New organization: screens/ (auth, dashboard, nexus, zen), infra/ (health, routing, errors), cross-cutting/ (navigation, responsive)
  • Test asset directory structure: static/assets/middleware/, zen/, nexus/
  • Total: 165 tests across 18 files (17 spec files + 1 fixture file)

v1.4.1 – Logout Redirect Fix

Released: February 2, 2026

Critical bug fix for the logout redirect issue in the ECS-deployed environment, plus documentation alignment.

Bug Fixes

  • Logout Redirect (P0): Fixed GET /api/auth/logout using internal ECS hostname for redirect. Now reads X-Forwarded-Host and X-Forwarded-Proto headers set by the ALB for correct external URL construction
  • Auth Routing: Server Actions now correctly route to Studio Backend (not Zen/Chatbot) for login, register, and refresh flows via encrypted HttpOnly cookies

Documentation

  • Deployment guide aligned with the 5-service registry architecture
  • Environment variables documentation split into build-time vs runtime sections
  • Security headers documented (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
  • Automated deploy script usage documented (deployment/scripts/deploy.sh)

v1.4.0 – Full-Stack Service Alignment

Released: February 2, 2026

Major infrastructure and routing overhaul establishing the unified BFF pattern for all API calls.

New Features

  • Unified Routing Layer: Added knowledgeApi client for the ingestion backend with graceful degradation
  • Deploy Script: One-command deploy.sh handling ECR push, ECS force-deploy, and CloudFront invalidation
  • CDN Caching Headers: Immutable Cache-Control for _next/static assets (1-year max-age)
  • Security Headers: X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy added to all responses
  • Environment Config: Committed .env.dev with the full 5-service backend registry

Bug Fixes

  • ECS Auth Failure (P0): Added STUDIO_API_URL and SESSION_SECRET to the ECS task definition
  • Nexus 404 in ECS (P0): Added /api/v1 suffix to nexusApiUrl in the serverless config
  • Search Routing (P1): Rerouted search functions to the ingestion backend (was calling chatbot, returning 404)
  • Docker Compose: Added missing build args (agents, knowledge) and runtime vars (studio, session)

v1.2.0 – Nexus Stage Observability

Released: January 24, 2026

Introduced the processing timeline component and rebuilt the results page for full pipeline stage observability.

New Features

  • Processing Timeline Component: Visual 10-stage pipeline progress with animated status indicators
  • Stage Card Component: Detailed per-stage view showing token usage, duration, and output preview
  • Entity Switcher Component: Multi-entity document support with dropdown, tabs, and cards variants
  • Results Page Rebuild: Complete redesign with stage observability and enhanced extraction display
  • Enhanced Activity Feed: Shows actual file names, confidence scores, and product types

Bug Fixes

  • Auth Redirect: Fixed redirect from non-existent /dashboard to /nexus
  • Dashboard Metrics: Real API data for token usage and costs (removed hardcoded placeholder values)
  • Confidence Score Normalization: Consistent 0-100 scale across all components
  • Register Redirect: Added redirect query parameter support

v1.0.1 – Initial Patch

Released: January 2026

  • Fixed blank page rendering for unauthenticated users (replaced return null with a loading spinner showing “Redirecting to login…”)

For full release notes with file-level change details, see the releases directory.


Last Updated: April 6, 2026