webagents 0.2.0__py3-none-any.whl → 0.2.3__py3-none-any.whl

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.
Files changed (46) hide show
  1. webagents/__init__.py +9 -0
  2. webagents/agents/core/base_agent.py +865 -69
  3. webagents/agents/core/handoffs.py +14 -6
  4. webagents/agents/skills/base.py +33 -2
  5. webagents/agents/skills/core/llm/litellm/skill.py +906 -27
  6. webagents/agents/skills/core/memory/vector_memory/skill.py +8 -16
  7. webagents/agents/skills/ecosystem/crewai/__init__.py +3 -1
  8. webagents/agents/skills/ecosystem/crewai/skill.py +158 -0
  9. webagents/agents/skills/ecosystem/database/__init__.py +3 -1
  10. webagents/agents/skills/ecosystem/database/skill.py +522 -0
  11. webagents/agents/skills/ecosystem/mongodb/__init__.py +3 -0
  12. webagents/agents/skills/ecosystem/mongodb/skill.py +428 -0
  13. webagents/agents/skills/ecosystem/n8n/README.md +287 -0
  14. webagents/agents/skills/ecosystem/n8n/__init__.py +3 -0
  15. webagents/agents/skills/ecosystem/n8n/skill.py +341 -0
  16. webagents/agents/skills/ecosystem/openai/__init__.py +6 -0
  17. webagents/agents/skills/ecosystem/openai/skill.py +867 -0
  18. webagents/agents/skills/ecosystem/replicate/README.md +440 -0
  19. webagents/agents/skills/ecosystem/replicate/__init__.py +10 -0
  20. webagents/agents/skills/ecosystem/replicate/skill.py +517 -0
  21. webagents/agents/skills/ecosystem/x_com/README.md +401 -0
  22. webagents/agents/skills/ecosystem/x_com/__init__.py +3 -0
  23. webagents/agents/skills/ecosystem/x_com/skill.py +1048 -0
  24. webagents/agents/skills/ecosystem/zapier/README.md +363 -0
  25. webagents/agents/skills/ecosystem/zapier/__init__.py +3 -0
  26. webagents/agents/skills/ecosystem/zapier/skill.py +337 -0
  27. webagents/agents/skills/examples/__init__.py +6 -0
  28. webagents/agents/skills/examples/music_player.py +329 -0
  29. webagents/agents/skills/robutler/handoff/__init__.py +6 -0
  30. webagents/agents/skills/robutler/handoff/skill.py +191 -0
  31. webagents/agents/skills/robutler/nli/skill.py +180 -24
  32. webagents/agents/skills/robutler/payments/exceptions.py +27 -7
  33. webagents/agents/skills/robutler/payments/skill.py +64 -14
  34. webagents/agents/skills/robutler/storage/files/skill.py +2 -2
  35. webagents/agents/tools/decorators.py +243 -47
  36. webagents/agents/widgets/__init__.py +6 -0
  37. webagents/agents/widgets/renderer.py +150 -0
  38. webagents/server/core/app.py +130 -15
  39. webagents/server/core/models.py +1 -1
  40. webagents/utils/logging.py +13 -1
  41. {webagents-0.2.0.dist-info → webagents-0.2.3.dist-info}/METADATA +16 -9
  42. {webagents-0.2.0.dist-info → webagents-0.2.3.dist-info}/RECORD +45 -24
  43. webagents/agents/skills/ecosystem/openai_agents/__init__.py +0 -0
  44. {webagents-0.2.0.dist-info → webagents-0.2.3.dist-info}/WHEEL +0 -0
  45. {webagents-0.2.0.dist-info → webagents-0.2.3.dist-info}/entry_points.txt +0 -0
  46. {webagents-0.2.0.dist-info → webagents-0.2.3.dist-info}/licenses/LICENSE +0 -0
@@ -23,7 +23,7 @@ from .models import (
23
23
  )
24
24
  from .middleware import RequestLoggingMiddleware, RateLimitMiddleware, RateLimitRule
25
25
  from .monitoring import initialize_monitoring
26
- from ..context.context_vars import Context, set_context, create_context
26
+ from ..context.context_vars import Context, set_context, create_context, get_context
27
27
  from ...agents.core.base_agent import BaseAgent
28
28
  from ...utils.logging import get_logger
29
29
 
@@ -385,6 +385,7 @@ class WebAgentsServer:
385
385
  subpath = handler_config.get('subpath') or ''
386
386
  method = (handler_config.get('method') or 'get').lower()
387
387
  handler_func = handler_config.get('function')
388
+ handler_scope = handler_config.get('scope', 'all')
388
389
 
389
390
  if method != request_method:
390
391
  continue
@@ -401,16 +402,26 @@ class WebAgentsServer:
401
402
  # Extract query params
402
403
  query_params = dict(request.query_params)
403
404
 
404
- # Extract JSON body for methods that commonly have a body
405
+ # Extract body data (JSON or form-encoded) for methods that commonly have a body
405
406
  body_data = {}
