Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Zipstack/unstract
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.140.1
Choose a base ref
...
head repository: Zipstack/unstract
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
  • 5 commits
  • 13 files changed
  • 6 contributors

Commits on Nov 11, 2025

  1. UN-2586 [FEAT] Add email notification support for connector sharing (#…

    …1647)
    
    Implement notification functionality when connectors are shared with users.
    When a connector owner shares with specific users via PATCH request, the
    system now sends personalized email notifications to newly shared users.
    
    Changes:
    - Add notification service integration in ConnectorInstanceViewSet
    - Override partial_update() to detect newly shared users
    - Send email notifications via SharingNotificationService
    - Graceful error handling without breaking sharing operation
    
    The implementation follows the pattern used in pipeline sharing, using
    SendGrid for email delivery with dynamic templates.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-authored-by: Claude <[email protected]>
    johnyrahul and claude authored Nov 11, 2025
    Configuration menu
    Copy the full SHA
    6bfbe67 View commit details
    Browse the repository at this point in the history

Commits on Nov 12, 2025

  1. UN-2948 [FIX] Support API workflow testing from workflow page with pr…

    …oper queue routing (#1640)
    
    - Detect API workflows by connector type and route to correct queue
    - Handle missing pipeline_id when testing from workflow page
    - Skip pipeline updates and notifications in testing mode
    - Fix callback worker crash for API workflows without deployment
    
    Co-authored-by: Rahul Johny <[email protected]>
    muhammad-ali-e and johnyrahul authored Nov 12, 2025
    Configuration menu
    Copy the full SHA
    390c7fa View commit details
    Browse the repository at this point in the history
  2. UN-2994 [FIX] hitl rules issue fix (#1655)

    hitl rules issue fix
    vishnuszipstack authored Nov 12, 2025
    Configuration menu
    Copy the full SHA
    1834103 View commit details
    Browse the repository at this point in the history

Commits on Nov 13, 2025

  1. [MISC] Fixed notification plugin loading related issue (#1657)

    misc: Fixed notification plugin loading related issue
    chandrasekharan-zipstack authored Nov 13, 2025
    Configuration menu
    Copy the full SHA
    9cc47bd View commit details
    Browse the repository at this point in the history
  2. UN-2781 [FEAT] Add admin custom Stripe product creation support (#1651)

    * feat: Add admin custom Stripe product creation support
    
    This commit adds comprehensive support for admins to create custom Stripe
    subscription products for both Unstract and LLM Whisperer platforms.
    
    ## Frontend Changes
    
    ### Router Updates (Router.jsx)
    - Added dynamic import for LlmWhispererCustomCheckoutPage plugin component
    - Added public route `/llm-whisperer/custom-checkout` for LLM Whisperer
      custom plan checkout flow
    - Follows existing pattern with try/catch for Cloud-only features
    
    ### Main App Routes (useMainAppRoutes.js)
    - Added Unstract administration route at `/administration`
    - Protected with RequireAdmin wrapper (admin-only access)
    - Imported UnstractAdministrationPage component
    
    ### New Administration Page (UnstractAdministrationPage.jsx)
    - Plugin-loader pattern with try/catch for Cloud-only component
    - Falls back to "feature not available" message in OSS builds
    - Dynamically imports UnstractAdministration from Cloud plugins
    
    ## Backend Changes (Already Committed)
    
    The backend infrastructure was already added in previous commits:
    
    ### Subscription Routes (cloud_urls_v2.py)
    - Unstract admin endpoint: `/api/v1/unstract/admin/stripe/products/dynamic/`
    - LLM Whisperer admin endpoint: `/api/v1/llmwhisperer/admin/stripe/products/dynamic/portal/`
    
    ### Portal Proxy (subscription_v2/views.py)
    - `create_dynamic_stripe_product_portal_proxy()` method forwards LLM Whisperer
      admin requests to Portal service
    - Follows existing LLMWhispererService pattern for multi-backend architecture
    - Includes proper error handling and logging
    
    ### URL Patterns (subscription_v2/urls.py)
    - Added `admin_stripe_product_portal_proxy` view and URL pattern
    - Both endpoints protected with IsAuthenticated + IsAdmin permissions
    
    ## Architecture
    
    This implementation follows Unstract's plugin-based architecture:
    - OSS repo contains base routing and plugin-loader patterns
    - Cloud repo contains actual admin UI components (subscription-admin plugin)
    - Multi-backend support: Unstract uses local backend, LLM Whisperer proxies
      to Portal service
    - Graceful degradation for OSS builds (shows "Cloud-only feature" message)
    
    ## Related
    - Supersedes PR #1087 (monolithic admin UI)
    - Integrates checkout functionality from PR #1016
    - Consolidates router changes from PR #1558
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * chore: Add NOSONAR comments for plugin loading pattern
    
    Suppress SonarQube warnings for intentional empty catch blocks used in
    plugin loading architecture. These catch blocks are part of the graceful
    degradation pattern for Cloud-only features - when plugins are not available,
    the component remains undefined and React Router triggers NotFound page.
    
    This pattern is used throughout the codebase for optional plugin loading.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * style: Fix Prettier formatting for NOSONAR comments
    
    Move NOSONAR comments to separate lines to comply with Prettier formatting rules.
    Format multi-line Route component in useMainAppRoutes.js.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * fix: Correct NOSONAR comment placement for SonarQube
    
    Place NOSONAR comment inline with catch statement for proper recognition.
    SonarQube requires the suppression comment on the same line as the issue.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * fix: Add NOSONAR comments to suppress empty catch warnings
    
    Add minimal NOSONAR comments to suppress SonarQube warnings for intentional
    empty catch blocks in plugin loading pattern. These catch blocks are part of
    the graceful degradation architecture for Cloud-only features.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * path modified admin cusotm plans
    
    * UN-2861 [FEAT] Add RequireStaff permission for custom plans administration
    
    Add platform staff-only access control for custom Unstract subscription plans:
    - Add RequireStaff component to enforce platform staff access
    - Update custom plans route to use RequireStaff instead of RequireAdmin
    - Block access for open-source deployments (mock_org)
    
    Frontend Changes:
    - New RequireStaff.js component with isStaff and orgName validation
    - Update useMainAppRoutes.js to use RequireStaff for /admin/custom-plans route
    - Shows Unauthorized for non-staff users, NotFound for OSS deployments
    
    This complements the backend IsStaff permission class to ensure only platform
    staff can create custom Stripe products with dual pricing structure.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * Remove unused RequireStaff component
    
    Remove RequireStaff component as it's been replaced with inline staff
    checking pattern in route files. This avoids component dependency issues
    and follows the established Verticals pattern.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * Remove RequireStaff dependency from OSS routes
    
    Replace RequireStaff component wrapper with inline staff check using
    useSessionStore in an IIFE. This matches the pattern used in Cloud
    plugin routes and fixes the build error where RequireStaff component
    was deleted but still referenced.
    
    The inline check ensures:
    - Staff-only access to admin custom plans route
    - Hidden in open-source deployments (orgName === "mock_org")
    - No component import dependencies
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <[email protected]>
    
    * Fix Prettier formatting for staff check return statement
    
    * Refactor inline CSS to classes in UnstractAdministrationPage
    
    - Create UnstractAdministrationPage.css for fallback UI styling
    - Replace inline styles with className in UnstractAdministrationPage.jsx
    - Improves code maintainability and follows project's CSS patterns
    
    * Fix React Rules of Hooks violation in useMainAppRoutes
    
    - Move useSessionStore hook call to top level of function
    - Remove IIFE pattern that violated hooks rules
    - Simplify conditional rendering logic
    
    Fixes CodeRabbit review comment about hooks being called inside nested function.
    
    ---------
    
    Co-authored-by: Claude <[email protected]>
    Co-authored-by: Rahul Johny <[email protected]>
    3 people authored Nov 13, 2025
    Configuration menu
    Copy the full SHA
    9ba210b View commit details
    Browse the repository at this point in the history
Loading