signalwire-agents 0.1.13__py3-none-any.whl → 1.0.7__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 (138) hide show
  1. signalwire_agents/__init__.py +99 -15
  2. signalwire_agents/agent_server.py +176 -23
  3. signalwire_agents/agents/bedrock.py +296 -0
  4. signalwire_agents/cli/__init__.py +9 -0
  5. signalwire_agents/cli/build_search.py +951 -41
  6. signalwire_agents/cli/config.py +80 -0
  7. signalwire_agents/cli/core/__init__.py +10 -0
  8. signalwire_agents/cli/core/agent_loader.py +470 -0
  9. signalwire_agents/cli/core/argparse_helpers.py +179 -0
  10. signalwire_agents/cli/core/dynamic_config.py +71 -0
  11. signalwire_agents/cli/core/service_loader.py +303 -0
  12. signalwire_agents/cli/execution/__init__.py +10 -0
  13. signalwire_agents/cli/execution/datamap_exec.py +446 -0
  14. signalwire_agents/cli/execution/webhook_exec.py +134 -0
  15. signalwire_agents/cli/init_project.py +1225 -0
  16. signalwire_agents/cli/output/__init__.py +10 -0
  17. signalwire_agents/cli/output/output_formatter.py +255 -0
  18. signalwire_agents/cli/output/swml_dump.py +186 -0
  19. signalwire_agents/cli/simulation/__init__.py +10 -0
  20. signalwire_agents/cli/simulation/data_generation.py +374 -0
  21. signalwire_agents/cli/simulation/data_overrides.py +200 -0
  22. signalwire_agents/cli/simulation/mock_env.py +282 -0
  23. signalwire_agents/cli/swaig_test_wrapper.py +52 -0
  24. signalwire_agents/cli/test_swaig.py +566 -2366
  25. signalwire_agents/cli/types.py +81 -0
  26. signalwire_agents/core/__init__.py +2 -2
  27. signalwire_agents/core/agent/__init__.py +12 -0
  28. signalwire_agents/core/agent/config/__init__.py +12 -0
  29. signalwire_agents/core/agent/deployment/__init__.py +9 -0
  30. signalwire_agents/core/agent/deployment/handlers/__init__.py +9 -0
  31. signalwire_agents/core/agent/prompt/__init__.py +14 -0
  32. signalwire_agents/core/agent/prompt/manager.py +306 -0
  33. signalwire_agents/core/agent/routing/__init__.py +9 -0
  34. signalwire_agents/core/agent/security/__init__.py +9 -0
  35. signalwire_agents/core/agent/swml/__init__.py +9 -0
  36. signalwire_agents/core/agent/tools/__init__.py +15 -0
  37. signalwire_agents/core/agent/tools/decorator.py +97 -0
  38. signalwire_agents/core/agent/tools/registry.py +210 -0
  39. signalwire_agents/core/agent_base.py +825 -2916
  40. signalwire_agents/core/auth_handler.py +233 -0
  41. signalwire_agents/core/config_loader.py +259 -0
  42. signalwire_agents/core/contexts.py +418 -0
  43. signalwire_agents/core/data_map.py +3 -15
  44. signalwire_agents/core/function_result.py +116 -44
  45. signalwire_agents/core/logging_config.py +162 -18
  46. signalwire_agents/core/mixins/__init__.py +28 -0
  47. signalwire_agents/core/mixins/ai_config_mixin.py +442 -0
  48. signalwire_agents/core/mixins/auth_mixin.py +287 -0
  49. signalwire_agents/core/mixins/prompt_mixin.py +358 -0
  50. signalwire_agents/core/mixins/serverless_mixin.py +368 -0
  51. signalwire_agents/core/mixins/skill_mixin.py +55 -0
  52. signalwire_agents/core/mixins/state_mixin.py +153 -0
  53. signalwire_agents/core/mixins/tool_mixin.py +230 -0
  54. signalwire_agents/core/mixins/web_mixin.py +1134 -0
  55. signalwire_agents/core/security_config.py +333 -0
  56. signalwire_agents/core/skill_base.py +84 -1
  57. signalwire_agents/core/skill_manager.py +62 -20
  58. signalwire_agents/core/swaig_function.py +18 -5
  59. signalwire_agents/core/swml_builder.py +207 -11
  60. signalwire_agents/core/swml_handler.py +27 -21
  61. signalwire_agents/core/swml_renderer.py +123 -312
  62. signalwire_agents/core/swml_service.py +167 -200
  63. signalwire_agents/prefabs/concierge.py +0 -3
  64. signalwire_agents/prefabs/faq_bot.py +0 -3
  65. signalwire_agents/prefabs/info_gatherer.py +0 -3
  66. signalwire_agents/prefabs/receptionist.py +0 -3
  67. signalwire_agents/prefabs/survey.py +0 -3
  68. signalwire_agents/schema.json +9218 -5489
  69. signalwire_agents/search/__init__.py +7 -1
  70. signalwire_agents/search/document_processor.py +490 -31
  71. signalwire_agents/search/index_builder.py +307 -37
  72. signalwire_agents/search/migration.py +418 -0
  73. signalwire_agents/search/models.py +30 -0
  74. signalwire_agents/search/pgvector_backend.py +752 -0
  75. signalwire_agents/search/query_processor.py +162 -31
  76. signalwire_agents/search/search_engine.py +916 -35
  77. signalwire_agents/search/search_service.py +376 -53
  78. signalwire_agents/skills/README.md +452 -0
  79. signalwire_agents/skills/__init__.py +10 -1
  80. signalwire_agents/skills/api_ninjas_trivia/README.md +215 -0
  81. signalwire_agents/skills/api_ninjas_trivia/__init__.py +12 -0
  82. signalwire_agents/skills/api_ninjas_trivia/skill.py +237 -0
  83. signalwire_agents/skills/datasphere/README.md +210 -0
  84. signalwire_agents/skills/datasphere/skill.py +84 -3
  85. signalwire_agents/skills/datasphere_serverless/README.md +258 -0
  86. signalwire_agents/skills/datasphere_serverless/__init__.py +9 -0
  87. signalwire_agents/skills/datasphere_serverless/skill.py +82 -1
  88. signalwire_agents/skills/datetime/README.md +132 -0
  89. signalwire_agents/skills/datetime/__init__.py +9 -0
  90. signalwire_agents/skills/datetime/skill.py +20 -7
  91. signalwire_agents/skills/joke/README.md +149 -0
  92. signalwire_agents/skills/joke/__init__.py +9 -0
  93. signalwire_agents/skills/joke/skill.py +21 -0
  94. signalwire_agents/skills/math/README.md +161 -0
  95. signalwire_agents/skills/math/__init__.py +9 -0
  96. signalwire_agents/skills/math/skill.py +18 -4
  97. signalwire_agents/skills/mcp_gateway/README.md +230 -0
  98. signalwire_agents/skills/mcp_gateway/__init__.py +10 -0
  99. signalwire_agents/skills/mcp_gateway/skill.py +421 -0
  100. signalwire_agents/skills/native_vector_search/README.md +210 -0
  101. signalwire_agents/skills/native_vector_search/__init__.py +9 -0
  102. signalwire_agents/skills/native_vector_search/skill.py +569 -101
  103. signalwire_agents/skills/play_background_file/README.md +218 -0
  104. signalwire_agents/skills/play_background_file/__init__.py +12 -0
  105. signalwire_agents/skills/play_background_file/skill.py +242 -0
  106. signalwire_agents/skills/registry.py +395 -40
  107. signalwire_agents/skills/spider/README.md +236 -0
  108. signalwire_agents/skills/spider/__init__.py +13 -0
  109. signalwire_agents/skills/spider/skill.py +598 -0
  110. signalwire_agents/skills/swml_transfer/README.md +395 -0
  111. signalwire_agents/skills/swml_transfer/__init__.py +10 -0
  112. signalwire_agents/skills/swml_transfer/skill.py +359 -0
  113. signalwire_agents/skills/weather_api/README.md +178 -0
  114. signalwire_agents/skills/weather_api/__init__.py +12 -0
  115. signalwire_agents/skills/weather_api/skill.py +191 -0
  116. signalwire_agents/skills/web_search/README.md +163 -0
  117. signalwire_agents/skills/web_search/__init__.py +9 -0
  118. signalwire_agents/skills/web_search/skill.py +586 -112
  119. signalwire_agents/skills/wikipedia_search/README.md +228 -0
  120. signalwire_agents/{core/state → skills/wikipedia_search}/__init__.py +5 -4
  121. signalwire_agents/skills/{wikipedia → wikipedia_search}/skill.py +33 -3
  122. signalwire_agents/web/__init__.py +17 -0
  123. signalwire_agents/web/web_service.py +559 -0
  124. signalwire_agents-1.0.7.data/data/share/man/man1/sw-agent-init.1 +307 -0
  125. signalwire_agents-1.0.7.data/data/share/man/man1/sw-search.1 +483 -0
  126. signalwire_agents-1.0.7.data/data/share/man/man1/swaig-test.1 +308 -0
  127. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.7.dist-info}/METADATA +344 -215
  128. signalwire_agents-1.0.7.dist-info/RECORD +142 -0
  129. signalwire_agents-1.0.7.dist-info/entry_points.txt +4 -0
  130. signalwire_agents/core/state/file_state_manager.py +0 -219
  131. signalwire_agents/core/state/state_manager.py +0 -101
  132. signalwire_agents/skills/wikipedia/__init__.py +0 -9
  133. signalwire_agents-0.1.13.data/data/schema.json +0 -5611
  134. signalwire_agents-0.1.13.dist-info/RECORD +0 -67
  135. signalwire_agents-0.1.13.dist-info/entry_points.txt +0 -3
  136. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.7.dist-info}/WHEEL +0 -0
  137. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.7.dist-info}/licenses/LICENSE +0 -0
  138. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,142 @@
