Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use#1547

Merged
jaseemjaskp merged 17 commits intomainfrom
feat/UN-1722-export-reminder-prompt-studio
Dec 24, 2025
Merged

UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use#1547
jaseemjaskp merged 17 commits intomainfrom
feat/UN-1722-export-reminder-prompt-studio

Conversation

@athul-rs
Copy link
Contributor

@athul-rsathul-rs commentedSep 20, 2025
edited
Loading

What

  • Added export reminder notification system for Prompt Studio projects that are actively used in deployments
  • Backend API endpoint to check if project is used in API Deployments, ETL Pipelines, Task Pipelines, or Manual Review
  • Frontend change tracking when users edit, add, or delete prompts
  • Yellow notification bar with immediate "Export Now" action
  • State management to clear notifications after successful export

Why

  • Users were confused when editing prompts in Prompt Studio for projects used in deployments, expecting changes to take effect immediately
  • By design, Prompt Studio projects must be exported as Tools for changes to take effect in deployments
  • No visual indication was provided to users that their changes needed to be exported

How

Backend Changes:

  • Extracted existing usage checking logic into reusable_check_tool_usage() helper method
  • Addedcheck_deployment_usage API endpoint that checks all deployment types
  • Returns proper message with specific deployment types where the tool is used

Frontend Changes:

  • Added state management forhasUnsavedChanges,deploymentUsageInfo in custom-tool-store
  • CreatedExportReminderBar component with yellow notification styling
  • Integrated change detection inDocumentParser for all prompt modifications
  • Added deployment usage checking inToolIde component with proper orchestration
  • Ensured both header and notification exports clear the reminder

Can this PR break any existing features. If yes, please list possible items. If no, please explain why.

No, this PR will not break any existing features because:

  • It only adds new functionality without modifying existing APIs or data structures
  • All changes are additive - new state variables, new components, and new endpoints
  • Existing export functionality remains unchanged and continues to work as before
  • The notification system is purely visual and doesn't interfere with existing workflows
  • Proper error handling ensures graceful degradation if API calls fail

Database Migrations

  • N/A (No database schema changes required)

Env Config

  • N/A (No new environment variables required)

Relevant Docs

  • Feature addresses UN-1722 JIRA ticket requirements

Related Issues or PRs

  • UN-1722: Export reminder for Prompt Studio projects in use

Dependencies Versions

  • N/A (No new dependencies added)

Notes on Testing

  • ✅ Tested change detection for editing, adding, and deleting prompts
  • ✅ Verified API correctly identifies all deployment types (API, ETL, Task, Manual Review)
  • ✅ Confirmed notification only shows when both conditions are met (changes + deployed)
  • ✅ Tested export functionality from both notification bar and header
  • ✅ Verified proper state clearing after successful export
  • ✅ Tested edge cases: tool not exported, API errors, export errors
  • ✅ Confirmed proper state reset when switching between tools

Screenshots

image

[Yellow notification bar will appear at the top of Prompt Studio when changes are made to projects that are actively deployed]

Checklist

I have read and understood theContribution Guidelines.

- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>
@coderabbitai
Copy link
Contributor

coderabbitaibot commentedSep 20, 2025
edited
Loading

Summary by CodeRabbit

Release Notes

  • New Features
    • Added tool deployment usage visibility to prevent conflicts during deletion
    • Added unsaved changes detection for custom tool modifications
    • Added export reminder notifications when modified tools are in active use

✏️ Tip: You can customize this high-level summary in your review settings.

Walkthrough

Adds backend checks and a GET endpoint to detect CustomTool usage in workflows/deployments and block deletion when in use. Frontend tracks unsaved changes, records deployment usage, shows a sticky export reminder for deployed tools, and provides an export action that clears the reminder.

Changes

Cohort / File(s)Change Summary
Backend — Tool usage checks & API
backend/prompt_studio/prompt_studio_core_v2/views.py
Added helpers_check_tool_usage_in_workflows(instance),_get_deployment_types(workflow_ids),_format_deployment_types_message(deployment_types); updateddestroy() to block deletion when tool is referenced (raisesToolDeleteError); addedcheck_deployment_usage GET endpoint returning{ is_used, deployment_types, message } and usesDeploymentUsageCheckError for failures.
Backend — Constants & Errors
backend/prompt_studio/prompt_studio_core_v2/constants.py
backend/prompt_studio/prompt_studio_core_v2/exceptions.py
IntroducedDeploymentType constants (API_DEPLOYMENT,ETL_PIPELINE,TASK_PIPELINE,HUMAN_QUALITY_REVIEW) and a newDeploymentUsageCheckError(APIException) (500) for endpoint failures.
Backend — URL binding
backend/prompt_studio/prompt_studio_core_v2/urls.py
Added routeprompt-studio/<uuid:pk>/check_deployment_usage/ (GET) mapped toPromptStudioCoreView.check_deployment_usage.
Frontend — Store (custom tools)
frontend/src/store/custom-tool-store.js
Added state fieldshasUnsavedChanges,lastExportedAt,deploymentUsageInfo; actionssetHasUnsavedChanges,setLastExportedAt,setDeploymentUsageInfo,markChangesAsExported;setCustomTool() resetshasUnsavedChanges and preserves deployment/export metadata.
Frontend — Tool IDE & export flow
frontend/src/components/custom-tools/tool-ide/ToolIde.jsx
Added deployment usage check (with concurrency guard / AbortController) that fetches/check_deployment_usage/, updatesdeploymentUsageInfo, togglesshowExportReminder/isExporting, and implementshandleExportFromReminder to POST export, callmarkChangesAsExported, hide reminder, and emit analytics; conditionally rendersExportReminderBar.
Frontend — Export reminder component & styles
frontend/src/components/custom-tools/export-reminder-bar/ExportReminderBar.jsx
frontend/src/components/custom-tools/export-reminder-bar/ExportReminderBar.css
NewExportReminderBar component (props:message,onExport,isExporting) rendering a sticky warning banner with icon and "Export Now" button; added CSS for layout/styling.
Frontend — Header integration
frontend/src/components/custom-tools/header/Header.jsx
AddedmarkChangesAsExported usage after successful export; updatedhandleConfirmForceExport dependency array to includehandleExport.
Frontend — Unsaved change tracking
frontend/src/components/custom-tools/document-parser/DocumentParser.jsx
frontend/src/components/helpers/custom-tools/CustomToolsHelper.js
DocumentParser setshasUnsavedChanges true when prompt fields change; helper addshasUnsavedChanges,deploymentUsageInfo,lastExportedAt to local updated tool shape.

Sequence Diagram(s)

