langchain-trigger-server 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of langchain-trigger-server might be problematic. Click here for more details.

Files changed (17) hide show
  1. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/PKG-INFO +1 -1
  2. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/app.py +4 -14
  3. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/core.py +1 -8
  4. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/database/interface.py +6 -2
  5. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/database/supabase.py +27 -4
  6. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/pyproject.toml +1 -1
  7. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/.github/workflows/release.yml +0 -0
  8. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/.vscode/settings.json +0 -0
  9. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/README.md +0 -0
  10. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/__init__.py +0 -0
  11. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/cron_manager.py +0 -0
  12. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/database/__init__.py +0 -0
  13. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/decorators.py +0 -0
  14. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/triggers/__init__.py +0 -0
  15. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/langchain_triggers/triggers/cron_trigger.py +0 -0
  16. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/test_framework.py +0 -0
  17. {langchain_trigger_server-0.2.0 → langchain_trigger_server-0.2.2}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langchain-trigger-server
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Generic event-driven triggers framework
5
5
  Project-URL: Homepage, https://github.com/langchain-ai/open-agent-platform
6
6
  Project-URL: Repository, https://github.com/langchain-ai/open-agent-platform
@@ -181,7 +181,6 @@ class TriggerServer:
181
181
  name=trigger.name,
182
182
  description=trigger.description,
183
183
  registration_schema=trigger.registration_model.model_json_schema(),
184
- require_display_name=getattr(trigger.registration_model, 'require_display_name', False)
185
184
  )
186
185
  logger.info(f"✓ Successfully created trigger template: {trigger.name} ({trigger.id})")
187
186
  else:
@@ -217,7 +216,6 @@ class TriggerServer:
217
216
  "path": "/api/triggers/registrations",
218
217
  "method": "POST",
219
218
  "payloadSchema": template.get("registration_schema", {}),
220
- "requireDisplayName": template.get("require_display_name", False),
221
219
  })
222
220
 
223
221
  return {
@@ -231,21 +229,18 @@ class TriggerServer:
231
229
  try:
232
230
  user_id = current_user["identity"]
233
231
 
234
- # Get user's trigger registrations using new schema
235
- user_registrations = await self.database.get_user_trigger_registrations(user_id)
232
+ # Get user's trigger registrations with linked agents in a single query
233
+ user_registrations = await self.database.get_user_trigger_registrations_with_agents(user_id)
236
234
 
237
235
  # Format response to match expected structure
238
236
  registrations = []
239
237
  for reg in user_registrations:
240
- # Get linked agent IDs
241
- linked_agent_ids = await self.database.get_agents_for_trigger(reg["id"])
242
-
243
238
  registrations.append({
244
239
  "id": reg["id"],
245
240
  "user_id": reg["user_id"],
246
241
  "template_id": reg.get("trigger_templates", {}).get("id"),
247
242
  "resource": reg["resource"],
248
- "linked_assistant_ids": linked_agent_ids, # For backward compatibility
243
+ "linked_agent_ids": reg.get("linked_agent_ids", []),
249
244
  "created_at": reg["created_at"]
250
245
  })
251
246
 
@@ -314,12 +309,7 @@ class TriggerServer:
314
309
  media_type="application/json"
315
310
  )
316
311
 
317
- resource_dict = registration_instance.model_dump(exclude={'require_display_name'})
318
-
319
- # Remove display_name if it's null/None and not required
320
- if (not getattr(trigger.registration_model, 'require_display_name', False) and
321
- resource_dict.get('display_name') is None):
322
- resource_dict.pop('display_name', None)
312
+ resource_dict = registration_instance.model_dump()
323
313
 