406
407
  if request.method in ["POST", "PUT", "PATCH"]:
407
408
  try:
409
+ # Try JSON first
408
410
  body_data = await request.json()
409
411
  except Exception:
410
- body_data = {}
412
+ # Fallback to form data (application/x-www-form-urlencoded)
413
+ try:
414
+ form_data = await request.form()
415
+ body_data = dict(form_data)
416
+ except Exception:
417
+ body_data = {}
411
418
 
412
419
  # Combine and filter parameters by handler signature
413
420
  combined_params = {**path_params, **query_params, **body_data}
421
+
422
+ # Remove 'token' from params (used for auth, not a handler param)
423
+ combined_params.pop('token', None)
424
+
414
425
  sig = _inspect.signature(handler_func)
415
426
  filtered_params = {}
416
427
  for param_name in sig.parameters:
@@ -421,10 +432,64 @@ class WebAgentsServer:
421
432
 
422
433
  # Set minimal request context for handlers that depend on it (e.g., owner scope/User ID)
423
434
  try:
424
- ctx = create_context(messages=[], stream=False, agent=agent, request=request)
435
+ # Support token-based auth for localhost (cross-port authentication)
436
+ # In production, same origin means normal cookie/header auth works
437
+ token_from_url = query_params.get('token')
438
+ if token_from_url and ('localhost' in str(request.base_url) or '127.0.0.1' in str(request.base_url)):
439
+ # Inject token directly into request headers for authentication
440
+ # This modifies the headers in-place for this request only
441
+ from starlette.datastructures import MutableHeaders
442
+ # Access the internal _headers attribute and update it
443
+ if hasattr(request, '_headers'):
444
+ if not isinstance(request._headers, MutableHeaders):
445
+ request._headers = MutableHeaders(request._headers)
446
+ request._headers['authorization'] = f'Bearer {token_from_url}'
447
+ ctx = create_context(messages=[], stream=False, agent=agent, request=request)
448
+ else:
449
+ ctx = create_context(messages=[], stream=False, agent=agent, request=request)
425
450
  set_context(ctx)
426
- except Exception:
427
- pass
451
+ except Exception as e:
452
+ # Log auth errors but don't fail the request
453
+ import logging
454
+ logging.getLogger('webagents.server').debug(f"Context creation error: {e}")
455
+
456
+ # Check authentication/authorization if handler has restricted scope
457
+ if handler_scope != 'all':
458
+ # Check if handler requires owner/admin scope
459
+ required_scopes = [handler_scope] if isinstance(handler_scope, str) else handler_scope
460
+
461
+ # Get user's auth context
462
+ user_scopes = []
463
+ try:
464
+ ctx = get_context()
465
+ if ctx and ctx.auth and hasattr(ctx.auth, 'scope'):
466
+ from ...agents.skills.robutler.auth.types import AuthScope
467
+ auth_scope = ctx.auth.scope
468
+ if auth_scope == AuthScope.ADMIN:
469
+ user_scopes = ['admin', 'owner', 'all']
470
+ elif auth_scope == AuthScope.OWNER:
471
+ user_scopes = ['owner', 'all']
472
+ elif auth_scope == AuthScope.USER:
473
+ user_scopes = ['all']
474
+ except Exception:
475
+ # If we can't get auth context, user is unauthenticated
476
+ user_scopes = []
477
+
478
+ # Fallback: For localhost, check if token in URL matches agent's API key (cross-port auth)
479
+ token_from_url = query_params.get('token')
480
+ if not user_scopes and token_from_url and ('localhost' in str(request.base_url) or '127.0.0.1' in str(request.base_url)):
481
+ # Validate token matches agent's API key
482
+ if hasattr(agent, 'api_key') and agent.api_key == token_from_url:
483
+ # Grant owner scope for valid agent API key on localhost
484
+ user_scopes = ['owner', 'all']
485
+
486
+ # Check if user has required scope
487
+ has_access = any(scope in required_scopes or scope == 'all' for scope in user_scopes)
488
+ if not has_access:
489
+ raise HTTPException(
490
+ status_code=403,
491
+ detail=f"Access denied. This endpoint requires one of: {', '.join(required_scopes)}"
492
+ )
428
493
 
429
494
  # Call the handler function (async or sync)
430
495
  if _inspect.iscoroutinefunction(handler_func):
@@ -736,12 +801,38 @@ class WebAgentsServer:
736
801
  from fastapi.responses import StreamingResponse
737
802
  import json
738
803
 
804
+ # Start the generator to catch early errors (on_connection, etc.)
805
+ generator = agent.run_streaming(messages=messages_dict, tools=tools_dict)
806
+
807
+ # Try to get the first chunk - this triggers on_connection hooks
808
+ try:
809
+ first_chunk = await generator.__anext__()
810
+ except StopAsyncIteration:
811
+ # Empty stream - should not happen but handle gracefully
812
+ first_chunk = None
813
+ except Exception as e:
814
+ # Error before streaming started (e.g., on_connection payment error)
815
+ # Return as HTTP error instead of SSE chunk for better frontend handling
816
+ if hasattr(e, 'status_code') and hasattr(e, 'detail'):
817
+ self.logger.error(f"💳 Early error before streaming: {e}")
818
+ raise HTTPException(
819
+ status_code=getattr(e, 'status_code', 500),
820
+ detail=getattr(e, 'detail')
821
+ )
822
+ raise
823
+
739
824
  async def generate():