sequenceDiagram    participant User    participant ToolIDE as Tool IDE (frontend)    participant Store as CustomTool Store    participant API as Backend API    participant DB as Backend Models    User->>ToolIDE: Edit prompt    ToolIDE->>Store: setHasUnsavedChanges(true)    Store-->>ToolIDE: state updated    alt Unsaved changes detected        ToolIDE->>API: GET /prompt-studio/{pk}/check_deployment_usage/        API->>DB: inspect ToolInstance/workflow relations (_check_tool_usage_in_workflows)        DB-->>API: dependent workflow IDs        API->>API: _get_deployment_types -> deployment_types, message        API-->>ToolIDE: { is_used, deployment_types, message }        ToolIDE->>Store: setDeploymentUsageInfo(data)    end    alt is_used == true and hasUnsavedChanges        ToolIDE->>ToolIDE: show ExportReminderBar(message)        User->>ToolIDE: click "Export Now"        ToolIDE->>API: POST /export        API-->>ToolIDE: success        ToolIDE->>Store: markChangesAsExported()        Store-->>ToolIDE: hasUnsavedChanges=false        ToolIDE->>ToolIDE: hide reminder    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 31.25% which is insufficient. The required threshold is 80.00%.You can run@coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly and specifically summarizes the main feature being added: an export reminder for Prompt Studio projects in use, matching the core functionality described throughout the PR.
Description check✅ PassedThe PR description is comprehensive and well-structured, covering all major template sections with detailed explanations of what was changed, why, and how, including testing notes and the required break-impact assessment.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branchfeat/UN-1722-export-reminder-prompt-studio

Thanks for usingCodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment@coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Contributor

filepathfunction$$\textcolor{#23d18b}{\tt{passed}}$$SUBTOTAL
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_logs}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_cleanup}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_cleanup\_skip}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_client\_init}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_image\_exists}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_image}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config\_without\_mount}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_run\_container}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_image\_for\_sidecar}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_sidecar\_container}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$$$\textcolor{#23d18b}{\tt{11}}$$$$\textcolor{#23d18b}{\tt{11}}$$

@sonarqubecloud
Copy link

Removed 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Contributor

@coderabbitaicoderabbitaibot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
backend/prompt_studio/prompt_studio_core_v2/views.py (1)

716-724:Fix the deployment types copy

When more than one deployment type references the project, the reminder still renders “API Deployment or Task Pipeline”, which implies exclusivity even though we know both deployments exist. Please switch the separators to “and” for two (and “, and” for 3+) types so the notification reflects the actual state.

Apply this diff:

-                    types_text = f"{types_list[0]} or {types_list[1]}"+                    types_text = f"{types_list[0]} and {types_list[1]}"                 else:-                    types_text = ", ".join(types_list[:-1]) + f", or {types_list[-1]}"+                    types_text = ", ".join(types_list[:-1]) + f", and {types_list[-1]}"
frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (1)

124-126:Consider simplifying useEffect dependencies.

The dependencieshasUnsavedChanges anddetails?.tool_id are redundant since they're already captured in thecheckDeploymentUsage callback's dependency array. The effect only needs to depend on the callback itself.

Apply this diff:

   useEffect(() => {     checkDeploymentUsage();-  }, [checkDeploymentUsage, hasUnsavedChanges, details?.tool_id]);+  }, [checkDeploymentUsage]);
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due toReviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and betweend40ea54 andafde3a8.

📒 Files selected for processing (7)
  • backend/prompt_studio/prompt_studio_core_v2/views.py (2 hunks)
  • frontend/src/components/custom-tools/document-parser/DocumentParser.jsx (1 hunks)
  • frontend/src/components/custom-tools/export-reminder-bar/ExportReminderBar.css (1 hunks)
  • frontend/src/components/custom-tools/export-reminder-bar/ExportReminderBar.jsx (1 hunks)
  • frontend/src/components/custom-tools/header/Header.jsx (3 hunks)
  • frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (6 hunks)
  • frontend/src/store/custom-tool-store.js (5 hunks)
🧰 Additional context used
🪛 Ruff (0.14.4)
backend/prompt_studio/prompt_studio_core_v2/views.py

155-158: Avoid specifying long messages outside the exception class

(TRY003)


655-655: Unused method argument:request

(ARG002)


733-733: Do not catch blind exception:Exception

(BLE001)


734-734: Uselogging.exception instead oflogging.error

Replace withexception

(TRY400)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (4)
frontend/src/components/custom-tools/export-reminder-bar/ExportReminderBar.jsx (1)

1-43:LGTM! Clean and well-structured component.

The component is simple, follows React best practices, includes proper PropTypes validation, and appropriately uses Ant Design components. The implementation correctly handles the loading state and provides a clear user action.

frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (3)

2-2:LGTM! Appropriate imports and state setup.

The new imports and state variables are properly introduced to support the export reminder feature. The integration with the custom tool store is clean.

Also applies to: 13-13, 51-54, 65-67


129-178:LGTM! Well-structured export handler.

ThehandleExportFromReminder function properly manages loading state, handles errors gracefully, updates the store, and includes appropriate PostHog tracking with error suppression. The implementation follows best practices.


289-295:LGTM! Correct conditional rendering.

The ExportReminderBar is properly displayed only when bothshowExportReminder is true and a deployment usage message exists. The component receives all required props correctly.

…ck patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Contributor

@coderabbitaicoderabbitaibot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (2)

115-121:Optimize callback dependencies to reduce recreations.

Usingdetails?.tool_id andsessionDetails?.orgId in the dependency array causes the callback to recreate whenever the parent objects change, even if the specific properties remain the same. While not breaking, this triggers unnecessary effect executions.

Destructure the needed values earlier or include the full objects:

 }, [-  details?.tool_id,+  details,   hasUnsavedChanges,   axiosPrivate,-  sessionDetails?.orgId,+  sessionDetails,   setDeploymentUsageInfo, ]);

Then extract the values at function start (as shown in the previous comment).


169-177:Consider stabilizing callback dependencies.

Including entire objects (details,sessionDetails) in the dependency array causes the callback to recreate whenever those objects change reference, even when the specific properties used remain unchanged.

If these objects change frequently, consider extracting only the needed properties:

