diff --git a/surfsense_backend/app/agents/new_chat/tools/linear/update_issue.py b/surfsense_backend/app/agents/new_chat/tools/linear/update_issue.py index a4d8cd92e..7aa7a2753 100644 --- a/surfsense_backend/app/agents/new_chat/tools/linear/update_issue.py +++ b/surfsense_backend/app/agents/new_chat/tools/linear/update_issue.py @@ -181,7 +181,9 @@ def create_update_linear_issue_tool( final_new_state_id = final_params.get("new_state_id", new_state_id) final_new_assignee_id = final_params.get("new_assignee_id", new_assignee_id) final_new_priority = final_params.get("new_priority", new_priority) - final_new_label_ids = final_params.get("new_label_ids", new_label_ids) + final_new_label_ids: list[str] | None = final_params.get( + "new_label_ids", new_label_ids + ) final_connector_id = final_params.get( "connector_id", connector_id_from_context ) @@ -318,7 +320,9 @@ def _resolve_assignee(team: dict, assignee_email: str | None) -> str | None: return None -def _resolve_labels(team: dict, label_names: list[str] | None) -> list[str]: +def _resolve_labels(team: dict, label_names: list[str] | None) -> list[str] | None: + if label_names is None: + return None if not label_names: return [] name_set = {n.lower() for n in label_names} diff --git a/surfsense_backend/app/services/linear/tool_metadata_service.py b/surfsense_backend/app/services/linear/tool_metadata_service.py index e2dbe315d..edaaa369d 100644 --- a/surfsense_backend/app/services/linear/tool_metadata_service.py +++ b/surfsense_backend/app/services/linear/tool_metadata_service.py @@ -222,10 +222,7 @@ class LinearToolMetadataService: return { "workspace": workspace.to_dict(), - "issue": { - **issue.to_dict(), - "url": f"https://linear.app/issue/{issue.identifier}", - }, + "issue": issue.to_dict(), } @staticmethod @@ -330,22 +327,6 @@ class LinearToolMetadataService: ) return result.scalars().all() - async def _get_linear_connector( - self, search_space_id: int, user_id: str - ) -> SearchSourceConnector | None: - """Fetch the first Linear connector for the given search space and user.""" - result = await self._db_session.execute( - select(SearchSourceConnector).filter( - and_( - SearchSourceConnector.search_space_id == search_space_id, - SearchSourceConnector.user_id == user_id, - SearchSourceConnector.connector_type - == SearchSourceConnectorType.LINEAR_CONNECTOR, - ) - ) - ) - return result.scalars().first() - async def _get_connector_for_document( self, document: Document, user_id: str ) -> SearchSourceConnector | None: diff --git a/surfsense_web/components/tool-ui/linear/update-linear-issue.tsx b/surfsense_web/components/tool-ui/linear/update-linear-issue.tsx index 4bef27829..7caab9420 100644 --- a/surfsense_web/components/tool-ui/linear/update-linear-issue.tsx +++ b/surfsense_web/components/tool-ui/linear/update-linear-issue.tsx @@ -198,6 +198,7 @@ function ApprovalCard({ } function buildFinalArgs() { + const labelsWereProposed = Array.isArray(actionArgs.new_label_ids); return { issue_id: issue?.id, document_id: issue?.document_id, @@ -207,7 +208,7 @@ function ApprovalCard({ new_state_id: selectedStateId === "__none__" ? null : selectedStateId, new_assignee_id: selectedAssigneeId === "__none__" ? null : selectedAssigneeId, new_priority: selectedPriority === "__none__" ? null : Number(selectedPriority), - new_label_ids: selectedLabelIds, + new_label_ids: labelsWereProposed || selectedLabelIds.length > 0 ? selectedLabelIds : null, }; }