webagents 0.2.2__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 (31) 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/openai/__init__.py +6 -0
  8. webagents/agents/skills/ecosystem/openai/skill.py +867 -0
  9. webagents/agents/skills/ecosystem/replicate/README.md +440 -0
  10. webagents/agents/skills/ecosystem/replicate/__init__.py +10 -0
  11. webagents/agents/skills/ecosystem/replicate/skill.py +517 -0
  12. webagents/agents/skills/examples/__init__.py +6 -0
  13. webagents/agents/skills/examples/music_player.py +329 -0
  14. webagents/agents/skills/robutler/handoff/__init__.py +6 -0
  15. webagents/agents/skills/robutler/handoff/skill.py +191 -0
  16. webagents/agents/skills/robutler/nli/skill.py +180 -24
  17. webagents/agents/skills/robutler/payments/exceptions.py +27 -7
  18. webagents/agents/skills/robutler/payments/skill.py +64 -14
  19. webagents/agents/skills/robutler/storage/files/skill.py +2 -2
  20. webagents/agents/tools/decorators.py +243 -47
  21. webagents/agents/widgets/__init__.py +6 -0
  22. webagents/agents/widgets/renderer.py +150 -0
  23. webagents/server/core/app.py +130 -15
  24. webagents/server/core/models.py +1 -1
  25. webagents/utils/logging.py +13 -1
  26. {webagents-0.2.2.dist-info → webagents-0.2.3.dist-info}/METADATA +8 -25
  27. {webagents-0.2.2.dist-info → webagents-0.2.3.dist-info}/RECORD +30 -20
  28. webagents/agents/skills/ecosystem/openai_agents/__init__.py +0 -0
  29. {webagents-0.2.2.dist-info → webagents-0.2.3.dist-info}/WHEEL +0 -0
  30. {webagents-0.2.2.dist-info → webagents-0.2.3.dist-info}/entry_points.txt +0 -0
  31. {webagents-0.2.2.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.2
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,41 +26,29 @@ 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
- Provides-Extra: crewai
40
- Requires-Dist: crewai>=0.1.0; extra == 'crewai'
41
44
  Provides-Extra: dev
42
45
  Requires-Dist: black>=23.0.0; extra == 'dev'
43
46
  Requires-Dist: mypy>=1.0.0; extra == 'dev'
44
47
  Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
45
48
  Requires-Dist: pytest>=7.0.0; extra == 'dev'
46
49
  Requires-Dist: ruff>=0.0.270; extra == 'dev'
47
- Provides-Extra: ecosystem
48
- Requires-Dist: crewai>=0.1.0; extra == 'ecosystem'
49
- Requires-Dist: httpx>=0.24.0; extra == 'ecosystem'
50
- Requires-Dist: psycopg2-binary>=2.9.0; extra == 'ecosystem'
51
- Requires-Dist: pymongo>=4.0.0; extra == 'ecosystem'
52
- Requires-Dist: supabase>=2.0.0; extra == 'ecosystem'
53
- Requires-Dist: tweepy>=4.14.0; extra == 'ecosystem'
54
50
  Provides-Extra: examples
55
51
  Requires-Dist: openai-agents>=0.0.16; extra == 'examples'
56
- Provides-Extra: mongodb
57
- Requires-Dist: pymongo>=4.0.0; extra == 'mongodb'
58
- Provides-Extra: postgresql
59
- Requires-Dist: psycopg2-binary>=2.9.0; extra == 'postgresql'
60
- Provides-Extra: supabase
61
- Requires-Dist: supabase>=2.0.0; extra == 'supabase'
62
- Provides-Extra: twitter
63
- Requires-Dist: tweepy>=4.14.0; extra == 'twitter'
64
52
  Description-Content-Type: text/markdown
65
53
 
66
54
  # WebAgents - core framework for the Web of Agents
@@ -88,16 +76,11 @@ With WebAgents delegation, your agent is as powerful as the whole ecosystem, and
88
76
  ## 📦 Installation
89
77
 
90
78
  ```bash
91
- # Core framework
92
79
  pip install webagents
93
-
94
- # With ecosystem skills (MongoDB, Supabase, CrewAI, X.com, etc.)
95
- pip install webagents[ecosystem]
96
-
97
- # Individual skills
98
- pip install webagents[mongodb,crewai,twitter]
99
80
  ```
100
81
 
82
+ WebAgents includes everything you need: core framework, LLM integration, and ecosystem skills (MongoDB, Supabase, PostgreSQL, CrewAI, X.com, etc.)
83
+
101
84
  ## 🏃‍♂️ Quick Start
102
85
 
103
86
  ### Create Your First Agent
@@ -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,7 +25,7 @@ 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
@@ -42,7 +42,11 @@ webagents/agents/skills/ecosystem/mongodb/skill.py,sha256=WNTP2vKjIxOdUIbuXd_5NK
42
42
  webagents/agents/skills/ecosystem/n8n/README.md,sha256=huUSJsBCuMdljqKkie7l_skO-xeoFdAisP9jEZqn8eM,7402
43
43
  webagents/agents/skills/ecosystem/n8n/__init__.py,sha256=IZaYCxmJ3oS8yhOlv7kADHzfo26EEO6BjMLFEkw09Yo,52
44
44
  webagents/agents/skills/ecosystem/n8n/skill.py,sha256=p-D0DN2fYy76YGA7TzzUarAnf3Tzhv5W887aHU5h2j0,13759
45
- webagents/agents/skills/ecosystem/openai_agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
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
46
50
  webagents/agents/skills/ecosystem/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
51
  webagents/agents/skills/ecosystem/x_com/README.md,sha256=XmM_c5A_L6Qj32DnQiKSYAy1QXXBjaSNmfkoyZ31mck,12601
48
52
  webagents/agents/skills/ecosystem/x_com/__init__.py,sha256=dlSgfpSKryGldqcMg0H_RvsNnPCrBTVexIZtOPUiIw4,54
@@ -50,6 +54,8 @@ webagents/agents/skills/ecosystem/x_com/skill.py,sha256=ZxPfMP4CaCBql5B5W27qyTDS
50
54
  webagents/agents/skills/ecosystem/zapier/README.md,sha256=9DDA79BIHm0qq2V3H1JbHmS_tZT6nLkuLY7Ta3FhMr0,8985
51
55
  webagents/agents/skills/ecosystem/zapier/__init__.py,sha256=MSDixYLlCB8pNCCi56lw0SKz0M6H0k9kgscM8luo7nk,58
52
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
53
59
  webagents/agents/skills/robutler/__init__.py,sha256=r3pYQje2t1T6ooLa45JXPgVOnTJPDvtrFV3i1i-fDTA,166
54
60
  webagents/agents/skills/robutler/storage.py,sha256=qUTeGUYoW46TshYlLKTORoUIRT3fmzoatNE4gCGB6hU,14690
55
61
  webagents/agents/skills/robutler/auth/README.md,sha256=mRcuGF3ty3WyoMCwR0pxYnOWNOKyM7h5MW67-9Y3V4M,2556
@@ -60,27 +66,31 @@ webagents/agents/skills/robutler/crm/skill.py,sha256=bT1WjpY-vj1KO0zVhi7QbHMfhnh
60
66
  webagents/agents/skills/robutler/discovery/README.md,sha256=3pvo2sJY-Rm29SWuIsHSpDwptaPPDXqjcb6HDGjxaSM,9193
61
67
  webagents/agents/skills/robutler/discovery/__init__.py,sha256=VJYay8yjA1d42HVJDD1GjoZBZD5bEkQovy0jz3GZHbM,319
62
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
63
71
  webagents/agents/skills/robutler/kv/__init__.py,sha256=sbaE6gr_OksCWIhJE0kFMpFErAHUnW_7coW8HiKePM8,53
64
72
  webagents/agents/skills/robutler/kv/skill.py,sha256=ftZulx4gQD9lQVstCTj7ZjsWML2XcZ6PU-2lSGpePHU,3364
65
73
  webagents/agents/skills/robutler/message_history/__init__.py,sha256=15EdlGC6jbcj5ba_kr9U93B1x4U_wG4VeWkY5WW36ZI,215
66
74
  webagents/agents/skills/robutler/message_history/skill.py,sha256=Zq7xATjU-Rx2WbDg812d2S0xPLYlMeM_E9dwn7_NuJU,11179
67
75
  webagents/agents/skills/robutler/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
76
  webagents/agents/skills/robutler/nli/__init__.py,sha256=MrwX21Q5sRlaShckZ56Xt4Xi655wPOdBnJEPZ9ZLm3Q,310
69
- webagents/agents/skills/robutler/nli/skill.py,sha256=Kufv3qqtiC--KfqK9UiJtv9PTELK-vJ_Is9foev8VSg,30607
77
+ webagents/agents/skills/robutler/nli/skill.py,sha256=lBr9DElCYEUFmxmgNnmKwHfpuHZAYYIbSaXSVeAovRI,37868
70
78
  webagents/agents/skills/robutler/notifications/__init__.py,sha256=N5ZWC0YkDRpKsIlazlVdYLBDMvhFg3s1ZIOzpi75EJg,74
71
79
  webagents/agents/skills/robutler/notifications/skill.py,sha256=uJpAoCWh0XR475tPhETEePhu0RzvDSxz9cDH2SC7-qQ,5576
72
80
  webagents/agents/skills/robutler/payments/__init__.py,sha256=cPe_qLG0nHRxfd5-stleNIFpGktH9_nvpIbjdDJTRCk,1112
73
- webagents/agents/skills/robutler/payments/exceptions.py,sha256=92mP-sWdU3bgiPpqGsGN8Z0pWif7coBT5ifDhuEtgM0,9697
74
- 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
75
83
  webagents/agents/skills/robutler/storage/__init__.py,sha256=A3FW8rqu5cMJatys-58Y9qyGFllN1t-XkBDOs_pzCHg,227
76
84
  webagents/agents/skills/robutler/storage/files/__init__.py,sha256=fUM9VH98PQFgA9d32ok_cIGP4QnszLDm2cqWzXJkqGk,202
77
- 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
78
86
  webagents/agents/skills/robutler/storage/json/__init__.py,sha256=Sg6k7ZY032a5SnWUPsW9t2TnK4WFtWsU8TjI3VDLNQo,189
79
87
  webagents/agents/skills/robutler/storage/json/skill.py,sha256=2Z-pQn8n9UMO-l4vojPY9DsNyEAA3PwMA0SBQfFdfps,12425
80
88
  webagents/agents/skills/robutler/storage/kv/skill.py,sha256=iBNnRdsGQpCxFjMiA7sMwMynm9vYk6_2tZGsZnIuUcE,3348
81
89
  webagents/agents/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
- webagents/agents/tools/decorators.py,sha256=CjVqPPQif7jrAm8MWvvcSYfNA4hSeb0BpzJXL-ush-c,17163
90
+ webagents/agents/tools/decorators.py,sha256=k92axXcV8rzy3RSGD6WpjMqUK7EFMOqA88Xsx6aEApM,25820
83
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
84
94
  webagents/agents/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
95
  webagents/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
96
  webagents/server/__init__.py,sha256=GGDg1QqMjG0vLElBS1GggsWIyVe-wtMNyUi5FnNXTUI,609
@@ -90,16 +100,16 @@ webagents/server/monitoring.py,sha256=IA98D_mFellWSA94ytgnMKOUEUSEOoXmSHD9mUB87z
90
100
  webagents/server/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
101
  webagents/server/context/context_vars.py,sha256=grtkAFK_rI9rWcxIpFoLwhOKfIgisfMr29_cGK7Zowo,3615
92
102
  webagents/server/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
- webagents/server/core/app.py,sha256=TuXAAYosbcTlTNUOA5wBo3dPCT02v9mHkFJJST5Qq9Q,38468
103
+ webagents/server/core/app.py,sha256=CWqfjRUiExCG4FLPr-hfcxQYfzeqgkyvMzn8Ydvx15k,45933
94
104
  webagents/server/core/middleware.py,sha256=t3sBbLdjhtLx-MJiNRfmCS0Os63ghCpBsgeVH70KfnA,2228
95
- webagents/server/core/models.py,sha256=kVIil3ocUvqmUOF-tH0P_GySrFciV2buFXQpprkQz8k,4675
105
+ webagents/server/core/models.py,sha256=UyAV2XxPsaTanddWTVkUDoYmUCTBv25bt5mSgs2hC0I,4754
96
106
  webagents/server/core/monitoring.py,sha256=aYIj-Pv_5-KWlSOMfQR3nnaROGE04W9tZ1osQhf9sAA,1525
97
107
  webagents/server/endpoints/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
108
  webagents/server/interfaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
109
  webagents/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
- webagents/utils/logging.py,sha256=SOfNh9FDjrqFI8SoTBe-Hqp7nzagyQU9LDWGZt9GpQ8,14079
101
- webagents-0.2.2.dist-info/METADATA,sha256=mfPtnwrYg6RfKkINvTGTp5PYkxSiPClKcAcqHQwgmA8,10485
102
- webagents-0.2.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
103
- webagents-0.2.2.dist-info/entry_points.txt,sha256=bITAYBK8-H8EQUrDctEeEKuer4jAp3lfxKfvH5TT1eM,54
104
- webagents-0.2.2.dist-info/licenses/LICENSE,sha256=q_-MstZzVvShVsmUTYc9G-PWmUM2j28kHhPrRCxu92w,1064
105
- webagents-0.2.2.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,,