740
825
  try:
741
- async for chunk in agent.run_streaming(
742
- messages=messages_dict,
743
- tools=tools_dict
744
- ):
826
+ # Yield the first chunk we already fetched
827
+ if first_chunk is not None:
828
+ try:
829
+ chunk_json = json.dumps(first_chunk)
830
+ yield f"data: {chunk_json}\n\n"
831
+ except Exception as json_error:
832
+ self.logger.error(f"Failed to serialize first chunk: {json_error}")
833
+
834
+ # Continue with remaining chunks
835
+ async for chunk in generator:
745
836
  # Properly serialize chunk to JSON for SSE format
746
837
  try:
747
838
  chunk_json = json.dumps(chunk)
@@ -753,14 +844,38 @@ class WebAgentsServer:
753
844
  yield "data: [DONE]\n\n"
754
845
  except Exception as e:
755
846
  self.logger.error(f"Streaming error: {e}")
756
- error_chunk = {
757
- "error": {
758
- "message": str(e),
759
- "type": "server_error"
847
+
848
+ # Check if this is a payment error with status_code and detail
849
+ if hasattr(e, 'status_code') and hasattr(e, 'detail'):
850
+ status_code = getattr(e, 'status_code', 500)
851
+ detail = getattr(e, 'detail')
852
+ self.logger.error(f" - Payment/custom error: status={status_code}, detail={detail}")
853
+
854
+ # Format error in OpenAI-compatible format for AI SDK
855
+ # Also include payment-specific fields for frontend handling
856
+ error_code = detail.get("error") if isinstance(detail, dict) else "PAYMENT_ERROR"
857
+ error_chunk = {
858
+ "error": {
859
+ "message": str(e),
860
+ "type": "insufficient_balance" if status_code == 402 else "server_error",
861
+ "code": error_code,
862
+ "status_code": status_code,
863
+ "detail": detail,
864
+ "error_code": error_code, # For payment token manager compatibility
865
+ "statusCode": status_code # For payment token manager compatibility
866
+ }
867
+ }
868
+ else:
869
+ error_chunk = {
870
+ "error": {
871
+ "message": str(e),
872
+ "type": "server_error",
873
+ "code": "internal_error"
874
+ }
760
875
  }
761
- }
762
876
  error_json = json.dumps(error_chunk)
763
877
  yield f"data: {error_json}\n\n"
878
+ yield "data: [DONE]\n\n"
764
879
 
765
880
  return StreamingResponse(
766
881
  generate(),
@@ -11,7 +11,7 @@ from pydantic import BaseModel, Field
11
11
  class ChatMessage(BaseModel):
12
12
  """OpenAI-compatible chat message"""
13
13
  role: str = Field(..., description="Message role: 'system', 'user', 'assistant', or 'tool'")
14
- content: Optional[str] = Field(None, description="Message content")
14
+ content: Optional[Union[str, List[Dict[str, Any]]]] = Field(None, description="Message content (string or array of content parts for multimodal)")
15
15
  tool_calls: Optional[List[Dict[str, Any]]] = Field(None, description="Tool calls in the message")
16
16
  tool_call_id: Optional[str] = Field(None, description="Tool call ID for tool responses")
17
17
 
@@ -38,7 +38,19 @@ def get_agent_color(agent_name: str) -> str:
38
38
  return AGENT_COLORS[agent_name]
39
39
 
40
40
  # Generate consistent color based on agent name hash
41
- colors = [Fore.GREEN, Fore.YELLOW, Fore.BLUE, Fore.MAGENTA, Fore.CYAN, Fore.RED]
41
+ # Using a variety of colors for better visual distinction
42
+ colors = [
43
+ Fore.GREEN,
44
+ Fore.CYAN,
45
+ Fore.YELLOW,
46
+ Fore.BLUE,
47
+ Fore.MAGENTA,
48
+ Fore.LIGHTGREEN_EX,
49
+ Fore.LIGHTCYAN_EX,
50
+ Fore.LIGHTYELLOW_EX,
51
+ Fore.LIGHTBLUE_EX,
52
+ Fore.LIGHTMAGENTA_EX,
53
+ ]
42
54
  color_index = hash(agent_name) % len(colors)
43
55
  return colors[color_index]
44
56
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webagents
3
- Version: 0.2.0
3
+ Version: 0.2.3
4
4
  Summary: Foundation framework for the Web of Agents - build, serve and monetize AI agents
5
5
  Author: Awesome Opensource Contributors and Robutler Team
6
6
  License: MIT License
@@ -26,15 +26,20 @@ License: MIT License
26
26
  License-File: LICENSE
27
27
  Requires-Python: >=3.10
28
28
  Requires-Dist: colorama>=0.4.6
29
+ Requires-Dist: crewai>=0.1.0
29
30
  Requires-Dist: fastapi>=0.100.0
30
31
  Requires-Dist: fastmcp>=2.3.0
31
32
  Requires-Dist: httpx>=0.24.0
32
33
  Requires-Dist: litellm>=1.0.0
33
34
  Requires-Dist: pillow>=10.0.0
35
+ Requires-Dist: psycopg2-binary>=2.9.0
34
36
  Requires-Dist: pydantic-settings>=2.0.0
35
37
  Requires-Dist: pydantic>=2.7.0
38
+ Requires-Dist: pymongo>=4.0.0
36
39
  Requires-Dist: python-dotenv>=1.0.0
40
+ Requires-Dist: supabase>=2.0.0
37
41
  Requires-Dist: tiktoken>=0.5.0
42
+ Requires-Dist: tweepy>=4.14.0
38
43
  Requires-Dist: uvicorn>=0.23.0
39
44
  Provides-Extra: dev
40
45
  Requires-Dist: black>=23.0.0; extra == 'dev'
@@ -74,6 +79,8 @@ With WebAgents delegation, your agent is as powerful as the whole ecosystem, and
74
79
  pip install webagents
75
80
  ```
76
81
 
82
+ WebAgents includes everything you need: core framework, LLM integration, and ecosystem skills (MongoDB, Supabase, PostgreSQL, CrewAI, X.com, etc.)
83
+
77
84
  ## 🏃‍♂️ Quick Start
78
85
 
79
86
  ### Create Your First Agent
@@ -203,7 +210,7 @@ export OPENAI_API_KEY="your-openai-key"
203
210
  export WEBAGENTS_API_KEY="your-webagents-key"
204
211
  ```
205
212
 
206
- Get your WEBAGENTS_API_KEY at https://robutler.ai
213
+ Get your WEBAGENTS_API_KEY at https://robutler.ai/developer
207
214
 
208
215
 
209
216
  ## 🌐 Web of Agents
@@ -216,23 +223,23 @@ WebAgents enables dynamic real-time orchestration where each AI agent acts as a
216
223
 
217
224
  ## 📚 Documentation
218
225
 
219
- - **[Full Documentation](https://webagents.robutler.ai)** - Complete guides and API reference
220
- - **[Skills Framework](https://webagents.robutler.ai/skills/overview/)** - Deep dive into modular capabilities
221
- - **[Agent Architecture](https://webagents.robutler.ai/agent/overview/)** - Understand agent communication
222
- - **[Custom Skills](https://webagents.robutler.ai/skills/custom/)** - Build your own capabilities
226
+ - **[Full Documentation](https://robutler.ai/webagents)** - Complete guides and API reference
227
+ - **[Skills Framework](https://robutler.ai/webagents/skills/overview/)** - Deep dive into modular capabilities
228
+ - **[Agent Architecture](https://robutler.ai/webagents/agent/overview/)** - Understand agent communication
229
+ - **[Custom Skills](https://robutler.ai/webagents/skills/custom/)** - Build your own capabilities
223
230
 
224
231
  ## 🤝 Contributing
225
232
 
226
- We welcome contributions! Please see our [Contributing Guide](https://webagents.robutler.ai/developers/contributing/) for details.
233
+ We welcome contributions! Please see our [Contributing Guide](https://robutler.ai/webagents/developers/contributing/) for details.
227
234
 
228
235
  ## 📄 License
229
236
 
230
- This project is licensed under the MIT License - see the [LICENSE](https://webagents.robutler.ai/license/) file for details.
237
+ This project is licensed under the MIT License - see the [LICENSE](https://robutler.ai/webagents/license/) file for details.
231
238
 
232
239
  ## 🆘 Support
233
240
 
234
241
  - **GitHub Issues**: [Report bugs and request features](https://github.com/robutlerai/webagents/issues)
235
- - **Documentation**: [webagents.robutler.ai](https://webagents.robutler.ai)
242
+ - **Documentation**: [robutler.ai/webagents](https://robutler.ai/webagents)
236
243
  - **Community**: Join our Discord server for discussions and support
237
244
 
238
245
  ---
@@ -1,20 +1,20 @@
1
- webagents/__init__.py,sha256=N4dAwBpmq88YlPYFlBM2yQ0V_B7_uLxzhLzwGDb6Dew,374
1
+ webagents/__init__.py,sha256=mBjRKLOfZeu-gk-YsqriXwiSqP1FQE6RT3NQJdpPG4U,613
2
2
  webagents/__main__.py,sha256=5e1gYVYHzbADPIMYsoZRyBg-gRtdvFi8ykBsZYXFrqU,1346
3
3
  webagents/agents/__init__.py,sha256=xh0Q3JyTN71ByorxVz_o_4lSrmVicA6LxNsuA7aF7W8,245
4
4
  webagents/agents/core/__init__.py,sha256=WL5kMK1NuAWfKLTJQ0le68k4tRTOrOcf485bKRHBPiw,542
5
- webagents/agents/core/base_agent.py,sha256=0DgHqdey-tqmv0JTHMzICBdzVuensUQkMSL23sx0Gog,93823
6
- webagents/agents/core/handoffs.py,sha256=vfojIHoy_IKHU5sxs2PY8hZFyBLlYdlujQFXnqzvK9c,11076
5
+ webagents/agents/core/base_agent.py,sha256=48e0Nu5f46RXHfVEeIWn3ad9OWpcjHndJWpvkadFgKc,138052
6
+ webagents/agents/core/handoffs.py,sha256=WBdLlS1YiWz66xlRlUstPGzsCbsqejt3XGe1ttNw0Co,11232
7
7
  webagents/agents/handoffs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  webagents/agents/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  webagents/agents/lifecycle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  webagents/agents/skills/__init__.py,sha256=qGawdVNp1AtF09-vAVR2s77SwQCTnZIaIGskDv5e81g,3211
11
- webagents/agents/skills/base.py,sha256=s_wdhmqDGVCSXJiahwuUdKWeXIpdPfe_e8NL67oKbsc,5099
11
+ webagents/agents/skills/base.py,sha256=P_f4WyFkRjwOmac-fwwvjAbXQBYkcIFTYpqQyXH_cuM,6358
12
12
  webagents/agents/skills/core/__init__.py,sha256=xT_-sPnLbxTUqjvg0toVCqQyB6OP-An_vBprdv_t0xA,258
13
13
  webagents/agents/skills/core/guardrails/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  webagents/agents/skills/core/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  webagents/agents/skills/core/llm/anthropic/__init__.py,sha256=NkitGyW7aAdDPKsIeZaU979us3yg84Hej1L_Ogtw-f8,68
16
16
  webagents/agents/skills/core/llm/litellm/__init__.py,sha256=DaUZozXF_x7LWfH_Blrn7rpF7Y7k91VRnRKoh_2JbqI,272
17
- webagents/agents/skills/core/llm/litellm/skill.py,sha256=tNQ61DmvpmfwB6fU0cJlzb0OicV6jB1wPJHUdiU80zc,22267
17
+ webagents/agents/skills/core/llm/litellm/skill.py,sha256=N8QO8lGb156B-LYjyFW48_8BnsyrRiSAjC21RI0p528,68192
18
18
  webagents/agents/skills/core/llm/openai/__init__.py,sha256=eHvy20Z-geoVAZu8MstRiPXsEXZLJcBq3GtSZSLeOXo,65
19
19
  webagents/agents/skills/core/llm/xai/__init__.py,sha256=HPcn0Ki-Di0kIzV5bvb-Vt-8vGW-ufBmHI9ZBeIdlA8,62
20
20
  webagents/agents/skills/core/mcp/README.md,sha256=niQJlntyF6WbaxsUuJVYHFYJ93nV6u4F_QQ_TJZIAP8,14950
@@ -25,20 +25,37 @@ webagents/agents/skills/core/memory/long_term_memory/__init__.py,sha256=Bk4DChm7
25
25
  webagents/agents/skills/core/memory/long_term_memory/memory_skill.py,sha256=Swc2eQUKRheH88J-AVoP7zj8pqMxYrXtSsAbILBHVdM,24069
26
26
  webagents/agents/skills/core/memory/short_term_memory/__init__.py,sha256=TH5ijPbZau6oUTjgj5R1YqSw5x_kqWJhzJlaoGVeymc,217
27
27
  webagents/agents/skills/core/memory/short_term_memory/skill.py,sha256=rif35KGClq6tC_Tf5Y0GDND_jEyGZc9GVtm8Mhugyog,12791
28
- webagents/agents/skills/core/memory/vector_memory/skill.py,sha256=69dHAzIUgDL87PXgsvmmF8Ijv_O5i_PzBwbLBzCoJNQ,20003
28
+ webagents/agents/skills/core/memory/vector_memory/skill.py,sha256=ng604Gv8actDbp6EhbszUpRqZgKnqlINO3GAEt1sVZI,19368
29
29
  webagents/agents/skills/core/planning/__init__.py,sha256=VjFRykXTRe9F0oHukmCFcbDuXg_bQU8XIcI8VEA69Y4,223
30
30
  webagents/agents/skills/core/planning/planner.py,sha256=EFBH9vrYcYaWgXSlC0c8nUP9eGj6b_RyZ4dHbNjFVXU,13900
31
31
  webagents/agents/skills/ecosystem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- webagents/agents/skills/ecosystem/crewai/__init__.py,sha256=MfHsOOPpXVUWcXyiip2_svHF8YxrJ60cH28TM8ef__Q,30
33
- webagents/agents/skills/ecosystem/database/__init__.py,sha256=x2y6F1FCplEmLaUXKztNDtNg_o1Y61ttiH1EiSrqCJ0,32
32
+ webagents/agents/skills/ecosystem/crewai/__init__.py,sha256=VJlcA5YqWtNgoPxQ_sq1V3ihrhMm4zA98RztxJX6BQY,57
33
+ webagents/agents/skills/ecosystem/crewai/skill.py,sha256=_aHrONwvfQnr84CTSWP1LT-Q-k5PleJUPJuuMlJgwKI,5877
34
+ webagents/agents/skills/ecosystem/database/__init__.py,sha256=MR8AXRwW_aTbbCl6g9auy7BC-X7u2En8JTpxf2WIpcA,61
35
+ webagents/agents/skills/ecosystem/database/skill.py,sha256=I3r7qvlbTO5YMMR-i-bHN3UblRlIguPuULFMEdhAiLw,23050
34
36
  webagents/agents/skills/ecosystem/filesystem/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
37
  webagents/agents/skills/ecosystem/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
38
  webagents/agents/skills/ecosystem/google/calendar/__init__.py,sha256=s_e6EPc07c-iO06BUYaVyat1arGkNBLt29BKHubL6-0,77
37
39
  webagents/agents/skills/ecosystem/google/calendar/skill.py,sha256=hWFICppmWbHvecRLNz8NJJyT1GiQj_oR-ioxDDzQ_ig,15623
38
- webagents/agents/skills/ecosystem/n8n/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- webagents/agents/skills/ecosystem/openai_agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ webagents/agents/skills/ecosystem/mongodb/__init__.py,sha256=96R9LPw6CWC9gwUXMeAK64wvZN1F4ws7VTX3VJ12rBw,60
41
+ webagents/agents/skills/ecosystem/mongodb/skill.py,sha256=WNTP2vKjIxOdUIbuXd_5NKseBM1iCTLS_6t6t6hV40s,18603
42
+ webagents/agents/skills/ecosystem/n8n/README.md,sha256=huUSJsBCuMdljqKkie7l_skO-xeoFdAisP9jEZqn8eM,7402
43
+ webagents/agents/skills/ecosystem/n8n/__init__.py,sha256=IZaYCxmJ3oS8yhOlv7kADHzfo26EEO6BjMLFEkw09Yo,52
44
+ webagents/agents/skills/ecosystem/n8n/skill.py,sha256=p-D0DN2fYy76YGA7TzzUarAnf3Tzhv5W887aHU5h2j0,13759
45
+ webagents/agents/skills/ecosystem/openai/__init__.py,sha256=KzYWLUku8K7uVLslKjfN2tKlP69I5DKvtb5Eb_smctc,154
46
+ webagents/agents/skills/ecosystem/openai/skill.py,sha256=Q15jqjYmem96HkUCWsOSlvWkivwBKFW76UtXZHw7hCc,43691
47
+ webagents/agents/skills/ecosystem/replicate/README.md,sha256=oJWrl9XOSZasdEb5VrMqZIF4yqpQ_JM-Cr0XWcMrXkU,13033
48
+ webagents/agents/skills/ecosystem/replicate/__init__.py,sha256=mvs-7C_0OurN-TXSJcKsipkqEHpCWDw02r0Twbrx6yk,159
49
+ webagents/agents/skills/ecosystem/replicate/skill.py,sha256=RGXpAPHiEi4X-f2JXhP0fD8-ztgUM5MGrRZ6Y4BbP-I,22108
40
50
  webagents/agents/skills/ecosystem/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
- webagents/agents/skills/ecosystem/zapier/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ webagents/agents/skills/ecosystem/x_com/README.md,sha256=XmM_c5A_L6Qj32DnQiKSYAy1QXXBjaSNmfkoyZ31mck,12601
52
+ webagents/agents/skills/ecosystem/x_com/__init__.py,sha256=dlSgfpSKryGldqcMg0H_RvsNnPCrBTVexIZtOPUiIw4,54
53
+ webagents/agents/skills/ecosystem/x_com/skill.py,sha256=ZxPfMP4CaCBql5B5W27qyTDSeB3dITvQ1aGgwQ3Libg,45427
54
+ webagents/agents/skills/ecosystem/zapier/README.md,sha256=9DDA79BIHm0qq2V3H1JbHmS_tZT6nLkuLY7Ta3FhMr0,8985
55
+ webagents/agents/skills/ecosystem/zapier/__init__.py,sha256=MSDixYLlCB8pNCCi56lw0SKz0M6H0k9kgscM8luo7nk,58
56
+ webagents/agents/skills/ecosystem/zapier/skill.py,sha256=Sh1L5rnFO3XZrISEj5-k-YDpCjo_Rvi2LozrqZLpPYc,13544
57
+ webagents/agents/skills/examples/__init__.py,sha256=mowb0X96d0zRllry8ZhuYUO5DVQAm7WF3FzX0FcT8xk,139
58
+ webagents/agents/skills/examples/music_player.py,sha256=QW3S5XfI7vZ8WK1Cpc9Y-TCh8Z147c4b3KwigXRonlI,14720
42
59
  webagents/agents/skills/robutler/__init__.py,sha256=r3pYQje2t1T6ooLa45JXPgVOnTJPDvtrFV3i1i-fDTA,166
43
60
  webagents/agents/skills/robutler/storage.py,sha256=qUTeGUYoW46TshYlLKTORoUIRT3fmzoatNE4gCGB6hU,14690
44
61
  webagents/agents/skills/robutler/auth/README.md,sha256=mRcuGF3ty3WyoMCwR0pxYnOWNOKyM7h5MW67-9Y3V4M,2556
@@ -49,27 +66,31 @@ webagents/agents/skills/robutler/crm/skill.py,sha256=bT1WjpY-vj1KO0zVhi7QbHMfhnh
49
66
  webagents/agents/skills/robutler/discovery/README.md,sha256=3pvo2sJY-Rm29SWuIsHSpDwptaPPDXqjcb6HDGjxaSM,9193
50
67
  webagents/agents/skills/robutler/discovery/__init__.py,sha256=VJYay8yjA1d42HVJDD1GjoZBZD5bEkQovy0jz3GZHbM,319
51
68
  webagents/agents/skills/robutler/discovery/skill.py,sha256=g0tvFiVOSjJtZnPcZZHoWXdTxEESkx0EnSlq6eZbmJ4,9325
69
+ webagents/agents/skills/robutler/handoff/__init__.py,sha256=PLeP4Mm99fqwmDgcXRCBSzxxrdfwLj6bw1nhE1UGP8g,129
70
+ webagents/agents/skills/robutler/handoff/skill.py,sha256=YxhcoZs-XFkwTIfws68JNMPqTP6ogUYWkAopNtqFvAQ,6760
52
71
  webagents/agents/skills/robutler/kv/__init__.py,sha256=sbaE6gr_OksCWIhJE0kFMpFErAHUnW_7coW8HiKePM8,53
53
72
  webagents/agents/skills/robutler/kv/skill.py,sha256=ftZulx4gQD9lQVstCTj7ZjsWML2XcZ6PU-2lSGpePHU,3364
54
73
  webagents/agents/skills/robutler/message_history/__init__.py,sha256=15EdlGC6jbcj5ba_kr9U93B1x4U_wG4VeWkY5WW36ZI,215
55
74
  webagents/agents/skills/robutler/message_history/skill.py,sha256=Zq7xATjU-Rx2WbDg812d2S0xPLYlMeM_E9dwn7_NuJU,11179
56
75
  webagents/agents/skills/robutler/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
76
  webagents/agents/skills/robutler/nli/__init__.py,sha256=MrwX21Q5sRlaShckZ56Xt4Xi655wPOdBnJEPZ9ZLm3Q,310
58
- webagents/agents/skills/robutler/nli/skill.py,sha256=Kufv3qqtiC--KfqK9UiJtv9PTELK-vJ_Is9foev8VSg,30607
77
+ webagents/agents/skills/robutler/nli/skill.py,sha256=lBr9DElCYEUFmxmgNnmKwHfpuHZAYYIbSaXSVeAovRI,37868
59
78
  webagents/agents/skills/robutler/notifications/__init__.py,sha256=N5ZWC0YkDRpKsIlazlVdYLBDMvhFg3s1ZIOzpi75EJg,74
60
79
  webagents/agents/skills/robutler/notifications/skill.py,sha256=uJpAoCWh0XR475tPhETEePhu0RzvDSxz9cDH2SC7-qQ,5576
61
80
  webagents/agents/skills/robutler/payments/__init__.py,sha256=cPe_qLG0nHRxfd5-stleNIFpGktH9_nvpIbjdDJTRCk,1112
62
- webagents/agents/skills/robutler/payments/exceptions.py,sha256=92mP-sWdU3bgiPpqGsGN8Z0pWif7coBT5ifDhuEtgM0,9697
63
- webagents/agents/skills/robutler/payments/skill.py,sha256=t3m1pysHBxGauA5xh9oPOGDxW4t8n3XsE2Pj2rL_1r8,27880
81
+ webagents/agents/skills/robutler/payments/exceptions.py,sha256=tjSGJ6nWBOkmFefFxRteEKPTd_ufr8F3fJCPq0RfmkA,10690
82
+ webagents/agents/skills/robutler/payments/skill.py,sha256=E1-3xXoK88gVEIpR6X3L7vkhV6c-6Ri36qereezlrzY,30933
64
83
  webagents/agents/skills/robutler/storage/__init__.py,sha256=A3FW8rqu5cMJatys-58Y9qyGFllN1t-XkBDOs_pzCHg,227
65
84
  webagents/agents/skills/robutler/storage/files/__init__.py,sha256=fUM9VH98PQFgA9d32ok_cIGP4QnszLDm2cqWzXJkqGk,202
66
- webagents/agents/skills/robutler/storage/files/skill.py,sha256=uDzD_MFobbd0vEgAsz8XMXqIEocG943BznP288St_WM,19305
85
+ webagents/agents/skills/robutler/storage/files/skill.py,sha256=40Rj6MVGgMfLIc2CTmi0quwZmr5YDYald99AIJmgazw,20028
67
86
  webagents/agents/skills/robutler/storage/json/__init__.py,sha256=Sg6k7ZY032a5SnWUPsW9t2TnK4WFtWsU8TjI3VDLNQo,189
68
87
  webagents/agents/skills/robutler/storage/json/skill.py,sha256=2Z-pQn8n9UMO-l4vojPY9DsNyEAA3PwMA0SBQfFdfps,12425
69
88
  webagents/agents/skills/robutler/storage/kv/skill.py,sha256=iBNnRdsGQpCxFjMiA7sMwMynm9vYk6_2tZGsZnIuUcE,3348
70
89
  webagents/agents/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- webagents/agents/tools/decorators.py,sha256=CjVqPPQif7jrAm8MWvvcSYfNA4hSeb0BpzJXL-ush-c,17163
90
+ webagents/agents/tools/decorators.py,sha256=k92axXcV8rzy3RSGD6WpjMqUK7EFMOqA88Xsx6aEApM,25820
72
91
  webagents/agents/tracing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
+ webagents/agents/widgets/__init__.py,sha256=9Ux9Iu3UdueVMZn2r_DSS4RLjqE1MCPAwzCjf16aHZM,222
93
+ webagents/agents/widgets/renderer.py,sha256=Fftxfh_c0Gy_yqLROLGjNDH5F8I9YojATpJ24dsUQfY,5171
73
94
  webagents/agents/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
95
  webagents/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
96
  webagents/server/__init__.py,sha256=GGDg1QqMjG0vLElBS1GggsWIyVe-wtMNyUi5FnNXTUI,609
@@ -79,16 +100,16 @@ webagents/server/monitoring.py,sha256=IA98D_mFellWSA94ytgnMKOUEUSEOoXmSHD9mUB87z
79
100
  webagents/server/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
101
  webagents/server/context/context_vars.py,sha256=grtkAFK_rI9rWcxIpFoLwhOKfIgisfMr29_cGK7Zowo,3615
81
102
  webagents/server/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- webagents/server/core/app.py,sha256=TuXAAYosbcTlTNUOA5wBo3dPCT02v9mHkFJJST5Qq9Q,38468
103
+ webagents/server/core/app.py,sha256=CWqfjRUiExCG4FLPr-hfcxQYfzeqgkyvMzn8Ydvx15k,45933
83
104
  webagents/server/core/middleware.py,sha256=t3sBbLdjhtLx-MJiNRfmCS0Os63ghCpBsgeVH70KfnA,2228
84
- webagents/server/core/models.py,sha256=kVIil3ocUvqmUOF-tH0P_GySrFciV2buFXQpprkQz8k,4675
105
+ webagents/server/core/models.py,sha256=UyAV2XxPsaTanddWTVkUDoYmUCTBv25bt5mSgs2hC0I,4754
85
106
  webagents/server/core/monitoring.py,sha256=aYIj-Pv_5-KWlSOMfQR3nnaROGE04W9tZ1osQhf9sAA,1525
86
107
  webagents/server/endpoints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
108
  webagents/server/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
109
  webagents/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
- webagents/utils/logging.py,sha256=SOfNh9FDjrqFI8SoTBe-Hqp7nzagyQU9LDWGZt9GpQ8,14079
90
- webagents-0.2.0.dist-info/METADATA,sha256=7sN7WXn3o48de6aHlYPi22N9UdT3OyoqxnZ_nA3rWoE,9563
91
- webagents-0.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
92
- webagents-0.2.0.dist-info/entry_points.txt,sha256=bITAYBK8-H8EQUrDctEeEKuer4jAp3lfxKfvH5TT1eM,54
93
- webagents-0.2.0.dist-info/licenses/LICENSE,sha256=q_-MstZzVvShVsmUTYc9G-PWmUM2j28kHhPrRCxu92w,1064
94
- webagents-0.2.0.dist-info/RECORD,,
110
+ webagents/utils/logging.py,sha256=c4WV_-gTFk4GauCEpAFJ9LtqHRCSkXNzC5RCm9EW230,14319
111
+ webagents-0.2.3.dist-info/METADATA,sha256=brfgccMsDQqV6IdZ2Ks52iPyPE27d34CwgrNVRDf-pg,9879
112
+ webagents-0.2.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
113
+ webagents-0.2.3.dist-info/entry_points.txt,sha256=bITAYBK8-H8EQUrDctEeEKuer4jAp3lfxKfvH5TT1eM,54
114
+ webagents-0.2.3.dist-info/licenses/LICENSE,sha256=q_-MstZzVvShVsmUTYc9G-PWmUM2j28kHhPrRCxu92w,1064
115
+ webagents-0.2.3.dist-info/RECORD,,