const{ tool_id, created_by, tool_name}=details||{};const{ orgId, csrfToken, userId}=sessionDetails||{};consthandleExportFromReminder=useCallback(async()=>{// ... use extracted values},[tool_id,created_by,tool_name,orgId,csrfToken,userId,axiosPrivate,setAlertDetails,handleException,markChangesAsExported,setPostHogCustomEvent,]);

However, if the objects are relatively stable, the current approach is acceptable.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due toReviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and betweenafde3a8 andd151e6d.

📒 Files selected for processing (2)
  • frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (6 hunks)
  • frontend/src/store/custom-tool-store.js (5 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/store/custom-tool-store.js
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (5)
frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (5)

2-2:LGTM!

The new imports are appropriate for the added functionality.

Also applies to: 13-13


51-54:LGTM!

The store properties are correctly destructured and used throughout the component to coordinate the export reminder flow.


65-67:LGTM!

The ref pattern for concurrency control is correctly implemented, addressing the past review comment. TheisExporting state appropriately tracks the export operation for UI feedback.


123-125:LGTM!

The effect correctly triggers the deployment usage check when relevant dependencies change, with proper guarding inside the callback to prevent unnecessary API calls.


288-294:LGTM!

The conditional rendering correctly checks both the reminder flag and the presence of a usage message before showing the component. Props are appropriately passed toExportReminderBar.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

@athul-rs can you also post a screenshot for the FE changes?

Copy link
Contributor

@coderabbitaicoderabbitaibot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (3)
backend/prompt_studio/prompt_studio_core_v2/views.py (3)

127-144:Consider more explicit function name.

The current name_check_tool_usage is acceptable, but a more explicit name like_check_tool_usage_in_workflows would better convey that this checks workflow-level usage specifically.


714-717:Move imports to the top of the file.

Lazy imports can make code harder to follow and may hide circular dependency issues. Consider moving these imports to the top of the file.


725-725:Maintain deployment_type as an enum.

The deployment type strings should be defined as constants or an enum for better maintainability and to avoid string typos.

🧹 Nitpick comments (2)
backend/prompt_studio/prompt_studio_core_v2/views.py (2)

157-160:Extract error message to a constant.

The error message is hardcoded in the raise statement. Consider defining it as a constant in the exceptions or constants module for better maintainability and consistency.

Example:

# In prompt_studio_core_v2/constants.py or exceptions.pyTOOL_IN_USE_DELETE_ERROR="Failed to delete tool, its used in other workflows. Delete its usages first"

Then use it:

-            raise ToolDeleteError(-                "Failed to delete tool, its used in other workflows. "-                "Delete its usages first"-            )+            raise ToolDeleteError(TOOL_IN_USE_DELETE_ERROR)

773-778:Uselogger.exception for exception logging.

When logging in an exception handler, uselogger.exception() instead oflogger.error() to automatically include the stack trace, which aids debugging.

Apply this diff:

         except Exception as e:-            logger.error(f"Error checking deployment usage for tool {pk}: {e}")+            logger.exception(f"Error checking deployment usage for tool {pk}: {e}")             return Response(                 {"error": "Failed to check deployment usage"},                 status=status.HTTP_500_INTERNAL_SERVER_ERROR,             )
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due toReviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and betweend151e6d andb87a9db.

📒 Files selected for processing (1)
  • backend/prompt_studio/prompt_studio_core_v2/views.py (2 hunks)
🧰 Additional context used
🪛 Ruff (0.14.4)
backend/prompt_studio/prompt_studio_core_v2/views.py

157-160: Avoid specifying long messages outside the exception class

(TRY003)


695-695: Unused method argument:request

(ARG002)


773-773: Do not catch blind exception:Exception

(BLE001)


774-774: Uselogging.exception instead oflogging.error

Replace withexception

(TRY400)

🔇 Additional comments (1)
backend/prompt_studio/prompt_studio_core_v2/views.py (1)

722-751:Good: Active deployment filtering implemented.

The code correctly filters foris_active=True when checking API Deployments and Pipelines, ensuring only currently active deployments are considered. This addresses the previous concern about potential drift in behavior when deployments are enabled/disabled.

athul-rsand others added5 commitsNovember 14, 2025 12:24
This commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Contributor

@coderabbitaicoderabbitaibot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
backend/prompt_studio/prompt_studio_core_v2/constants.py (1)

183-189:Consider usingEnum for type safety and consistency.

This file usesEnum for similar constants (e.g.,IndexingStatus,ExecutionSource). UsingEnum forDeploymentType would provide better type safety and IDE support.

-class DeploymentType:-    """Deployment types where Prompt Studio tools can be used."""--    API_DEPLOYMENT = "API Deployment"-    ETL_PIPELINE = "ETL Pipeline"-    TASK_PIPELINE = "Task Pipeline"-    HUMAN_QUALITY_REVIEW = "Human Quality Review"+class DeploymentType(Enum):+    """Deployment types where Prompt Studio tools can be used."""++    API_DEPLOYMENT = "API Deployment"+    ETL_PIPELINE = "ETL Pipeline"+    TASK_PIPELINE = "Task Pipeline"+    HUMAN_QUALITY_REVIEW = "Human Quality Review"

If converted to Enum, update usage inviews.py to use.value when adding to the set (e.g.,DeploymentType.API_DEPLOYMENT.value).

backend/prompt_studio/prompt_studio_core_v2/views.py (2)

694-706:Reduce cognitive complexity by extracting message construction.

SonarCloud flags cognitive complexity of 20 (allowed: 15). Consider extracting the message construction logic into a helper method.

def_build_deployment_message(self,deployment_types:set)->str:"""Build user-friendly message listing deployment types."""ifnotdeployment_types:return""types_list=sorted(deployment_types)iflen(types_list)==1:types_text=types_list[0]eliflen(types_list)==2:types_text=f"{types_list[0]} or{types_list[1]}"else:types_text=", ".join(types_list[:-1])+f", or{types_list[-1]}"return (f"You have made changes to this Prompt Studio project. "f"This project is used in{types_text}. "f"Please export it for the changes to take effect in the deployment(s)."    )

Then incheck_deployment_usage:

deployment_info["message"]=self._build_deployment_message(deployment_types)

766-769:Improve exception handling with proper chaining and logging.

The static analysis hints are valid here:

  1. Uselogging.exception to include the stack trace
  2. Useraise ... from e to preserve the exception chain
         except Exception as e:-            logger.error(f"Error checking deployment usage for tool {pk}: {e}")-            raise DeploymentUsageCheckError(-                detail=f"Failed to check deployment usage: {str(e)}"-            )+            logger.exception(f"Error checking deployment usage for tool {pk}")+            raise DeploymentUsageCheckError(+                detail=f"Failed to check deployment usage: {e!s}"+            ) from e
frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (1)

92-147:Well-designed callback with proper race-condition handling.

ThecheckDeploymentUsage callback correctly:

  • ReadshasUnsavedChanges from the store before and after the async call to avoid acting on stale state (addresses past review feedback).
  • Uses refs (isCheckingUsageRef,hasCheckedForCurrentSessionRef) to prevent re-entrancy and ensure a single check per edit session.
  • Manages theAbortController to cancel pending requests when a new check starts.

Optional: safeguard against tool-switching edge case.

If the user switches tools while a deployment check is in-flight, the response might briefly populatedeploymentUsageInfo with data from the previous tool. The existing guards prevent showing an incorrect reminder, but you could eliminate the stale-data moment by capturingdetails?.tool_id at the start and verifying it still matches when the response arrives:

 const checkDeploymentUsage = useCallback(async () => {+  const currentToolId = details?.tool_id;   const currentHasUnsavedChanges =     useCustomToolStore.getState().hasUnsavedChanges;   if (-    !details?.tool_id ||+    !currentToolId ||     !currentHasUnsavedChanges ||     isCheckingUsageRef.current ||     hasCheckedForCurrentSessionRef.current   ) {     return;   }   ...   try {     const response = await axiosPrivate.get(-      `/api/v1/unstract/${sessionDetails?.orgId}/prompt-studio/${details?.tool_id}/check_deployment_usage/`,+      `/api/v1/unstract/${sessionDetails?.orgId}/prompt-studio/${currentToolId}/check_deployment_usage/`,       { signal: abortControllerRef.current.signal }     );     const usageInfo = response.data;+    // Ignore response if tool has changed+    if (details?.tool_id !== currentToolId) {+      return;+    }     setDeploymentUsageInfo(usageInfo);     ...   }   ... }, [   details?.tool_id,   ... ]);

This is a low-priority refinement since the current guards already prevent user-facing issues.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due toReviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and betweenb87a9db andb81210b.

📒 Files selected for processing (6)
  • backend/prompt_studio/prompt_studio_core_v2/constants.py (1 hunks)
  • backend/prompt_studio/prompt_studio_core_v2/exceptions.py (1 hunks)
  • backend/prompt_studio/prompt_studio_core_v2/urls.py (2 hunks)
  • backend/prompt_studio/prompt_studio_core_v2/views.py (6 hunks)
  • frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (7 hunks)
  • frontend/src/components/helpers/custom-tools/CustomToolsHelper.js (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (1)
frontend/src/hooks/usePostHogEvents.js (1)
  • setPostHogCustomEvent (83-85)
🪛 GitHub Check: SonarCloud Code Analysis
frontend/src/components/custom-tools/tool-ide/ToolIde.jsx

[warning] 203-205: Handle this exception or don't catch it at all.

See more onhttps://sonarcloud.io/project/issues?id=Zipstack_unstract&issues=AZpyHXNTCmsC-f813RFl&open=AZpyHXNTCmsC-f813RFl&pullRequest=1547

backend/prompt_studio/prompt_studio_core_v2/views.py

[failure] 695-695: Refactor this function to reduce its Cognitive Complexity from 20 to the 15 allowed.

See more onhttps://sonarcloud.io/project/issues?id=Zipstack_unstract&issues=AZpyHXI3CmsC-f813RFk&open=AZpyHXI3CmsC-f813RFk&pullRequest=1547

🪛 Ruff (0.14.8)
backend/prompt_studio/prompt_studio_core_v2/views.py

157-160: Avoid specifying long messages outside the exception class

(TRY003)


695-695: Unused method argument:request

(ARG002)


766-766: Do not catch blind exception:Exception

(BLE001)


767-767: Uselogging.exception instead oflogging.error

Replace withexception

(TRY400)


768-770: Within anexcept clause, raise exceptions withraise ... from err orraise ... from None to distinguish them from errors in exception handling

(B904)


769-769: Use explicit conversion flag

Replace with conversion flag

(RUF010)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (12)
backend/prompt_studio/prompt_studio_core_v2/exceptions.py (1)

116-122:LGTM!

The newDeploymentUsageCheckError exception follows the established pattern of other custom exceptions in this file (e.g.,IndexingAPIError,ExtractionAPIError). The implementation is consistent and appropriate for the deployment usage check feature.

backend/prompt_studio/prompt_studio_core_v2/urls.py (2)

58-60:LGTM!

The view binding follows the established pattern in this file and correctly maps the GET method tocheck_deployment_usage.


141-145:LGTM!

The URL pattern follows the existing conventions and correctly routes to the deployment usage check endpoint.

backend/prompt_studio/prompt_studio_core_v2/views.py (3)

8-8:LGTM!

Import moved to top of file as requested in previous review.


127-144:LGTM!

Good extraction of the usage-checking logic into a reusable helper method. The implementation is clear and the return type is well-documented.

Minor suggestion: could use a set comprehension for slightly more concise code, but the current implementation is readable:

dependent_wfs= {tool_instance.workflow_idfortool_instanceinexported_tool_instances_in_use}

146-161:LGTM!

Thedestroy method now properly uses the extracted helper and provides a clear error message when deletion is blocked due to active usage.

frontend/src/components/helpers/custom-tools/CustomToolsHelper.js (1)

40-42:LGTM! State initialization aligns with store changes.

The addition ofhasUnsavedChanges,deploymentUsageInfo, andlastExportedAt fields to the initial state is consistent with the new store shape and the PR's change-tracking objectives.

frontend/src/components/custom-tools/tool-ide/ToolIde.jsx (5)

2-2:LGTM! Imports and state setup are well-structured.

The additions ofuseCallback,useRef, andExportReminderBar are appropriate for the new deployment-usage-check and export-reminder functionality. The extended store destructuring and new local state/refs clearly support the feature requirements.

Also applies to: 13-13, 41-41, 52-56, 66-70


150-158:LGTM! Effect correctly orchestrates the deployment check.

The effect triggerscheckDeploymentUsage whenhasUnsavedChanges becomes true and resets the session flag when changes are cleared (after export). The dependency oncheckDeploymentUsage is appropriate and works correctly with the guards inside the callback.


161-167:LGTM! Cleanup ensures no leaked requests.

Aborting any in-flight request on unmount is the correct cleanup pattern.


170-219:LGTM! Export handler is robust and complete.

ThehandleExportFromReminder callback properly:

  • Sends the export request withforce_export: true.
  • CallsmarkChangesAsExported() to clear unsaved-changes state.
  • Hides the reminder and shows a success message.
  • Logs a PostHog event (with intentional error suppression on lines 203-205 to prevent telemetry from breaking the export flow).

The static analysis hint flagging lines 203-205 is afalse positive—catching and silently ignoring PostHog errors is the correct pattern here.


330-336:LGTM! Conditional rendering is correct.

TheExportReminderBar is shown only whenshowExportReminder is true anddeploymentUsageInfo?.message exists, with appropriate props passed for the export action.

Copy link
Contributor

@coderabbitaicoderabbitaibot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
backend/prompt_studio/prompt_studio_core_v2/constants.py (1)

183-190:Consider makingDeploymentType a real enum (orTextChoices) for stronger guarantees.

Centralizing these strings is good, but usingEnum/TextChoices would prevent typos and make API payloads/tests more robust. Also, if this ever becomes persisted, an enum makes migrations/validation safer (and keeps “Human in the Loop” consistent everywhere). Based on past review comments, maintain thisdeployment_type as an enum.

🧹 Nitpick comments (3)
backend/prompt_studio/prompt_studio_core_v2/exceptions.py (1)

116-118:Optional: adddefault_code for client-side handling.

Consider addingdefault_code = "deployment_usage_check_failed" so FE/clients can key off a stable error code instead of message text.

backend/prompt_studio/prompt_studio_core_v2/views.py (2)

146-183:Add an early return for emptyworkflow_ids + tighten types.

Ifworkflow_ids is empty, skip DB hits; also considerworkflow_ids: set[uuid.UUID] anddeployment_types: set[str] for clarity.

     def _get_deployment_types(self, workflow_ids: set) -> set:@@-        deployment_types: set = set()+        if not workflow_ids:+            return set()++        deployment_types: set[str] = set()

184-209:Message formatting is fine; consider a fixed ordering if UX wants priority over alphabetic.

sorted(deployment_types) is deterministic, but alphabetical ordering may not match desired prominence (e.g., API Deployment first).

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due toReviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and betweenb81210b andc711eef.

📒 Files selected for processing (3)
  • backend/prompt_studio/prompt_studio_core_v2/constants.py (1 hunks)
  • backend/prompt_studio/prompt_studio_core_v2/exceptions.py (1 hunks)
  • backend/prompt_studio/prompt_studio_core_v2/views.py (6 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
backend/prompt_studio/prompt_studio_core_v2/views.py (7)
backend/api_v2/models.py (1)
  • APIDeployment (43-154)
backend/pipeline_v2/models.py (2)
  • Pipeline (35-156)
  • PipelineType (38-42)
backend/workflow_manager/endpoint_v2/models.py (2)
  • WorkflowEndpoint (17-66)
  • ConnectionType (22-27)
backend/prompt_studio/prompt_studio_core_v2/constants.py (1)
  • DeploymentType (183-189)
backend/prompt_studio/prompt_studio_core_v2/exceptions.py (1)
  • DeploymentUsageCheckError (116-118)
backend/prompt_studio/prompt_studio_core_v2/models.py (1)
  • CustomTool (37-187)
backend/tool_instance_v2/models.py (1)
  • ToolInstance (19-65)
🪛 Ruff (0.14.8)
backend/prompt_studio/prompt_studio_core_v2/views.py

221-224: Avoid specifying long messages outside the exception class

(TRY003)


759-759: Unused method argument:request

(ARG002)


790-790: Do not catch blind exception:Exception

(BLE001)


791-791: Uselogging.exception instead oflogging.error

Replace withexception

(TRY400)


792-794: Within anexcept clause, raise exceptions withraise ... from err orraise ... from None to distinguish them from errors in exception handling

(B904)


793-793: Use explicit conversion flag

Replace with conversion flag

(RUF010)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (1)
backend/prompt_studio/prompt_studio_core_v2/views.py (1)

8-16:Imports look correctly promoted to the top-level and align with the new helpers.

Also applies to: 26-48

Copy link
Contributor

@coderabbitaicoderabbitaibot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due toReviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and betweenc711eef and11244c5.

📒 Files selected for processing (1)
  • backend/prompt_studio/prompt_studio_core_v2/views.py (6 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
backend/prompt_studio/prompt_studio_core_v2/views.py (7)
backend/api_v2/models.py (1)
  • APIDeployment (43-154)
backend/pipeline_v2/models.py (2)
  • Pipeline (35-156)
  • PipelineType (38-42)
backend/workflow_manager/endpoint_v2/models.py (2)
  • WorkflowEndpoint (17-66)
  • ConnectionType (22-27)
backend/prompt_studio/prompt_studio_core_v2/constants.py (1)
  • DeploymentType (183-189)
backend/prompt_studio/prompt_studio_core_v2/exceptions.py (2)
  • DeploymentUsageCheckError (116-118)
  • ToolDeleteError (62-64)
backend/prompt_studio/prompt_studio_core_v2/models.py (1)
  • CustomTool (37-187)
backend/tool_instance_v2/models.py (1)
  • ToolInstance (19-65)
🪛 Ruff (0.14.8)
backend/prompt_studio/prompt_studio_core_v2/views.py

760-760: Unused method argument:request

(ARG002)


791-791: Do not catch blind exception:Exception

(BLE001)


792-792: Uselogging.exception instead oflogging.error

Replace withexception

(TRY400)


793-795: Within anexcept clause, raise exceptions withraise ... from err orraise ... from None to distinguish them from errors in exception handling

(B904)


794-794: Use explicit conversion flag

Replace with conversion flag

(RUF010)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (5)
backend/prompt_studio/prompt_studio_core_v2/views.py (5)

8-8:LGTM! Imports are properly organized.

The new imports for deployment-type checking (APIDeployment, Pipeline, WorkflowEndpoint, DeploymentType, DeploymentUsageCheckError) are correctly placed at the top of the file and support the new functionality.

Also applies to: 15-15, 26-26, 35-35, 44-44


127-145:LGTM! Efficient implementation of usage checking.

The method correctly usesvalues_list().distinct() to fetch only workflow IDs at the database level, avoiding per-row iteration in Python. The implementation is clean and well-documented.


147-183:LGTM! Clean implementation with enum constants.

The method correctly usesPipeline.PipelineType enum constants instead of magic strings, and the mapping approach for pipeline types is clean and extensible. The comment on line 158 explicitly addresses the decision to include inactive deployments to prevent drift when they're re-enabled.


185-209:LGTM! Well-formatted user-facing messages.

The method properly sorts deployment types for deterministic output and handles different list lengths with correct grammar. The message is clear and actionable for users.


211-226:LGTM! Deletion blocking is correctly implemented.

The destroy method properly checks for tool usage before deletion and blocks it with a clear error message when the tool is referenced by workflows. The logging provides useful debugging information.

@github-actions
Copy link
Contributor

Test Results

Summary
  • Runner Tests: 11 passed, 0 failed (11 total)
  • SDK1 Tests: 66 passed, 0 failed (66 total)

Runner Tests - Full Report
filepathfunction$$\textcolor{#23d18b}{\tt{passed}}$$SUBTOTAL
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_logs}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_cleanup}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_cleanup\_skip}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_client\_init}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_image\_exists}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_image}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_container\_run\_config\_without\_mount}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_run\_container}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_get\_image\_for\_sidecar}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{runner/src/unstract/runner/clients/test\_docker.py}}$$$$\textcolor{#23d18b}{\tt{test\_sidecar\_container}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$$$\textcolor{#23d18b}{\tt{11}}$$$$\textcolor{#23d18b}{\tt{11}}$$
SDK1 Tests - Full Report
filepathfunction$$\textcolor{#23d18b}{\tt{passed}}$$SUBTOTAL
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$$$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_success\_on\_first\_attempt}}$$$$\textcolor{#23d18b}{\tt{2}}$$$$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$$$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retry\_on\_connection\_error}}$$$$\textcolor{#23d18b}{\tt{2}}$$$$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$$$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_non\_retryable\_http\_error}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$$$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retryable\_http\_errors}}$$$$\textcolor{#23d18b}{\tt{3}}$$$$\textcolor{#23d18b}{\tt{3}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$$$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_post\_method\_retry}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_platform.py}}$$$$\textcolor{#23d18b}{\tt{TestPlatformHelperRetry.test\_retry\_logging}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$$$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_success\_on\_first\_attempt}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$$$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_retry\_on\_errors}}$$$$\textcolor{#23d18b}{\tt{2}}$$$$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/test\_prompt.py}}$$$$\textcolor{#23d18b}{\tt{TestPromptToolRetry.test\_wrapper\_methods\_retry}}$$$$\textcolor{#23d18b}{\tt{4}}$$$$\textcolor{#23d18b}{\tt{4}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_connection\_error\_is\_retryable}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_timeout\_is\_retryable}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_retryable\_status\_codes}}$$$$\textcolor{#23d18b}{\tt{3}}$$$$\textcolor{#23d18b}{\tt{3}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_non\_retryable\_status\_codes}}$$$$\textcolor{#23d18b}{\tt{5}}$$$$\textcolor{#23d18b}{\tt{5}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_http\_error\_without\_response}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_os\_error\_retryable\_errno}}$$$$\textcolor{#23d18b}{\tt{5}}$$$$\textcolor{#23d18b}{\tt{5}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_os\_error\_non\_retryable\_errno}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestIsRetryableError.test\_other\_exception\_not\_retryable}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_exponential\_backoff\_without\_jitter}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_exponential\_backoff\_with\_jitter}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_max\_delay\_cap}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCalculateDelay.test\_max\_delay\_cap\_with\_jitter}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_successful\_call\_first\_attempt}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_retry\_after\_transient\_failure}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_max\_retries\_exceeded}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_max\_time\_exceeded}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_retry\_with\_custom\_predicate}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_no\_retry\_with\_predicate\_false}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_exception\_not\_in\_tuple\_not\_retried}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryWithExponentialBackoff.test\_delay\_would\_exceed\_max\_time}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_default\_configuration}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_environment\_variable\_configuration}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_max\_retries}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_max\_time}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_base\_delay}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_invalid\_multiplier}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_jitter\_values}}$$$$\textcolor{#23d18b}{\tt{2}}$$$$\textcolor{#23d18b}{\tt{2}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_custom\_exceptions\_only}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_custom\_predicate\_only}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_both\_exceptions\_and\_predicate}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestCreateRetryDecorator.test\_exceptions\_match\_but\_predicate\_false}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_retry\_platform\_service\_call\_exists}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_retry\_prompt\_service\_call\_exists}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_platform\_service\_decorator\_retries\_on\_connection\_error}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestPreconfiguredDecorators.test\_prompt\_service\_decorator\_retries\_on\_timeout}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_warning\_logged\_on\_retry}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_info\_logged\_on\_success\_after\_retry}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{tests/utils/test\_retry\_utils.py}}$$$$\textcolor{#23d18b}{\tt{TestRetryLogging.test\_exception\_logged\_on\_giving\_up}}$$$$\textcolor{#23d18b}{\tt{1}}$$$$\textcolor{#23d18b}{\tt{1}}$$
$$\textcolor{#23d18b}{\tt{TOTAL}}$$$$\textcolor{#23d18b}{\tt{66}}$$$$\textcolor{#23d18b}{\tt{66}}$$

@sonarqubecloud
Copy link

Copy link
Contributor

@coderabbitaicoderabbitaibot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
backend/prompt_studio/prompt_studio_core_v2/views.py (1)

759-795:Address the previously flagged issues in this endpoint.

The issues in this method have already been comprehensively documented in a previous review comment:

  1. Line 760: Unusedrequest parameter should be renamed to_request
  2. Line 784:list(deployment_types) produces non-deterministic ordering; usesorted(deployment_types)
  3. Line 792: Uselogger.exception(...) instead oflogger.error(...) to capture full stack trace
  4. Line 794: Removestr(e) from the error detail to avoid exposing internal implementation details
  5. Lines 793-795: Add exception chaining withraise ... from e

These issues are also confirmed by static analysis (Ruff ARG002, BLE001, TRY400, B904, RUF010).

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to Reviews > Disable Cache setting

Knowledge base: Disabled due toReviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between11244c5 and016e8e7.

📒 Files selected for processing (2)
  • backend/prompt_studio/prompt_studio_core_v2/views.py
  • frontend/src/components/custom-tools/tool-ide/ToolIde.jsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/components/custom-tools/tool-ide/ToolIde.jsx
🧰 Additional context used
🧬 Code graph analysis (1)
backend/prompt_studio/prompt_studio_core_v2/views.py (8)
backend/api_v2/models.py (1)
  • APIDeployment (43-154)
backend/pipeline_v2/models.py (2)
  • Pipeline (35-156)
  • PipelineType (38-42)
backend/workflow_manager/endpoint_v2/models.py (2)
  • WorkflowEndpoint (17-66)
  • ConnectionType (22-27)
backend/prompt_studio/prompt_studio_core_v2/constants.py (1)
  • DeploymentType (183-189)
backend/prompt_studio/prompt_studio_core_v2/exceptions.py (2)
  • DeploymentUsageCheckError (116-118)
  • ToolDeleteError (62-64)
backend/prompt_studio/prompt_studio_core_v2/models.py (1)
  • CustomTool (37-187)
backend/tool_instance_v2/models.py (1)
  • ToolInstance (19-65)
backend/prompt_studio/prompt_studio_registry_v2/serializers.py (1)
  • PromptStudioRegistryInfoSerializer (17-32)
🪛 Ruff (0.14.10)
backend/prompt_studio/prompt_studio_core_v2/views.py

760-760: Unused method argument:request

(ARG002)


791-791: Do not catch blind exception:Exception

(BLE001)


792-792: Uselogging.exception instead oflogging.error

Replace withexception

(TRY400)


793-795: Within anexcept clause, raise exceptions withraise ... from err orraise ... from None to distinguish them from errors in exception handling

(B904)


794-794: Use explicit conversion flag

Replace with conversion flag

(RUF010)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (5)
backend/prompt_studio/prompt_studio_core_v2/views.py (5)

8-8:LGTM: Imports are appropriate for the new functionality.

The new imports forAPIDeployment,Pipeline,WorkflowEndpoint,DeploymentType, andDeploymentUsageCheckError are correctly placed and support the deployment usage checking feature.

Also applies to: 15-15, 26-26, 35-35, 44-44


127-146:LGTM: Efficient implementation of usage checking.

The method correctly usesvalues_list(..., flat=True).distinct() to efficiently query workflow IDs without fetching fullToolInstance rows. The implementation follows the optimization suggested in previous reviews.


185-209:LGTM: Clean message formatting with proper grammar handling.

The method correctly handles singular, dual, and multiple deployment types with appropriate grammar. Usingsorted() at line 197 ensures deterministic output. The message clearly guides users on the required action.


216-225:LGTM: Deletion blocking correctly implemented.

The method properly uses the_check_tool_usage_in_workflows helper and logs dependent workflows for diagnostics. The error message grammar has been corrected (using "it's" instead of "its") as suggested in previous reviews.


655-657:LGTM: Attribute name updated to plural form.

The change fromprompt_studio_registry toprompt_studio_registries is consistently applied and aligns with the model changes mentioned in the PR summary. Thehasattr check ensures safe access.

@jaseemjaskpjaseemjaskp merged commit79c8d07 intomainDec 24, 2025
7 checks passed
@jaseemjaskpjaseemjaskp deleted the feat/UN-1722-export-reminder-prompt-studio branchDecember 24, 2025 11:42
harini-venkataraman added a commit that referenced this pull requestJan 13, 2026
* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>
harini-venkataraman added a commit that referenced this pull requestJan 13, 2026
* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>
harini-venkataraman added a commit that referenced this pull requestJan 13, 2026
* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>
harini-venkataraman added a commit that referenced this pull requestJan 13, 2026
* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>
muhammad-ali-e added a commit that referenced this pull requestJan 22, 2026
* Add agentic prompt studio UI components (#1713)- Update package dependencies for frontend- Add styling updates to ListOfTools component- Update ListOfTools and PdfViewer components- Modify main app routes* Add Agentic Prompt Studio route (#1715)* prettier fix* loggersSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* debug logsSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* enabling debug logsSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* Update plugin.pySigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* adding debug logsSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* adding debug logsSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* Improvements* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* Feat/agentic prompt studio1 (#1740)* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* Feat/agentic prompt studio1 (#1742)* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* Feat/agentic prompt studio1 (#1743)* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* Update backend/tool_instance_v2/tool_processor.pyCo-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* fixing sorce refs* fixing sorce refs* fixing sorce refs* Address review comments* Address review comments* Address review comments* Address review comments* Address review comments---------Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>Co-authored-by: ali <117142933+muhammad-ali-e@users.noreply.github.com>
athul-rs added a commit that referenced this pull requestJan 29, 2026
* Add agentic prompt studio UI components (#1713)- Update package dependencies for frontend- Add styling updates to ListOfTools component- Update ListOfTools and PdfViewer components- Modify main app routes* Add Agentic Prompt Studio route (#1715)* prettier fix* loggersSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* debug logsSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* enabling debug logsSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* Update plugin.pySigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* adding debug logsSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* adding debug logsSigned-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* Improvements* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* Feat/agentic prompt studio1 (#1740)* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* Feat/agentic prompt studio1 (#1742)* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* Feat/agentic prompt studio1 (#1743)* UN-3008 [FIX] Pass word-level confidence setting to Structure Tool (#1714)* UN-3008 [FIX] Pass word-level confidence setting to Structure ToolFix missing propagation of word confidence setting:- Add ENABLE_WORD_CONFIDENCE constant to SettingsKeys- Read and pass word confidence setting through tool_settings* Bump Structure Tool version to 0.0.95* UN-3099 [FIX] Disable issue in hitl tab in configure destination and table line iss… (#1707)* disable issue in hitl tab in configure destination and table line issue in logs* sonar issue fix* [MISC] Clear search filter when switching adapter settings pages (#1712)MISC [FIX] Clear search filter when switching adapter settings pagesFixed the search filter not clearing when switching between LLMs, Vector DBs,Embedding, and Text Extractor pages. The fix uses React's key prop to forceremount the Search component when page type changes.Changes:- Added searchKey prop to ToolNavBar and Search component- Added clearSearch function to useListSearch hook- Call clearSearch when adapter type changes in ToolSettings🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Add back button to Add Adapter/Connector modals (#1710)* MISC [FEAT] Add back button to Add Adapter/Connector modalsAdded a back button in the modal title when configuring a new adapter/connector.This allows users to return to the adapter selection screen without closing theentire modal.- Back button only shown when adding new (not when editing)- Clicking back resets selectedSourceId and clears metadata🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>* Update frontend/src/components/input-output/add-source-modal/AddSourceModal.jsxCo-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>* [MISC] Load pdfjs worker from node_modules instead of CDN (#1716)* MISC [FIX] Load pdfjs worker from node_modules instead of CDNUse ?url import for pdfjs-dist worker to load from local node_modulesinstead of relying on CDN URL. Resolves version mismatch issues betweenpackage and worker versions.🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* MISC [FIX] Use centralized pdfWorkerConfig with CRA/Vite compatible new URL() pattern🤖 Generated with Claude CodeCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>---------Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>* [FIX] Fix PDF.js worker require is not defined error in staging (#1717)* [FIX] Updated pdf js worker to load from cdn (#1718)* updated pdf js worker to load from cdn* lint issue fix* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use (#1547)* UN-1722 [FEAT] Add export reminder for Prompt Studio projects in use- Add backend API endpoint to check if project is used in deployments- Implement frontend change tracking for prompt modifications- Create yellow notification bar component with export action- Track changes when editing, adding, or deleting prompts- Clear notification after successful export- Check usage in API Deployments, ETL/Task Pipelines, and Manual ReviewThis ensures users are reminded to export their Prompt Studio changes whenthe project is actively being used in deployments, preventing confusionabout why changes don't take effect immediately.🤖 Generated with [Claude Code](https://claude.ai/code)Co-Authored-By: Claude <noreply@anthropic.com>* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: Remove trailing commas to fix Prettier/ESLint build errorsRemoved 10 trailing commas from 4 files that were causing the Dockerbuild to fail with Prettier violations:- DocumentParser.jsx: 3 locations (lines 86, 124, 179)- Header.jsx: 3 locations (lines 73, 176, 277)- ToolIde.jsx: 2 locations (lines 97, 223)- custom-tool-store.js: 2 locations (lines 83, 106)These changes ensure the code passes ESLint/Prettier checks duringthe build process without modifying any functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* refactor: Fix CodeRabbit major issues - state carryover and useCallback patternFixed two major issues identified by CodeRabbit review:1. Fixed state carryover bug in custom-tool-store.js   - When switching tools, deploymentUsageInfo and lastExportedAt now     properly reset to null instead of carrying over from previous tool   - Prevents incorrect export reminders showing for wrong projects2. Fixed useCallback pattern issue in ToolIde.jsx   - Replaced isCheckingUsage state in useCallback deps with useRef   - Prevents unnecessary callback recreations and potential race conditions   - Simplified useEffect dependencies to only depend on the callback   - Removed unused isCheckingUsage state variableThese changes improve code quality and prevent potential bugs withoutaffecting functionality.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: Address all PR#1547 review comments from chandrasekharan-zipstackThis commit addresses all actionable review comments from the code reviewer:## Backend Changes (views.py, constants.py, exceptions.py)1. **Import Location Fix** ✅   - Moved APIDeployment, Pipeline, and WorkflowEndpoint imports to top of file   - Removed lazy imports from check_deployment_usage method   - Follows Python best practices for import organization2. **Deployment Type Enum** ✅   - Created DeploymentType class in constants.py with deployment type constants   - Updated check_deployment_usage to use DeploymentType constants   - Replaced hardcoded strings: "API Deployment", "ETL Pipeline", etc.   - Improves maintainability and prevents typos3. **Error Handling** ✅   - Created DeploymentUsageCheckError exception class   - Changed check_deployment_usage to raise exception instead of returning error response   - Provides better error handling and follows DRF exception patterns4. **Function Naming** ✅   - Renamed _check_tool_usage to _check_tool_usage_in_workflows   - More explicit function name clarifies it checks workflow usage specifically   - Updated all calls in destroy() and check_deployment_usage() methods## Frontend Changes (ToolIde.jsx, CustomToolsHelper.js)5. **Store State Race Condition Fix** ✅   - Added explicit reset of hasUnsavedChanges, deploymentUsageInfo, lastExportedAt   - Ensures fields don't carry over when switching between tools   - Prevents incorrect export reminders showing for wrong projects6. **Stale State Race Condition Fix** ✅   - Added check for current hasUnsavedChanges state after API response   - Prevents showing export reminder if user exported during in-flight check   - Uses customToolStore.getState() to get real-time state value## Not Addressed (Requires Discussion)- Active filtering question: Needs product/architecture discussion- UX enhancement for clickable links: May be future enhancementAll code quality and bug fix comments have been fully addressed.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude <noreply@anthropic.com>* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fix: PR review comments* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* coderabbit fixes commit* Fixes for export conditions---------Co-authored-by: Claude <noreply@anthropic.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>* UN-3113 [FEAT] Add custom data support in Prompt Studio (#1719)support for custom dataCo-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>* UN-1725 [FIX] Remove CheckableTag enabled/disabled toggle from LLM profiles (#1704)Remove the enabled/disabled toggle feature from prompt card LLM profilesas it caused newly added profiles to appear disabled by default.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>* fix: Replace CDN URL with local import for PDF worker (#1720)* fix: Replace CDN URL with local import for PDF workerReplace the external CDN URL (unpkg.com) for pdf.js worker with a localimport from the installed pdfjs-dist package using Webpack 5's assetmodule feature.Changes:- Use 'pdfjs-dist/build/pdf.worker.min.js?url' import syntax- Export the imported worker URL instead of hardcoded CDN URLBenefits:- Eliminates external network dependency for PDF rendering- Worker version automatically stays in sync with installed package- Enables offline functionality- Faster loading as worker is bundled with the application- Consistent with existing pattern used in ExtractionModal.jsx* refactor: Use export...from syntax for re-exporting PDF worker URLAddresses SonarCloud code smell by using the more concise'export { default as X } from' syntax instead of separateimport and export statements.* UN-3124 [FIX] : Add security headers and HTTP method restrictions to nginx (#1726)* feat: Add security headers and HTTP method restrictions to nginx- Add X-Content-Type-Options header to prevent MIME sniffing- Add X-Frame-Options header to prevent clickjacking- Add X-XSS-Protection header for XSS protection- Add Referrer-Policy header for referrer control- Disable TRACE and TRACK HTTP methods- Limit allowed HTTP methods to GET, HEAD, POST in location block* fix: Remove deprecated X-XSS-Protection headerX-XSS-Protection is deprecated and ignored by modern browsers.Chrome removed support in 2019. Content-Security-Policy (CSP)is the recommended replacement for XSS protection.* fix: Limit HTTP methods to GET and HEAD onlyStatic file serving only requires GET and HEAD methods.POST is not needed as API calls go directly to the backend.* UN-3102 [FIX] confirmation alert alway asking issue fix (#1711)confirmation alert alway asking issue fix* AH-87 [FIX]: Restore user session on verticals routes refresh (#1731)Move verticalsRouter inside PersistentLogin wrapper to ensuresession validation runs before rendering verticals pages.This fixes the issue where refreshing /verticals/subscriptionsshowed 'Please login' even for authenticated users.* UN-2081 [FIX] Surface underlying library errors for database destination connectors in the UI (#1734)* handling error* handling error* handling error* small change* change base query exception class* change base query exception class* feat/agentic-prompt-studio* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci---------Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>* feat/agentic-prompt-studio* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* fixing sorce refs* [pre-commit.ci] auto fixes from pre-commit.com hooksfor more information, seehttps://pre-commit.ci* Update backend/tool_instance_v2/tool_processor.pyCo-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>* fixing sorce refs* fixing sorce refs* fixing sorce refs* Address review comments* Address review comments* Address review comments* Address review comments* Address review comments* Fixing agentic tools for HITL* Fixing agentic tools for HITL---------Signed-off-by: harini-venkataraman <115449948+harini-venkataraman@users.noreply.github.com>Signed-off-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Deepak K <89829542+Deepak-Kesavan@users.noreply.github.com>Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>Co-authored-by: vishnuszipstack <117254672+vishnuszipstack@users.noreply.github.com>Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>Co-authored-by: Kirtiman Mishra <110175055+kirtimanmishrazipstack@users.noreply.github.com>Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>Co-authored-by: Hari John Kuriakose <hari@zipstack.com>Co-authored-by: Athul <89829560+athul-rs@users.noreply.github.com>Co-authored-by: Jagadeesh <jagadeeswaran@zipstack.com>Co-authored-by: Jaseem Jas <89440144+jaseemjaskp@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@coderabbitaicoderabbitai[bot]coderabbitai[bot] left review comments

@chandrasekharan-zipstackchandrasekharan-zipstackchandrasekharan-zipstack approved these changes

@vishnuszipstackvishnuszipstackvishnuszipstack approved these changes

@jagadeeswaran-zipstackjagadeeswaran-zipstackAwaiting requested review from jagadeeswaran-zipstack

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

4 participants

@athul-rs@chandrasekharan-zipstack@vishnuszipstack@jaseemjaskp

[8]ページ先頭

©2009-2026 Movatter.jp