1
+ signalwire_agents/__init__.py,sha256=sN_xHIXM-HsCXjYqOjjhGJE0gRq52fXESYWP9mY38lA,5030
2
+ signalwire_agents/agent_server.py,sha256=5GPt6XekVxep9esZY9s4MG6sOR-VF_m53U25r3WoML4,30964
3
+ signalwire_agents/schema.json,sha256=YQv4-KiegE00XvxoLMKAml6aCGitnt3kBq31ECxTHK8,385886
4
+ signalwire_agents/agents/bedrock.py,sha256=J582gooNtxtep4xdVOfyDzRtHp_XrurPMS93xf2Xod0,10836
5
+ signalwire_agents/cli/__init__.py,sha256=XbxAQFaCIdGXIXJiriVBWoFPOJsC401u21588nO4TG8,388
6
+ signalwire_agents/cli/build_search.py,sha256=wDuonVY9fcqspThRHmbArTuZLKsiStu-ozVExtqawA8,54937
7
+ signalwire_agents/cli/config.py,sha256=2i4e0BArdKsaXxjeueYYRNke7GWicHPYC2wuitVrP7A,2541
8
+ signalwire_agents/cli/init_project.py,sha256=A7Qx7UoMOG1fdWWyn4ceH6oc5BV6jVAxudPrtOVBBjM,36396
9
+ signalwire_agents/cli/swaig_test_wrapper.py,sha256=t63HQpEc1Up5AcysEHP1OsEQcgSMKH-9H1L2IhFso18,1533
10
+ signalwire_agents/cli/test_swaig.py,sha256=-v-XjTUWZNxmMJuOF5_cB1Jz8x8emJoqgqS_8jLeT4Y,31487
11
+ signalwire_agents/cli/types.py,sha256=U8Abc4Atb5-wMbhM3MjcuIXsbONLOu1ucePWOCgqdco,1810
12
+ signalwire_agents/cli/core/__init__.py,sha256=YX37KLHd3LEjeiv4aVXeWnjFWxbW3Z4mJ0Yw7bdVv0A,229
13
+ signalwire_agents/cli/core/agent_loader.py,sha256=foX4sYv-ULpxTAJ1n4lRLtsey_UShYy4L3gHfcy5RDs,20051
14
+ signalwire_agents/cli/core/argparse_helpers.py,sha256=5Zr8s_NH-HZ3ecN_lZUHcuEjgh1sBstmo9HVje1Q0E4,7017
15
+ signalwire_agents/cli/core/dynamic_config.py,sha256=FuB0slymgoDfzcKWXPy_Dy9qprSTn0e1ou7A0Vgwie8,2686
16
+ signalwire_agents/cli/core/service_loader.py,sha256=dwZ8IjCeaXw_sqaAO6rdEWpVZ90_Cs5dRnM04VqIqXo,9984
17
+ signalwire_agents/cli/execution/__init__.py,sha256=GS9EkXJhhFQjn7NSmxM5JX1Iy7pm6U6rW2BZCk3bxas,223
18
+ signalwire_agents/cli/execution/datamap_exec.py,sha256=UNQ8gn1KW72YDjegY8SzeZWebZiD-DO6dRLkxia438k,20389
19
+ signalwire_agents/cli/execution/webhook_exec.py,sha256=m4gIX-MaTG8JngI57qyeWGYDQJwkbJANpvkBwJeJ_7o,4710
20
+ signalwire_agents/cli/output/__init__.py,sha256=aGBWE-xXbqsFi-cyD5MCs8v3chxirSxdDyDZTUWYJO4,234
21
+ signalwire_agents/cli/output/output_formatter.py,sha256=-RpT9TY7YT1DYBg75Ngf5j42hA6QM_lPAzwhFCiZYNE,12685
22
+ signalwire_agents/cli/output/swml_dump.py,sha256=NP9MCFjZr4BOt3xUNlW8N9Bw8ZGAGAudYlaiUIrwRso,6606
23
+ signalwire_agents/cli/simulation/__init__.py,sha256=YtfbBKujx8SjZqaOtMdgle8FvxzKeD8_pRzeD25ylsU,236
24
+ signalwire_agents/cli/simulation/data_generation.py,sha256=pxa9aJ6XkI0O8yAIGvBTUU3eBVkJizNx9xW8mHEosTI,11918
25
+ signalwire_agents/cli/simulation/data_overrides.py,sha256=3_3pT6j-q2gRufPX2bZ1BrmY7u1IdloLooKAJil33vI,6319
26
+ signalwire_agents/cli/simulation/mock_env.py,sha256=fvaR_xdLMm8AbpNUbTJOFG9THcti3Zds-0QNDbKMaYk,10249
27
+ signalwire_agents/core/__init__.py,sha256=xjPq8DmUnWYUG28sd17n430VWPmMH9oZ9W14gYwG96g,806
28
+ signalwire_agents/core/agent_base.py,sha256=wQIE3q2PGg4xGZQfOch3wfjwA0Niv4_iHUmYv5QkAbc,57897
29
+ signalwire_agents/core/auth_handler.py,sha256=jXrof9WZ1W9qqlQT9WElcmSRafL2kG7207x5SqWN9MU,8481
30
+ signalwire_agents/core/config_loader.py,sha256=rStVRRUaeMGrMc44ocr0diMQQARZhbKqwMqQ6kqUNos,8722
31
+ signalwire_agents/core/contexts.py,sha256=g9FgOGMfGCUWlm57YZcv7CvOf-Ub9FdKZIOMu14ADfE,24428
32
+ signalwire_agents/core/data_map.py,sha256=0qp3VcrRS0RtZPApoAaGgM-udLBb1ysnyMJuWd6sSew,17134
33
+ signalwire_agents/core/function_result.py,sha256=4CcbxwstlSRUQtbCty2evewvNZP35dWUJunzz2YeYNI,48108
34
+ signalwire_agents/core/logging_config.py,sha256=x4d_RAjBjVpJOFA2vXnPP2dNr13BZHz091J5rGpC77Y,13142
35
+ signalwire_agents/core/pom_builder.py,sha256=ywuiIfP8BeLBPo_G4X1teZlG6zTCMkW71CZnmyoDTAQ,6636
36
+ signalwire_agents/core/security_config.py,sha256=iAnAzKEJQiXL6mMpDaYm3Sjkxwm4x2N9HD6DeWSI8yI,12536
37
+ signalwire_agents/core/skill_base.py,sha256=kCgzvlA9uu3CblLAigYuM-0LL-n0xEEoXV-JmNn-Beo,7795
38
+ signalwire_agents/core/skill_manager.py,sha256=D4erpz0tmSYLqyfeteNNIY0VRWDtX0rDw3n7Z_f0W5U,10493
39
+ signalwire_agents/core/swaig_function.py,sha256=KnUQ2g99kDSzOzD1PJ0Iqs8DeeZ6jDIIN54C5MA4TWw,7521
40
+ signalwire_agents/core/swml_builder.py,sha256=tJBFDAVTENEfjGLp2h9_AKOYt5O9FrSYLI-nZZVwM1E,15604
41
+ signalwire_agents/core/swml_handler.py,sha256=hFDq41dQWL3EdFbq6h0hizE1dIqdVeiTeCrujbZsPzo,8397
42
+ signalwire_agents/core/swml_renderer.py,sha256=-WAB_5ss836a8nBo5zlb6SaQKFNF4XIo1odWIXM4eE8,6860
43
+ signalwire_agents/core/swml_service.py,sha256=vgK_OScBlXdsr3dMe7pLUnm_cQVWtmNl_lu5guAKDlg,49851
44
+ signalwire_agents/core/agent/__init__.py,sha256=qccTmLD9b24tZDAoIPEY6vJ2p1R_ArZ_ZCKbBlKvPQ8,239
45
+ signalwire_agents/core/agent/config/__init__.py,sha256=5XvTfnYeeGdoLr4tJjbe1OhF26nOcR5VTDIhtMGCu3I,244
46
+ signalwire_agents/core/agent/deployment/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
47
+ signalwire_agents/core/agent/deployment/handlers/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
48
+ signalwire_agents/core/agent/prompt/__init__.py,sha256=4pKL3P7q9uAEtbwOKSJ_supaDn8LZl2uKXuWM72f_Pg,288
49
+ signalwire_agents/core/agent/prompt/manager.py,sha256=0jNTufykxuz8O2w-gsHeTxWH-f36suawWjNF5JYZ_X0,10074
50
+ signalwire_agents/core/agent/routing/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
51
+ signalwire_agents/core/agent/security/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
52
+ signalwire_agents/core/agent/swml/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
53
+ signalwire_agents/core/agent/tools/__init__.py,sha256=eOcmyeGm6qogT3wsBx7QvdjmTbc1p5hnPR6uIlvTLxI,339
54
+ signalwire_agents/core/agent/tools/decorator.py,sha256=pC6j1114GwVBd2U3h23I9gKLtu8AgeiuWV0lUzz682U,2961
55
+ signalwire_agents/core/agent/tools/registry.py,sha256=HScbKKwpJqFZ_odmeFklSQ0p0EMasEyKSxNwX568OPo,8054
56
+ signalwire_agents/core/mixins/__init__.py,sha256=NsFpfF7TDP_lNR0Riw4Nbvt4fDbv_A3OoVbBqRrtXQM,652
57
+ signalwire_agents/core/mixins/ai_config_mixin.py,sha256=In7SrVlKoRaGsDIXEDNGsrEqCjotmcQr_XA563VWABQ,16265
58
+ signalwire_agents/core/mixins/auth_mixin.py,sha256=Y9kR423-76U_pKL7KXzseeXX2a-4WxNWyo3odS7TDQM,9879
59
+ signalwire_agents/core/mixins/prompt_mixin.py,sha256=bEsuw9J2F_upFYI02KyC7o2eGZjwOKQ352rmJBZirAM,13729
60
+ signalwire_agents/core/mixins/serverless_mixin.py,sha256=QIIbl_-16XFJi5aqrWpNzORbyCJQmhaplWXnW6U9i68,16137
61
+ signalwire_agents/core/mixins/skill_mixin.py,sha256=Qz3RKPmq_iMY4NecyxOHk3dW3W-O4iEm2ahhMjAcqRs,1861
62
+ signalwire_agents/core/mixins/state_mixin.py,sha256=q3achpyUYZKuJaqKf12O22FXpSsNNsMEonSvlpSHCkA,6594
63
+ signalwire_agents/core/mixins/tool_mixin.py,sha256=6CaNdaspHcfte0qSB_bSN8PTsqxRZzL_AXYk8QoWyXE,8660
64
+ signalwire_agents/core/mixins/web_mixin.py,sha256=2Tj0mulcjiUBuqHnJ76UHc5C2L5xV91HKyxfG3lNj4k,50612
65
+ signalwire_agents/core/security/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
66
+ signalwire_agents/core/security/session_manager.py,sha256=s5hXYcFnrsYFoyo-zcN7EJy-wInZQI_cWTBHX9MxHR4,9164
67
+ signalwire_agents/prefabs/__init__.py,sha256=MW11J63XH7KxF2MWguRsMFM9iqMWexaEO9ynDPL_PDM,715
68
+ signalwire_agents/prefabs/concierge.py,sha256=XB-Ziy0tteYI5NHu7Sinx-N960nzkhq2m4v8Ei8UHas,9921
69
+ signalwire_agents/prefabs/faq_bot.py,sha256=cUuHhnDB8S4aVg-DiQe4jBmCAPrYQrND_Mff9iaeEa0,10572
70
+ signalwire_agents/prefabs/info_gatherer.py,sha256=0LpYTaU7C76Efp3yUIdNX6xzWH7mj5pBYewilpkCL5g,15189
71
+ signalwire_agents/prefabs/receptionist.py,sha256=em0uk_F0tmePvzE6Hi9HFlL3MHChH0RaHHqSvww9pK0,10323
72
+ signalwire_agents/prefabs/survey.py,sha256=a-0-xAnQYhdX4Lzgyna14lpNfaCV-rLUFkQF6QOCQAY,14534
73
+ signalwire_agents/search/__init__.py,sha256=cb8Rtg4Jut9ZhuSbiaHl79G0iWgMhJkLu84urkY0lRc,4215
74
+ signalwire_agents/search/document_processor.py,sha256=emlmYAgr34Qyhfqm4VppqTCpm1cj8Db6ziHoFuw4ekE,51929
75
+ signalwire_agents/search/index_builder.py,sha256=v1LGhbzzKlCilO4g6nqQJVYEAWvInP2j5B1QrAEj4V8,33772
76
+ signalwire_agents/search/migration.py,sha256=UZPrpUOMZeLVNO1cEDp3tnZYG6ys8-VCFlZXmzig_E0,16582
77
+ signalwire_agents/search/models.py,sha256=isYOYwQT0eWCVdcYSSd8w6z2gFYUobtC8BAUhV7FUVI,840
78
+ signalwire_agents/search/pgvector_backend.py,sha256=pYAFB0_KX0LM1AeAYC_yQ44HMrBJJAxXZQn0OWtNQI4,28557
79
+ signalwire_agents/search/query_processor.py,sha256=34MXOWyEKKMgSCNNM5X2SRyWwF8CPJeorgNjFn661zs,19587
80
+ signalwire_agents/search/search_engine.py,sha256=kDIIBuxSMAoedMS0mnxvPCZOx59fx4mJwxhVRpB6BNU,57461
81
+ signalwire_agents/search/search_service.py,sha256=FYjX95TD0Cr6jakYU4A1GIdBkj72euq2fM3zaBe2b9U,22379
82
+ signalwire_agents/skills/README.md,sha256=sM1_08IsKdRDCzYHPLzppJbaK5MvRelsVL6Kd9A9Ubo,12193
83
+ signalwire_agents/skills/__init__.py,sha256=9AMEcyk2tDaGiUjwVIson_tVWxV4oU_2NnGGNTbHuyQ,533
84
+ signalwire_agents/skills/registry.py,sha256=zURdeAaccZyUSwLRl8K4ILXICMV3ouYQIA4rUBq6b5E,20792
85
+ signalwire_agents/skills/api_ninjas_trivia/README.md,sha256=SoyS7VFh3eVIiVnQ5gfTfs0a_gAlLwnmT2W2FrbNU0A,6762
86
+ signalwire_agents/skills/api_ninjas_trivia/__init__.py,sha256=zN305bBQkzlJyUNsPUMPt3gDJbvc-Iigkdh0rBou_RE,267
87
+ signalwire_agents/skills/api_ninjas_trivia/skill.py,sha256=ajJm0Vd07Oz3h0sHP0rRyckAXAbFRtcP7ws9GiAhfjw,8626
88
+ signalwire_agents/skills/datasphere/README.md,sha256=7G5t0V04SlnJ39U-3zOoIOfkNFrVEo-s45lCUlYmJGo,7351
89
+ signalwire_agents/skills/datasphere/__init__.py,sha256=SJJlmeMSeezjINPgkuWN1XzDPN_Z3GzZ_StzO1BtxQs,257
90
+ signalwire_agents/skills/datasphere/skill.py,sha256=OcDgmFSvIA3qy6a24E_fIgXrPKGRnLRHtPh9JeJ5YOY,12643
91
+ signalwire_agents/skills/datasphere_serverless/README.md,sha256=FErV97NEdYD_N1wZxkLqy6DSml5B9mCJmEgCUdGxh6A,9299
92
+ signalwire_agents/skills/datasphere_serverless/__init__.py,sha256=jpMNDcGiXsVbSCVUrc_AwLARqEtVu4dPYZPJSJ-K3rc,261
93
+ signalwire_agents/skills/datasphere_serverless/skill.py,sha256=i57VkMo2gU5YE9Z2lIxFfZtYkvkwMpnek49eSSfMFS0,9882
94
+ signalwire_agents/skills/datetime/README.md,sha256=95SzVz-Pcm9MPqZ4D3sSYKMwdpsDNwwCpWFRK027-Pc,4534
95
+ signalwire_agents/skills/datetime/__init__.py,sha256=Irajm2sUhmQVFgais-J-q-3d58tNnJ4nbLmnphr90nI,234
96
+ signalwire_agents/skills/datetime/skill.py,sha256=-MnycSmhK2JWwuHAStxz0mHNuMIvvWCW-I9La44WDts,4292
97
+ signalwire_agents/skills/joke/README.md,sha256=xUa2_0Pk9neli-UJxI4BPt3Fb1_5Xa3m8RuDlrkfBao,3594
98
+ signalwire_agents/skills/joke/__init__.py,sha256=8Rc5_nj30bdga2n9H9JSI2WzMn40pjApd-y-tk5WIkI,244
99
+ signalwire_agents/skills/joke/skill.py,sha256=BKPA50iht8I_mVBJ-PIQHjJJz1m0V2w5J69AfVMx23o,4092
100
+ signalwire_agents/skills/math/README.md,sha256=Nrv7PxkFPSxdnAN6856Fp1CfvsUwdncpRFFDERxmMe0,5335
101
+ signalwire_agents/skills/math/__init__.py,sha256=F7emZqBpAAkqJZxA3RNTzRSAXE5e2xu8PtFOPHebfKo,230
102
+ signalwire_agents/skills/math/skill.py,sha256=pfwlljnN_UoT9rzkggzPrgGWuoZ_wnovrph-aLG4ULY,3761
103
+ signalwire_agents/skills/mcp_gateway/README.md,sha256=t-71TTWlEvjgWLTcT3v4kMw9zlrKXTAC_sCjb1haNew,5826
104
+ signalwire_agents/skills/mcp_gateway/__init__.py,sha256=zLgOa7s0sIQphTNJjvasIAW7llxAApez7moC_e1tzP0,236
105
+ signalwire_agents/skills/mcp_gateway/skill.py,sha256=bOdfBFsboRWSVoRA5X9vcmkH9OJIQxUllhMzhqHV1XI,17155
106
+ signalwire_agents/skills/native_vector_search/README.md,sha256=eFVRoDwZlZwbBXUKyKrvfC6AL4T8MXj0B-IgIdBZF70,5526
107
+ signalwire_agents/skills/native_vector_search/__init__.py,sha256=RofpN3Sd-vyWeUCTYH2dRVrl7h6YuyG5OK772UQ-KFk,220
108
+ signalwire_agents/skills/native_vector_search/skill.py,sha256=8f9pO0wKRii8WO-YSsOa20pmTzio7iSyT9IxHTQ5u3w,37906
109
+ signalwire_agents/skills/play_background_file/README.md,sha256=omJ_jY5Co6Mk-gJt_hoSl40wemmTbzae3DBll6HL0B4,7026
110
+ signalwire_agents/skills/play_background_file/__init__.py,sha256=iETc6e-0Cai3RUTQWhg9BieWi3NF3_DWWBKdYXcd4ok,273
111
+ signalwire_agents/skills/play_background_file/skill.py,sha256=HgPc2FIvXKJHZ7gO2QEzQe6-uUBPrw_6sRJJpU83GTY,8822
112
+ signalwire_agents/skills/spider/README.md,sha256=yBa09JzgLikG3STbDNbRCKUM3l3XU5-D923I2g8CTVc,6909
113
+ signalwire_agents/skills/spider/__init__.py,sha256=bZcCGLX5Cz18qY8rOvAAync6BRtketxaU19l6YcA_iI,285
114
+ signalwire_agents/skills/spider/skill.py,sha256=_gdw_fJO8wZhs1yx-JGdY8Tf-605NjOG-KH44-Js9Cc,23020
115
+ signalwire_agents/skills/swml_transfer/README.md,sha256=2Y6CH5Bm9kI5IYCLczIQIYlaYUq6VX_S4Irct2CQMmQ,14681
116
+ signalwire_agents/skills/swml_transfer/__init__.py,sha256=YyfxRpbgT4ZpEjGolwffKqjUzX4VqDNLdqfSoA0D0IY,238
117
+ signalwire_agents/skills/swml_transfer/skill.py,sha256=_qzJRd9P5VN8flTDe9N-9cvsLU0sN7XuY5yjk-DNlv8,15363
118
+ signalwire_agents/skills/weather_api/README.md,sha256=buzCtrhxXAxZ8k7Qt_lR62E_tqnpXmXRsTarb_F43zg,6439
119
+ signalwire_agents/skills/weather_api/__init__.py,sha256=WCS--GFBX8straIZPuGAmTDZ7t-y7VI6ioB1Kf8eeP4,257
120
+ signalwire_agents/skills/weather_api/skill.py,sha256=LNJItYzgRSZYNYcH7Z37BOjjPy3aaM0OjMRnAxiUhOI,7204
121
+ signalwire_agents/skills/web_search/README.md,sha256=Y95cxEScMzhmslUJF8u_Nh15FbEBuus4P-E8_kk2an0,5438
122
+ signalwire_agents/skills/web_search/__init__.py,sha256=kv4CzmF1lldRZcL_HivieslP7gtTFvxcfprKG4n6b-Q,236
123
+ signalwire_agents/skills/web_search/skill.py,sha256=kJHMenjSnEdSuAbS1yu4KrX8YVCoGJvNltn8v1noYek,30810
124
+ signalwire_agents/skills/wikipedia_search/README.md,sha256=KFIQ8XhqrTG8NRs72dIbjJacy2DlYEXLtxgy23gyRi4,7585
125
+ signalwire_agents/skills/wikipedia_search/__init__.py,sha256=yJ6iYTSyJC96mwwUsI_FneFhDBcLYD4xEerBKlWLTb8,375
126
+ signalwire_agents/skills/wikipedia_search/skill.py,sha256=peNxT3GHMJY5OFQ-weneO83NpSstGjcmrTN_ENzUsEo,7910
127
+ signalwire_agents/utils/__init__.py,sha256=1KVsHzwgfktSXHe3vqSRGImjtIE58szwD2FHHoFBtvY,601
128
+ signalwire_agents/utils/pom_utils.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
129
+ signalwire_agents/utils/schema_utils.py,sha256=i4okv_O9bUApwT_jJf4Yoij3bLCrGrW3DC-vzSy2RuY,16392
130
+ signalwire_agents/utils/token_generators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
131
+ signalwire_agents/utils/validators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
132
+ signalwire_agents/web/__init__.py,sha256=XE_pSTY9Aalzr7J7wqFth1Zr3cccQHPPcF5HWNrOpz8,383
133
+ signalwire_agents/web/web_service.py,sha256=a2PSHJgX1tlZr0Iz1A1UouZjXEePJAZL632evvLVM38,21071
134
+ signalwire_agents-1.0.7.data/data/share/man/man1/sw-agent-init.1,sha256=EFE8iOj2aGrZRwSXRoZdrZTZXOROuQmuIrZuzp9yI2s,6880
135
+ signalwire_agents-1.0.7.data/data/share/man/man1/sw-search.1,sha256=9jJ6V6t6DgmXByz8Lw9exjf683Cw3sJGro8-eB0M9EY,10413
136
+ signalwire_agents-1.0.7.data/data/share/man/man1/swaig-test.1,sha256=Ri0EITo8YMFowkcYltwPSwU4VJdRzo7XTWloi5WddCg,7815
137
+ signalwire_agents-1.0.7.dist-info/licenses/LICENSE,sha256=NYvAsB-rTcSvG9cqHt9EUHAWLiA9YzM4Qfz-mPdvDR0,1067
138
+ signalwire_agents-1.0.7.dist-info/METADATA,sha256=F5nXnOYnUtPMN_GUga44bks-UZUyRIk4Tn3YsZ2Z96s,41599
139
+ signalwire_agents-1.0.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
140
+ signalwire_agents-1.0.7.dist-info/entry_points.txt,sha256=GDaOxm8I9Bf3Sd2jDSGRXDG2ezDMgmX6ockjpDfK_IY,200
141
+ signalwire_agents-1.0.7.dist-info/top_level.txt,sha256=kDGS6ZYv84K9P5Kyg9_S8P_pbUXoHkso0On_DB5bbWc,18
142
+ signalwire_agents-1.0.7.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+ sw-agent-init = signalwire_agents.cli.init_project:main
3
+ sw-search = signalwire_agents.cli.build_search:console_entry_point
4
+ swaig-test = signalwire_agents.cli.swaig_test_wrapper:main
@@ -1,219 +0,0 @@
1
- """
2
- Copyright (c) 2025 SignalWire
3
-
4
- This file is part of the SignalWire AI Agents SDK.
5
-
6
- Licensed under the MIT License.
7
- See LICENSE file in the project root for full license information.
8
- """
9
-
10
- """
11
- File-based implementation of the StateManager interface
12
- """
13
-
14
- import os
15
- import json
16
- import tempfile
17
- import time
18
- from datetime import datetime, timedelta
19
- from typing import Dict, Any, Optional, List
20
-
21
- from .state_manager import StateManager
22
-
23
-
24
- class FileStateManager(StateManager):
25
- """
26
- File-based state manager implementation
27
-
28
- This implementation stores state data as JSON files in a directory.
29
- Each call's state is stored in a separate file named by call_id.
30
- Files older than expiry_days are automatically cleaned up.
31
-
32
- This is suitable for development and low-volume deployments.
33
- For production, consider using database or Redis implementations.
34
- """
35
-
36
- def __init__(
37
- self,
38
- storage_dir: Optional[str] = None,
39
- expiry_days: float = 1.0
40
- ):
41
- """
42
- Initialize the file state manager
43
-
44
- Args:
45
- storage_dir: Directory to store state files (default: system temp dir)
46
- expiry_days: Days after which state files are considered expired
47
- """
48
- self.storage_dir = storage_dir or os.path.join(tempfile.gettempdir(), "signalwire_state")
49
- self.expiry_days = expiry_days
50
-
51
- # Create storage directory if it doesn't exist
52
- if not os.path.exists(self.storage_dir):
53
- os.makedirs(self.storage_dir)
54
-
55
- def _get_file_path(self, call_id: str) -> str:
56
- """Get the file path for a call_id"""
57
- # Sanitize call_id to ensure it's safe for a filename
58
- sanitized_id = "".join(c for c in call_id if c.isalnum() or c in "-_.")
59
- return os.path.join(self.storage_dir, f"{sanitized_id}.json")
60
-
61
- def store(self, call_id: str, data: Dict[str, Any]) -> bool:
62
- """
63
- Store state data for a call
64
-
65
- Args:
66
- call_id: Unique identifier for the call
67
- data: Dictionary of state data to store
68
-
69
- Returns:
70
- True if successful, False otherwise
71
- """
72
- try:
73
- # Add metadata including timestamp
74
- state_data = {
75
- "call_id": call_id,
76
- "created_at": datetime.now().isoformat(),
77
- "last_updated": datetime.now().isoformat(),
78
- "data": data
79
- }
80
-
81
- file_path = self._get_file_path(call_id)
82
- with open(file_path, "w") as f:
83
- json.dump(state_data, f, indent=2)
84
- return True
85
- except Exception as e:
86
- print(f"Error storing state for call {call_id}: {e}")
87
- return False
88
-
89
- def retrieve(self, call_id: str) -> Optional[Dict[str, Any]]:
90
- """
91
- Retrieve state data for a call
92
-
93
- Args:
94
- call_id: Unique identifier for the call
95
-
96
- Returns:
97
- Dictionary of state data or None if not found
98
- """
99
- file_path = self._get_file_path(call_id)
100
- if not os.path.exists(file_path):
101
- return None
102
-
103
- try:
104
- with open(file_path, "r") as f:
105
- state_data = json.load(f)
106
-
107
- # Check if the file is expired
108
- created_at = datetime.fromisoformat(state_data["created_at"])
109
- if (datetime.now() - created_at) > timedelta(days=self.expiry_days):
110
- # Expired, so delete it and return None
111
- os.remove(file_path)
112
- return None
113
-
114
- return state_data["data"]
115
- except Exception as e:
116
- print(f"Error retrieving state for call {call_id}: {e}")
117
- return None
118
-
119
- def update(self, call_id: str, data: Dict[str, Any]) -> bool:
120
- """
121
- Update state data for a call
122
-
123
- Args:
124
- call_id: Unique identifier for the call
125
- data: Dictionary of state data to update (merged with existing)
126
-
127
- Returns:
128
- True if successful, False otherwise
129
- """
130
- file_path = self._get_file_path(call_id)
131
- if not os.path.exists(file_path):
132
- # If no existing data, just store new data
133
- return self.store(call_id, data)
134
-
135
- try:
136
- # Read existing data
137
- with open(file_path, "r") as f:
138
- state_data = json.load(f)
139
-
140
- # Update the data (deep merge)
141
- existing_data = state_data["data"]
142
- self._deep_update(existing_data, data)
143
-
144
- # Update metadata
145
- state_data["last_updated"] = datetime.now().isoformat()
146
- state_data["data"] = existing_data
147
-
148
- # Write back to file
149
- with open(file_path, "w") as f:
150
- json.dump(state_data, f, indent=2)
151
-
152
- return True
153
- except Exception as e:
154
- print(f"Error updating state for call {call_id}: {e}")
155
- return False
156
-
157
- def delete(self, call_id: str) -> bool:
158
- """
159
- Delete state data for a call
160
-
161
- Args:
162
- call_id: Unique identifier for the call
163
-
164
- Returns:
165
- True if successful, False otherwise
166
- """
167
- file_path = self._get_file_path(call_id)
168
- if not os.path.exists(file_path):
169
- return False
170
-
171
- try:
172
- os.remove(file_path)
173
- return True
174
- except Exception as e:
175
- print(f"Error deleting state for call {call_id}: {e}")
176
- return False
177
-
178
- def cleanup_expired(self) -> int:
179
- """
180
- Clean up expired state files
181
-
182
- Returns:
183
- Number of expired files cleaned up
184
- """
185
- count = 0
186
- try:
187
- # Get all state files
188
- for filename in os.listdir(self.storage_dir):
189
- if not filename.endswith(".json"):
190
- continue
191
-
192
- file_path = os.path.join(self.storage_dir, filename)
193
-
194
- try:
195
- # Read the file to check creation time
196
- with open(file_path, "r") as f:
197
- state_data = json.load(f)
198
-
199
- # Check if the file is expired
200
- created_at = datetime.fromisoformat(state_data["created_at"])
201
- if (datetime.now() - created_at) > timedelta(days=self.expiry_days):
202
- os.remove(file_path)
203
- count += 1
204
- except Exception:
205
- # Skip files that can't be processed
206
- continue
207
-
208
- return count
209
- except Exception as e:
210
- print(f"Error cleaning up expired state files: {e}")
211
- return count
212
-
213
- def _deep_update(self, d: Dict, u: Dict) -> None:
214
- """Recursively update a nested dictionary"""
215
- for k, v in u.items():
216
- if isinstance(v, dict) and k in d and isinstance(d[k], dict):
217
- self._deep_update(d[k], v)
218
- else:
219
- d[k] = v
@@ -1,101 +0,0 @@
1
- """
2
- Copyright (c) 2025 SignalWire
3
-
4
- This file is part of the SignalWire AI Agents SDK.
5
-
6
- Licensed under the MIT License.
7
- See LICENSE file in the project root for full license information.
8
- """
9
-
10
- """
11
- Abstract base class for state management
12
- """
13
-
14
- from abc import ABC, abstractmethod
15
- from typing import Dict, Any, Optional
16
-
17
-
18
- class StateManager(ABC):
19
- """
20
- Abstract base class for state management
21
-
22
- This defines the interface that all state manager implementations
23
- must follow. State managers are responsible for storing, retrieving,
24
- and managing call-specific state data.
25
- """
26
-
27
- @abstractmethod
28
- def store(self, call_id: str, data: Dict[str, Any]) -> bool:
29
- """
30
- Store state data for a call
31
-
32
- Args:
33
- call_id: Unique identifier for the call
34
- data: Dictionary of state data to store
35
-
36
- Returns:
37
- True if successful, False otherwise
38
- """
39
- pass
40
-
41
- @abstractmethod
42
- def retrieve(self, call_id: str) -> Optional[Dict[str, Any]]:
43
- """
44
- Retrieve state data for a call
45
-
46
- Args:
47
- call_id: Unique identifier for the call
48
-
49
- Returns:
50
- Dictionary of state data or None if not found
51
- """
52
- pass
53
-
54
- @abstractmethod
55
- def update(self, call_id: str, data: Dict[str, Any]) -> bool:
56
- """
57
- Update state data for a call
58
-
59
- Args:
60
- call_id: Unique identifier for the call
61
- data: Dictionary of state data to update (merged with existing)
62
-
63
- Returns:
64
- True if successful, False otherwise
65
- """
66
- pass
67
-
68
- @abstractmethod
69
- def delete(self, call_id: str) -> bool:
70
- """
71
- Delete state data for a call
72
-
73
- Args:
74
- call_id: Unique identifier for the call
75
-
76
- Returns:
77
- True if successful, False otherwise
78
- """
79
- pass
80
-
81
- @abstractmethod
82
- def cleanup_expired(self) -> int:
83
- """
84
- Clean up expired state data
85
-
86
- Returns:
87
- Number of expired items cleaned up
88
- """
89
- pass
90
-
91
- def exists(self, call_id: str) -> bool:
92
- """
93
- Check if state exists for a call
94
-
95
- Args:
96
- call_id: Unique identifier for the call
97
-
98
- Returns:
99
- True if state exists, False otherwise
100
- """
101
- return self.retrieve(call_id) is not None
@@ -1,9 +0,0 @@
1
- """
2
- Wikipedia Search Skill
3
-
4
- This skill provides Wikipedia search capabilities using the Wikipedia API.
5
- """
6
-
7
- from .skill import WikipediaSearchSkill
8
-
9
- __all__ = ['WikipediaSearchSkill']