signalwire-agents 0.1.13__py3-none-any.whl → 1.0.17.dev4__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 (143) hide show
  1. signalwire_agents/__init__.py +99 -15
  2. signalwire_agents/agent_server.py +248 -60
  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/dokku.py +2320 -0
  13. signalwire_agents/cli/execution/__init__.py +10 -0
  14. signalwire_agents/cli/execution/datamap_exec.py +446 -0
  15. signalwire_agents/cli/execution/webhook_exec.py +134 -0
  16. signalwire_agents/cli/init_project.py +2636 -0
  17. signalwire_agents/cli/output/__init__.py +10 -0
  18. signalwire_agents/cli/output/output_formatter.py +255 -0
  19. signalwire_agents/cli/output/swml_dump.py +186 -0
  20. signalwire_agents/cli/simulation/__init__.py +10 -0
  21. signalwire_agents/cli/simulation/data_generation.py +374 -0
  22. signalwire_agents/cli/simulation/data_overrides.py +200 -0
  23. signalwire_agents/cli/simulation/mock_env.py +282 -0
  24. signalwire_agents/cli/swaig_test_wrapper.py +52 -0
  25. signalwire_agents/cli/test_swaig.py +566 -2366
  26. signalwire_agents/cli/types.py +81 -0
  27. signalwire_agents/core/__init__.py +2 -2
  28. signalwire_agents/core/agent/__init__.py +12 -0
  29. signalwire_agents/core/agent/config/__init__.py +12 -0
  30. signalwire_agents/core/agent/deployment/__init__.py +9 -0
  31. signalwire_agents/core/agent/deployment/handlers/__init__.py +9 -0
  32. signalwire_agents/core/agent/prompt/__init__.py +14 -0
  33. signalwire_agents/core/agent/prompt/manager.py +306 -0
  34. signalwire_agents/core/agent/routing/__init__.py +9 -0
  35. signalwire_agents/core/agent/security/__init__.py +9 -0
  36. signalwire_agents/core/agent/swml/__init__.py +9 -0
  37. signalwire_agents/core/agent/tools/__init__.py +15 -0
  38. signalwire_agents/core/agent/tools/decorator.py +97 -0
  39. signalwire_agents/core/agent/tools/registry.py +210 -0
  40. signalwire_agents/core/agent_base.py +845 -2916
  41. signalwire_agents/core/auth_handler.py +233 -0
  42. signalwire_agents/core/config_loader.py +259 -0
  43. signalwire_agents/core/contexts.py +418 -0
  44. signalwire_agents/core/data_map.py +3 -15
  45. signalwire_agents/core/function_result.py +116 -44
  46. signalwire_agents/core/logging_config.py +162 -18
  47. signalwire_agents/core/mixins/__init__.py +28 -0
  48. signalwire_agents/core/mixins/ai_config_mixin.py +442 -0
  49. signalwire_agents/core/mixins/auth_mixin.py +280 -0
  50. signalwire_agents/core/mixins/prompt_mixin.py +358 -0
  51. signalwire_agents/core/mixins/serverless_mixin.py +460 -0
  52. signalwire_agents/core/mixins/skill_mixin.py +55 -0
  53. signalwire_agents/core/mixins/state_mixin.py +153 -0
  54. signalwire_agents/core/mixins/tool_mixin.py +230 -0
  55. signalwire_agents/core/mixins/web_mixin.py +1142 -0
  56. signalwire_agents/core/security_config.py +333 -0
  57. signalwire_agents/core/skill_base.py +84 -1
  58. signalwire_agents/core/skill_manager.py +62 -20
  59. signalwire_agents/core/swaig_function.py +18 -5
  60. signalwire_agents/core/swml_builder.py +207 -11
  61. signalwire_agents/core/swml_handler.py +27 -21
  62. signalwire_agents/core/swml_renderer.py +123 -312
  63. signalwire_agents/core/swml_service.py +171 -203
  64. signalwire_agents/mcp_gateway/__init__.py +29 -0
  65. signalwire_agents/mcp_gateway/gateway_service.py +564 -0
  66. signalwire_agents/mcp_gateway/mcp_manager.py +513 -0
  67. signalwire_agents/mcp_gateway/session_manager.py +218 -0
  68. signalwire_agents/prefabs/concierge.py +0 -3
  69. signalwire_agents/prefabs/faq_bot.py +0 -3
  70. signalwire_agents/prefabs/info_gatherer.py +0 -3
  71. signalwire_agents/prefabs/receptionist.py +0 -3
  72. signalwire_agents/prefabs/survey.py +0 -3
  73. signalwire_agents/schema.json +9218 -5489
  74. signalwire_agents/search/__init__.py +7 -1
  75. signalwire_agents/search/document_processor.py +490 -31
  76. signalwire_agents/search/index_builder.py +307 -37
  77. signalwire_agents/search/migration.py +418 -0
  78. signalwire_agents/search/models.py +30 -0
  79. signalwire_agents/search/pgvector_backend.py +748 -0
  80. signalwire_agents/search/query_processor.py +162 -31
  81. signalwire_agents/search/search_engine.py +916 -35
  82. signalwire_agents/search/search_service.py +376 -53
  83. signalwire_agents/skills/README.md +452 -0
  84. signalwire_agents/skills/__init__.py +14 -2
  85. signalwire_agents/skills/api_ninjas_trivia/README.md +215 -0
  86. signalwire_agents/skills/api_ninjas_trivia/__init__.py +12 -0
  87. signalwire_agents/skills/api_ninjas_trivia/skill.py +237 -0
  88. signalwire_agents/skills/datasphere/README.md +210 -0
  89. signalwire_agents/skills/datasphere/skill.py +84 -3
  90. signalwire_agents/skills/datasphere_serverless/README.md +258 -0
  91. signalwire_agents/skills/datasphere_serverless/__init__.py +9 -0
  92. signalwire_agents/skills/datasphere_serverless/skill.py +82 -1
  93. signalwire_agents/skills/datetime/README.md +132 -0
  94. signalwire_agents/skills/datetime/__init__.py +9 -0
  95. signalwire_agents/skills/datetime/skill.py +20 -7
  96. signalwire_agents/skills/joke/README.md +149 -0
  97. signalwire_agents/skills/joke/__init__.py +9 -0
  98. signalwire_agents/skills/joke/skill.py +21 -0
  99. signalwire_agents/skills/math/README.md +161 -0
  100. signalwire_agents/skills/math/__init__.py +9 -0
  101. signalwire_agents/skills/math/skill.py +18 -4
  102. signalwire_agents/skills/mcp_gateway/README.md +230 -0
  103. signalwire_agents/skills/mcp_gateway/__init__.py +10 -0
  104. signalwire_agents/skills/mcp_gateway/skill.py +421 -0
  105. signalwire_agents/skills/native_vector_search/README.md +210 -0
  106. signalwire_agents/skills/native_vector_search/__init__.py +9 -0
  107. signalwire_agents/skills/native_vector_search/skill.py +569 -101
  108. signalwire_agents/skills/play_background_file/README.md +218 -0
  109. signalwire_agents/skills/play_background_file/__init__.py +12 -0
  110. signalwire_agents/skills/play_background_file/skill.py +242 -0
  111. signalwire_agents/skills/registry.py +395 -40
  112. signalwire_agents/skills/spider/README.md +236 -0
  113. signalwire_agents/skills/spider/__init__.py +13 -0
  114. signalwire_agents/skills/spider/skill.py +598 -0
  115. signalwire_agents/skills/swml_transfer/README.md +395 -0
  116. signalwire_agents/skills/swml_transfer/__init__.py +10 -0
  117. signalwire_agents/skills/swml_transfer/skill.py +359 -0
  118. signalwire_agents/skills/weather_api/README.md +178 -0
  119. signalwire_agents/skills/weather_api/__init__.py +12 -0
  120. signalwire_agents/skills/weather_api/skill.py +191 -0
  121. signalwire_agents/skills/web_search/README.md +163 -0
  122. signalwire_agents/skills/web_search/__init__.py +9 -0
  123. signalwire_agents/skills/web_search/skill.py +586 -112
  124. signalwire_agents/skills/wikipedia_search/README.md +228 -0
  125. signalwire_agents/{core/state → skills/wikipedia_search}/__init__.py +5 -4
  126. signalwire_agents/skills/{wikipedia → wikipedia_search}/skill.py +33 -3
  127. signalwire_agents/web/__init__.py +17 -0
  128. signalwire_agents/web/web_service.py +559 -0
  129. signalwire_agents-1.0.17.dev4.data/data/share/man/man1/sw-agent-init.1 +400 -0
  130. signalwire_agents-1.0.17.dev4.data/data/share/man/man1/sw-search.1 +483 -0
  131. signalwire_agents-1.0.17.dev4.data/data/share/man/man1/swaig-test.1 +308 -0
  132. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.17.dev4.dist-info}/METADATA +347 -215
  133. signalwire_agents-1.0.17.dev4.dist-info/RECORD +147 -0
  134. signalwire_agents-1.0.17.dev4.dist-info/entry_points.txt +6 -0
  135. signalwire_agents/core/state/file_state_manager.py +0 -219
  136. signalwire_agents/core/state/state_manager.py +0 -101
  137. signalwire_agents/skills/wikipedia/__init__.py +0 -9
  138. signalwire_agents-0.1.13.data/data/schema.json +0 -5611
  139. signalwire_agents-0.1.13.dist-info/RECORD +0 -67
  140. signalwire_agents-0.1.13.dist-info/entry_points.txt +0 -3
  141. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.17.dev4.dist-info}/WHEEL +0 -0
  142. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.17.dev4.dist-info}/licenses/LICENSE +0 -0
  143. {signalwire_agents-0.1.13.dist-info → signalwire_agents-1.0.17.dev4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,147 @@
1
+ signalwire_agents/__init__.py,sha256=DYvpwmWb5SgEYdvPhRykJUF0J_AJQUOS7ExFWD0nfrg,5036
2
+ signalwire_agents/agent_server.py,sha256=2zJFNOOEpEOXn5J5Diz1NpL1JFEUA2_6qbV0PPK_Vhc,32352
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/dokku.py,sha256=WuyqErWPZ-Wyqfxlzb3DyPhkyrSropUYzHtTuqzjGiM,80255
9
+ signalwire_agents/cli/init_project.py,sha256=nNBPni3x1xzdJ5pAZsQRUYK1t1e64NzwUUkq-Uc3mzo,78835
10
+ signalwire_agents/cli/swaig_test_wrapper.py,sha256=t63HQpEc1Up5AcysEHP1OsEQcgSMKH-9H1L2IhFso18,1533
11
+ signalwire_agents/cli/test_swaig.py,sha256=-v-XjTUWZNxmMJuOF5_cB1Jz8x8emJoqgqS_8jLeT4Y,31487
12
+ signalwire_agents/cli/types.py,sha256=U8Abc4Atb5-wMbhM3MjcuIXsbONLOu1ucePWOCgqdco,1810
13
+ signalwire_agents/cli/core/__init__.py,sha256=YX37KLHd3LEjeiv4aVXeWnjFWxbW3Z4mJ0Yw7bdVv0A,229
14
+ signalwire_agents/cli/core/agent_loader.py,sha256=foX4sYv-ULpxTAJ1n4lRLtsey_UShYy4L3gHfcy5RDs,20051
15
+ signalwire_agents/cli/core/argparse_helpers.py,sha256=5Zr8s_NH-HZ3ecN_lZUHcuEjgh1sBstmo9HVje1Q0E4,7017
16
+ signalwire_agents/cli/core/dynamic_config.py,sha256=FuB0slymgoDfzcKWXPy_Dy9qprSTn0e1ou7A0Vgwie8,2686
17
+ signalwire_agents/cli/core/service_loader.py,sha256=dwZ8IjCeaXw_sqaAO6rdEWpVZ90_Cs5dRnM04VqIqXo,9984
18
+ signalwire_agents/cli/execution/__init__.py,sha256=GS9EkXJhhFQjn7NSmxM5JX1Iy7pm6U6rW2BZCk3bxas,223
19
+ signalwire_agents/cli/execution/datamap_exec.py,sha256=UNQ8gn1KW72YDjegY8SzeZWebZiD-DO6dRLkxia438k,20389
20
+ signalwire_agents/cli/execution/webhook_exec.py,sha256=m4gIX-MaTG8JngI57qyeWGYDQJwkbJANpvkBwJeJ_7o,4710
21
+ signalwire_agents/cli/output/__init__.py,sha256=aGBWE-xXbqsFi-cyD5MCs8v3chxirSxdDyDZTUWYJO4,234
22
+ signalwire_agents/cli/output/output_formatter.py,sha256=-RpT9TY7YT1DYBg75Ngf5j42hA6QM_lPAzwhFCiZYNE,12685
23
+ signalwire_agents/cli/output/swml_dump.py,sha256=NP9MCFjZr4BOt3xUNlW8N9Bw8ZGAGAudYlaiUIrwRso,6606
24
+ signalwire_agents/cli/simulation/__init__.py,sha256=YtfbBKujx8SjZqaOtMdgle8FvxzKeD8_pRzeD25ylsU,236
25
+ signalwire_agents/cli/simulation/data_generation.py,sha256=pxa9aJ6XkI0O8yAIGvBTUU3eBVkJizNx9xW8mHEosTI,11918
26
+ signalwire_agents/cli/simulation/data_overrides.py,sha256=3_3pT6j-q2gRufPX2bZ1BrmY7u1IdloLooKAJil33vI,6319
27
+ signalwire_agents/cli/simulation/mock_env.py,sha256=fvaR_xdLMm8AbpNUbTJOFG9THcti3Zds-0QNDbKMaYk,10249
28
+ signalwire_agents/core/__init__.py,sha256=xjPq8DmUnWYUG28sd17n430VWPmMH9oZ9W14gYwG96g,806
29
+ signalwire_agents/core/agent_base.py,sha256=zZRykB8VD277_5_NZbYP7ZcpeqTdQ4yWlpNnLXOljEY,58883
30
+ signalwire_agents/core/auth_handler.py,sha256=jXrof9WZ1W9qqlQT9WElcmSRafL2kG7207x5SqWN9MU,8481
31
+ signalwire_agents/core/config_loader.py,sha256=rStVRRUaeMGrMc44ocr0diMQQARZhbKqwMqQ6kqUNos,8722
32
+ signalwire_agents/core/contexts.py,sha256=g9FgOGMfGCUWlm57YZcv7CvOf-Ub9FdKZIOMu14ADfE,24428
33
+ signalwire_agents/core/data_map.py,sha256=0qp3VcrRS0RtZPApoAaGgM-udLBb1ysnyMJuWd6sSew,17134
34
+ signalwire_agents/core/function_result.py,sha256=4CcbxwstlSRUQtbCty2evewvNZP35dWUJunzz2YeYNI,48108
35
+ signalwire_agents/core/logging_config.py,sha256=x4d_RAjBjVpJOFA2vXnPP2dNr13BZHz091J5rGpC77Y,13142
36
+ signalwire_agents/core/pom_builder.py,sha256=ywuiIfP8BeLBPo_G4X1teZlG6zTCMkW71CZnmyoDTAQ,6636
37
+ signalwire_agents/core/security_config.py,sha256=iAnAzKEJQiXL6mMpDaYm3Sjkxwm4x2N9HD6DeWSI8yI,12536
38
+ signalwire_agents/core/skill_base.py,sha256=kCgzvlA9uu3CblLAigYuM-0LL-n0xEEoXV-JmNn-Beo,7795
39
+ signalwire_agents/core/skill_manager.py,sha256=D4erpz0tmSYLqyfeteNNIY0VRWDtX0rDw3n7Z_f0W5U,10493
40
+ signalwire_agents/core/swaig_function.py,sha256=KnUQ2g99kDSzOzD1PJ0Iqs8DeeZ6jDIIN54C5MA4TWw,7521
41
+ signalwire_agents/core/swml_builder.py,sha256=tJBFDAVTENEfjGLp2h9_AKOYt5O9FrSYLI-nZZVwM1E,15604
42
+ signalwire_agents/core/swml_handler.py,sha256=hFDq41dQWL3EdFbq6h0hizE1dIqdVeiTeCrujbZsPzo,8397
43
+ signalwire_agents/core/swml_renderer.py,sha256=-WAB_5ss836a8nBo5zlb6SaQKFNF4XIo1odWIXM4eE8,6860
44
+ signalwire_agents/core/swml_service.py,sha256=TCsn3g_kAxz1DfSiPygpBv6KTd6EEDaWplFVqZZnZw8,49995
45
+ signalwire_agents/core/agent/__init__.py,sha256=qccTmLD9b24tZDAoIPEY6vJ2p1R_ArZ_ZCKbBlKvPQ8,239
46
+ signalwire_agents/core/agent/config/__init__.py,sha256=5XvTfnYeeGdoLr4tJjbe1OhF26nOcR5VTDIhtMGCu3I,244
47
+ signalwire_agents/core/agent/deployment/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
48
+ signalwire_agents/core/agent/deployment/handlers/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
49
+ signalwire_agents/core/agent/prompt/__init__.py,sha256=4pKL3P7q9uAEtbwOKSJ_supaDn8LZl2uKXuWM72f_Pg,288
50
+ signalwire_agents/core/agent/prompt/manager.py,sha256=0jNTufykxuz8O2w-gsHeTxWH-f36suawWjNF5JYZ_X0,10074
51
+ signalwire_agents/core/agent/routing/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
52
+ signalwire_agents/core/agent/security/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
53
+ signalwire_agents/core/agent/swml/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
54
+ signalwire_agents/core/agent/tools/__init__.py,sha256=eOcmyeGm6qogT3wsBx7QvdjmTbc1p5hnPR6uIlvTLxI,339
55
+ signalwire_agents/core/agent/tools/decorator.py,sha256=pC6j1114GwVBd2U3h23I9gKLtu8AgeiuWV0lUzz682U,2961
56
+ signalwire_agents/core/agent/tools/registry.py,sha256=HScbKKwpJqFZ_odmeFklSQ0p0EMasEyKSxNwX568OPo,8054
57
+ signalwire_agents/core/mixins/__init__.py,sha256=NsFpfF7TDP_lNR0Riw4Nbvt4fDbv_A3OoVbBqRrtXQM,652
58
+ signalwire_agents/core/mixins/ai_config_mixin.py,sha256=In7SrVlKoRaGsDIXEDNGsrEqCjotmcQr_XA563VWABQ,16265
59
+ signalwire_agents/core/mixins/auth_mixin.py,sha256=FIzQjLOkEgQhy6uIKjnevsM3ubdMnY5gDDksslEUtF8,9729
60
+ signalwire_agents/core/mixins/prompt_mixin.py,sha256=bEsuw9J2F_upFYI02KyC7o2eGZjwOKQ352rmJBZirAM,13729
61
+ signalwire_agents/core/mixins/serverless_mixin.py,sha256=XP_dFGO1aa4_Ouq9YLRhQ_MmjNTv-qsAXKHyf90ETMQ,20599
62
+ signalwire_agents/core/mixins/skill_mixin.py,sha256=Qz3RKPmq_iMY4NecyxOHk3dW3W-O4iEm2ahhMjAcqRs,1861
63
+ signalwire_agents/core/mixins/state_mixin.py,sha256=q3achpyUYZKuJaqKf12O22FXpSsNNsMEonSvlpSHCkA,6594
64
+ signalwire_agents/core/mixins/tool_mixin.py,sha256=6CaNdaspHcfte0qSB_bSN8PTsqxRZzL_AXYk8QoWyXE,8660
65
+ signalwire_agents/core/mixins/web_mixin.py,sha256=Yknov_Rd2k7R0DO9JRsrbsv5l_ztkAjBy5MBPMjmNYU,51057
66
+ signalwire_agents/core/security/__init__.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
67
+ signalwire_agents/core/security/session_manager.py,sha256=s5hXYcFnrsYFoyo-zcN7EJy-wInZQI_cWTBHX9MxHR4,9164
68
+ signalwire_agents/mcp_gateway/__init__.py,sha256=uZhyt0cBa9Wk_OPr_Ewphh6apsaf_5O9G48NVkm_00I,619
69
+ signalwire_agents/mcp_gateway/gateway_service.py,sha256=hytoEhiXSyZxk_LxV-zo0mfCCAJf-y2Gs5gJ__iIRB0,23081
70
+ signalwire_agents/mcp_gateway/mcp_manager.py,sha256=DaR49BX5b6hn2mXJygS3idNEr3IDImWGNdsrQSYxiEE,19669
71
+ signalwire_agents/mcp_gateway/session_manager.py,sha256=sGMPT8aSzS2RRR_ewkd0nxwYI-LK5CaWrendGhXAW9c,8505
72
+ signalwire_agents/prefabs/__init__.py,sha256=MW11J63XH7KxF2MWguRsMFM9iqMWexaEO9ynDPL_PDM,715
73
+ signalwire_agents/prefabs/concierge.py,sha256=XB-Ziy0tteYI5NHu7Sinx-N960nzkhq2m4v8Ei8UHas,9921
74
+ signalwire_agents/prefabs/faq_bot.py,sha256=cUuHhnDB8S4aVg-DiQe4jBmCAPrYQrND_Mff9iaeEa0,10572
75
+ signalwire_agents/prefabs/info_gatherer.py,sha256=0LpYTaU7C76Efp3yUIdNX6xzWH7mj5pBYewilpkCL5g,15189
76
+ signalwire_agents/prefabs/receptionist.py,sha256=em0uk_F0tmePvzE6Hi9HFlL3MHChH0RaHHqSvww9pK0,10323
77
+ signalwire_agents/prefabs/survey.py,sha256=a-0-xAnQYhdX4Lzgyna14lpNfaCV-rLUFkQF6QOCQAY,14534
78
+ signalwire_agents/search/__init__.py,sha256=cb8Rtg4Jut9ZhuSbiaHl79G0iWgMhJkLu84urkY0lRc,4215
79
+ signalwire_agents/search/document_processor.py,sha256=emlmYAgr34Qyhfqm4VppqTCpm1cj8Db6ziHoFuw4ekE,51929
80
+ signalwire_agents/search/index_builder.py,sha256=v1LGhbzzKlCilO4g6nqQJVYEAWvInP2j5B1QrAEj4V8,33772
81
+ signalwire_agents/search/migration.py,sha256=UZPrpUOMZeLVNO1cEDp3tnZYG6ys8-VCFlZXmzig_E0,16582
82
+ signalwire_agents/search/models.py,sha256=isYOYwQT0eWCVdcYSSd8w6z2gFYUobtC8BAUhV7FUVI,840
83
+ signalwire_agents/search/pgvector_backend.py,sha256=bFxdAtBWEBPLlbQYrcSvyUqcyJn8Y_22GJNknkGTGP0,28717
84
+ signalwire_agents/search/query_processor.py,sha256=34MXOWyEKKMgSCNNM5X2SRyWwF8CPJeorgNjFn661zs,19587
85
+ signalwire_agents/search/search_engine.py,sha256=kDIIBuxSMAoedMS0mnxvPCZOx59fx4mJwxhVRpB6BNU,57461
86
+ signalwire_agents/search/search_service.py,sha256=FYjX95TD0Cr6jakYU4A1GIdBkj72euq2fM3zaBe2b9U,22379
87
+ signalwire_agents/skills/README.md,sha256=sM1_08IsKdRDCzYHPLzppJbaK5MvRelsVL6Kd9A9Ubo,12193
88
+ signalwire_agents/skills/__init__.py,sha256=JrFQR7IaLtT3BXFURP_a1ZySPhv7FfPWM60xpLMnLqc,638
89
+ signalwire_agents/skills/registry.py,sha256=zURdeAaccZyUSwLRl8K4ILXICMV3ouYQIA4rUBq6b5E,20792
90
+ signalwire_agents/skills/api_ninjas_trivia/README.md,sha256=SoyS7VFh3eVIiVnQ5gfTfs0a_gAlLwnmT2W2FrbNU0A,6762
91
+ signalwire_agents/skills/api_ninjas_trivia/__init__.py,sha256=zN305bBQkzlJyUNsPUMPt3gDJbvc-Iigkdh0rBou_RE,267
92
+ signalwire_agents/skills/api_ninjas_trivia/skill.py,sha256=ajJm0Vd07Oz3h0sHP0rRyckAXAbFRtcP7ws9GiAhfjw,8626
93
+ signalwire_agents/skills/datasphere/README.md,sha256=7G5t0V04SlnJ39U-3zOoIOfkNFrVEo-s45lCUlYmJGo,7351
94
+ signalwire_agents/skills/datasphere/__init__.py,sha256=SJJlmeMSeezjINPgkuWN1XzDPN_Z3GzZ_StzO1BtxQs,257
95
+ signalwire_agents/skills/datasphere/skill.py,sha256=OcDgmFSvIA3qy6a24E_fIgXrPKGRnLRHtPh9JeJ5YOY,12643
96
+ signalwire_agents/skills/datasphere_serverless/README.md,sha256=FErV97NEdYD_N1wZxkLqy6DSml5B9mCJmEgCUdGxh6A,9299
97
+ signalwire_agents/skills/datasphere_serverless/__init__.py,sha256=jpMNDcGiXsVbSCVUrc_AwLARqEtVu4dPYZPJSJ-K3rc,261
98
+ signalwire_agents/skills/datasphere_serverless/skill.py,sha256=i57VkMo2gU5YE9Z2lIxFfZtYkvkwMpnek49eSSfMFS0,9882
99
+ signalwire_agents/skills/datetime/README.md,sha256=95SzVz-Pcm9MPqZ4D3sSYKMwdpsDNwwCpWFRK027-Pc,4534
100
+ signalwire_agents/skills/datetime/__init__.py,sha256=Irajm2sUhmQVFgais-J-q-3d58tNnJ4nbLmnphr90nI,234
101
+ signalwire_agents/skills/datetime/skill.py,sha256=-MnycSmhK2JWwuHAStxz0mHNuMIvvWCW-I9La44WDts,4292
102
+ signalwire_agents/skills/joke/README.md,sha256=xUa2_0Pk9neli-UJxI4BPt3Fb1_5Xa3m8RuDlrkfBao,3594
103
+ signalwire_agents/skills/joke/__init__.py,sha256=8Rc5_nj30bdga2n9H9JSI2WzMn40pjApd-y-tk5WIkI,244
104
+ signalwire_agents/skills/joke/skill.py,sha256=BKPA50iht8I_mVBJ-PIQHjJJz1m0V2w5J69AfVMx23o,4092
105
+ signalwire_agents/skills/math/README.md,sha256=Nrv7PxkFPSxdnAN6856Fp1CfvsUwdncpRFFDERxmMe0,5335
106
+ signalwire_agents/skills/math/__init__.py,sha256=F7emZqBpAAkqJZxA3RNTzRSAXE5e2xu8PtFOPHebfKo,230
107
+ signalwire_agents/skills/math/skill.py,sha256=pfwlljnN_UoT9rzkggzPrgGWuoZ_wnovrph-aLG4ULY,3761
108
+ signalwire_agents/skills/mcp_gateway/README.md,sha256=t-71TTWlEvjgWLTcT3v4kMw9zlrKXTAC_sCjb1haNew,5826
109
+ signalwire_agents/skills/mcp_gateway/__init__.py,sha256=zLgOa7s0sIQphTNJjvasIAW7llxAApez7moC_e1tzP0,236
110
+ signalwire_agents/skills/mcp_gateway/skill.py,sha256=bOdfBFsboRWSVoRA5X9vcmkH9OJIQxUllhMzhqHV1XI,17155
111
+ signalwire_agents/skills/native_vector_search/README.md,sha256=eFVRoDwZlZwbBXUKyKrvfC6AL4T8MXj0B-IgIdBZF70,5526
112
+ signalwire_agents/skills/native_vector_search/__init__.py,sha256=RofpN3Sd-vyWeUCTYH2dRVrl7h6YuyG5OK772UQ-KFk,220
113
+ signalwire_agents/skills/native_vector_search/skill.py,sha256=8f9pO0wKRii8WO-YSsOa20pmTzio7iSyT9IxHTQ5u3w,37906
114
+ signalwire_agents/skills/play_background_file/README.md,sha256=omJ_jY5Co6Mk-gJt_hoSl40wemmTbzae3DBll6HL0B4,7026
115
+ signalwire_agents/skills/play_background_file/__init__.py,sha256=iETc6e-0Cai3RUTQWhg9BieWi3NF3_DWWBKdYXcd4ok,273
116
+ signalwire_agents/skills/play_background_file/skill.py,sha256=HgPc2FIvXKJHZ7gO2QEzQe6-uUBPrw_6sRJJpU83GTY,8822
117
+ signalwire_agents/skills/spider/README.md,sha256=yBa09JzgLikG3STbDNbRCKUM3l3XU5-D923I2g8CTVc,6909
118
+ signalwire_agents/skills/spider/__init__.py,sha256=bZcCGLX5Cz18qY8rOvAAync6BRtketxaU19l6YcA_iI,285
119
+ signalwire_agents/skills/spider/skill.py,sha256=_gdw_fJO8wZhs1yx-JGdY8Tf-605NjOG-KH44-Js9Cc,23020
120
+ signalwire_agents/skills/swml_transfer/README.md,sha256=2Y6CH5Bm9kI5IYCLczIQIYlaYUq6VX_S4Irct2CQMmQ,14681
121
+ signalwire_agents/skills/swml_transfer/__init__.py,sha256=YyfxRpbgT4ZpEjGolwffKqjUzX4VqDNLdqfSoA0D0IY,238
122
+ signalwire_agents/skills/swml_transfer/skill.py,sha256=_qzJRd9P5VN8flTDe9N-9cvsLU0sN7XuY5yjk-DNlv8,15363
123
+ signalwire_agents/skills/weather_api/README.md,sha256=buzCtrhxXAxZ8k7Qt_lR62E_tqnpXmXRsTarb_F43zg,6439
124
+ signalwire_agents/skills/weather_api/__init__.py,sha256=WCS--GFBX8straIZPuGAmTDZ7t-y7VI6ioB1Kf8eeP4,257
125
+ signalwire_agents/skills/weather_api/skill.py,sha256=LNJItYzgRSZYNYcH7Z37BOjjPy3aaM0OjMRnAxiUhOI,7204
126
+ signalwire_agents/skills/web_search/README.md,sha256=Y95cxEScMzhmslUJF8u_Nh15FbEBuus4P-E8_kk2an0,5438
127
+ signalwire_agents/skills/web_search/__init__.py,sha256=kv4CzmF1lldRZcL_HivieslP7gtTFvxcfprKG4n6b-Q,236
128
+ signalwire_agents/skills/web_search/skill.py,sha256=kJHMenjSnEdSuAbS1yu4KrX8YVCoGJvNltn8v1noYek,30810
129
+ signalwire_agents/skills/wikipedia_search/README.md,sha256=KFIQ8XhqrTG8NRs72dIbjJacy2DlYEXLtxgy23gyRi4,7585
130
+ signalwire_agents/skills/wikipedia_search/__init__.py,sha256=yJ6iYTSyJC96mwwUsI_FneFhDBcLYD4xEerBKlWLTb8,375
131
+ signalwire_agents/skills/wikipedia_search/skill.py,sha256=peNxT3GHMJY5OFQ-weneO83NpSstGjcmrTN_ENzUsEo,7910
132
+ signalwire_agents/utils/__init__.py,sha256=1KVsHzwgfktSXHe3vqSRGImjtIE58szwD2FHHoFBtvY,601
133
+ signalwire_agents/utils/pom_utils.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
134
+ signalwire_agents/utils/schema_utils.py,sha256=i4okv_O9bUApwT_jJf4Yoij3bLCrGrW3DC-vzSy2RuY,16392
135
+ signalwire_agents/utils/token_generators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
136
+ signalwire_agents/utils/validators.py,sha256=4Mr7baQ_xR_hfJ72YxQRAT_GFa663YjFX_PumJ35Xds,191
137
+ signalwire_agents/web/__init__.py,sha256=XE_pSTY9Aalzr7J7wqFth1Zr3cccQHPPcF5HWNrOpz8,383
138
+ signalwire_agents/web/web_service.py,sha256=a2PSHJgX1tlZr0Iz1A1UouZjXEePJAZL632evvLVM38,21071
139
+ signalwire_agents-1.0.17.dev4.data/data/share/man/man1/sw-agent-init.1,sha256=J4k5Oi74BnWCPCvsaw00vuyyqDPuIECjJIPu5OynvJc,8381
140
+ signalwire_agents-1.0.17.dev4.data/data/share/man/man1/sw-search.1,sha256=9jJ6V6t6DgmXByz8Lw9exjf683Cw3sJGro8-eB0M9EY,10413
141
+ signalwire_agents-1.0.17.dev4.data/data/share/man/man1/swaig-test.1,sha256=Ri0EITo8YMFowkcYltwPSwU4VJdRzo7XTWloi5WddCg,7815
142
+ signalwire_agents-1.0.17.dev4.dist-info/licenses/LICENSE,sha256=NYvAsB-rTcSvG9cqHt9EUHAWLiA9YzM4Qfz-mPdvDR0,1067
143
+ signalwire_agents-1.0.17.dev4.dist-info/METADATA,sha256=cUBLrL5nVgu8q1agp7cMq4bOuRIcfPjZaWoIMETqFF8,41745
144
+ signalwire_agents-1.0.17.dev4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
145
+ signalwire_agents-1.0.17.dev4.dist-info/entry_points.txt,sha256=fMiBH-GLeXGaWWn58Mcj7KM_m3SdomQMUQu-1LTqscw,315
146
+ signalwire_agents-1.0.17.dev4.dist-info/top_level.txt,sha256=kDGS6ZYv84K9P5Kyg9_S8P_pbUXoHkso0On_DB5bbWc,18
147
+ signalwire_agents-1.0.17.dev4.dist-info/RECORD,,
@@ -0,0 +1,6 @@
1
+ [console_scripts]
2
+ mcp-gateway = signalwire_agents.mcp_gateway.gateway_service:main
3
+ sw-agent-dokku = signalwire_agents.cli.dokku:main
4
+ sw-agent-init = signalwire_agents.cli.init_project:main
5
+ sw-search = signalwire_agents.cli.build_search:console_entry_point
6
+ 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']