324
314
  registration = await self.database.create_trigger_registration(
325
315
  user_id=user_id,
@@ -75,11 +75,4 @@ class TriggerRegistrationResult(BaseModel):
75
75
 
76
76
  class TriggerRegistrationModel(BaseModel):
77
77
  """Base class for trigger resource models that define how webhooks are matched to registrations."""
78
-
79
- require_display_name: bool = False # Class attribute to indicate if display_name is required
80
- display_name: Optional[str] = Field(default=None, description="Optional display name for this registration")
81
-
82
- def model_post_init(self, __context) -> None:
83
- """Validate that display_name is provided when require_display_name is True."""
84
- if self.require_display_name and not self.display_name:
85
- raise ValueError(f"{self.__class__.__name__} requires display_name to be set")
78
+ pass
@@ -16,8 +16,7 @@ class TriggerDatabaseInterface(ABC):
16
16
  provider: str,
17
17
  name: str,
18
18
  description: str = None,
19
- registration_schema: Dict = None,
20
- require_display_name: bool = False
19
+ registration_schema: Dict = None
21
20
  ) -> Optional[Dict[str, Any]]:
22
21
  """Create a new trigger template."""
23
22
  pass
@@ -50,6 +49,11 @@ class TriggerDatabaseInterface(ABC):
50
49
  """Get all trigger registrations for a user."""
51
50
  pass
52
51
 
52
+ @abstractmethod
53
+ async def get_user_trigger_registrations_with_agents(self, user_id: str) -> List[Dict[str, Any]]:
54
+ """Get all trigger registrations for a user with linked agents in a single query."""
55
+ pass
56
+
53
57
  @abstractmethod
54
58
  async def get_trigger_registration(
55
59
  self,
@@ -75,8 +75,7 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
75
75
  provider: str,
76
76
  name: str,
77
77
  description: str = None,
78
- registration_schema: Dict = None,
79
- require_display_name: bool = False
78
+ registration_schema: Dict = None
80
79
  ) -> Optional[Dict[str, Any]]:
81
80
  """Create a new trigger template."""
82
81
  try:
@@ -85,8 +84,7 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
85
84
  "provider": provider,
86
85
  "name": name,
87
86
  "description": description,
88
- "registration_schema": registration_schema or {},
89
- "require_display_name": require_display_name
87
+ "registration_schema": registration_schema or {}
90
88
  }
91
89
 
92
90
  response = self.client.table("trigger_templates").insert(data).execute()
@@ -162,6 +160,31 @@ class SupabaseTriggerDatabase(TriggerDatabaseInterface):
162
160
  except Exception as e:
163
161
  logger.error(f"Error getting user trigger registrations: {e}")
164
162
  return []
163
+
164
+ async def get_user_trigger_registrations_with_agents(self, user_id: str) -> List[Dict[str, Any]]:
165
+ """Get all trigger registrations for a user with linked agents in a single query."""
166
+ try:
167
+ response = self.client.table("trigger_registrations").select("""
168
+ *,
169
+ trigger_templates(id, name, description),
170
+ agent_trigger_links(agent_id)
171
+ """).eq("user_id", user_id).order("created_at", desc=True).execute()
172
+
173
+ # Process the results to extract linked agent IDs
174
+ if response.data:
175
+ for registration in response.data:
176
+ # Extract agent IDs from the agent_trigger_links
177
+ agent_links = registration.get("agent_trigger_links", [])
178
+ linked_agent_ids = [link.get("agent_id") for link in agent_links if link.get("agent_id")]
179
+ registration["linked_agent_ids"] = linked_agent_ids
180
+
181
+ # Clean up the raw agent_trigger_links data as it's no longer needed
182
+ registration.pop("agent_trigger_links", None)
183
+
184
+ return response.data or []
185
+ except Exception as e:
186
+ logger.error(f"Error getting user trigger registrations with agents: {e}")
187
+ return []
165
188
 
166
189
  async def get_trigger_registration(self, registration_id: str, user_id: str = None) -> Optional[Dict[str, Any]]:
167
190
  """Get a specific trigger registration."""
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "langchain-trigger-server"
7
- version = "0.2.0"
7
+ version = "0.2.2"
8
8
  description = "Generic event-driven triggers framework"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"