langbot-plugin 0.3.2__tar.gz → 0.3.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/PKG-INFO +1 -1
  2. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/pyproject.toml +1 -1
  3. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/proxies/langbot_api.py +101 -8
  4. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/commands/runplugin.py +2 -6
  5. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/entities/io/actions/enums.py +6 -1
  6. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/app.py +3 -7
  7. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/handlers/plugin.py +22 -0
  8. langbot_plugin-0.3.4/src/langbot_plugin/utils/log.py +32 -0
  9. langbot_plugin-0.3.4/src/langbot_plugin/version.py +1 -0
  10. langbot_plugin-0.3.4/tests/test_log.py +29 -0
  11. langbot_plugin-0.3.2/src/langbot_plugin/version.py +0 -1
  12. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/.github/workflows/publish-pypi.yaml +0 -0
  13. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/.gitignore +0 -0
  14. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/.python-version +0 -0
  15. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/AGENTS.md +0 -0
  16. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/CLAUDE.md +0 -0
  17. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/LICENSE +0 -0
  18. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/README.md +0 -0
  19. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/data/.env.example +0 -0
  20. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/docs/Message.md +0 -0
  21. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/docs/communication/apis/lb2rt.md +0 -0
  22. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/docs/communication/runtime_plugin.md +0 -0
  23. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/docs/dependency-management.md +0 -0
  24. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/docs/langbot-plugin-social.png +0 -0
  25. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/__init__.py +0 -0
  26. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/__init__.py +0 -0
  27. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/__init__.py +0 -0
  28. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/abstract/__init__.py +0 -0
  29. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/abstract/platform/__init__.py +0 -0
  30. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/abstract/platform/adapter.py +0 -0
  31. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/abstract/platform/event_logger.py +0 -0
  32. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/__init__.py +0 -0
  33. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/base.py +0 -0
  34. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/command/__init__.py +0 -0
  35. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/command/command.py +0 -0
  36. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/common/__init__.py +0 -0
  37. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/common/event_listener.py +0 -0
  38. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/knowledge_engine/__init__.py +0 -0
  39. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/knowledge_engine/engine.py +0 -0
  40. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/manifest.py +0 -0
  41. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/parser/__init__.py +0 -0
  42. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/parser/parser.py +0 -0
  43. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/tool/__init__.py +0 -0
  44. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/components/tool/tool.py +0 -0
  45. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/definition/plugin.py +0 -0
  46. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/__init__.py +0 -0
  47. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/__init__.py +0 -0
  48. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/command/__init__.py +0 -0
  49. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/command/context.py +0 -0
  50. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/command/errors.py +0 -0
  51. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/pipeline/__init__.py +0 -0
  52. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/pipeline/query.py +0 -0
  53. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/platform/__init__.py +0 -0
  54. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/platform/entities.py +0 -0
  55. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/platform/events.py +0 -0
  56. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/platform/logger.py +0 -0
  57. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/platform/message.py +0 -0
  58. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/provider/__init__.py +0 -0
  59. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/provider/message.py +0 -0
  60. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/provider/prompt.py +0 -0
  61. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/provider/session.py +0 -0
  62. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/rag/__init__.py +0 -0
  63. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/rag/context.py +0 -0
  64. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/rag/enums.py +0 -0
  65. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/rag/errors.py +0 -0
  66. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/rag/models.py +0 -0
  67. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/resource/__init__.py +0 -0
  68. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/builtin/resource/tool.py +0 -0
  69. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/context.py +0 -0
  70. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/entities/events.py +0 -0
  71. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/proxies/__init__.py +0 -0
  72. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/proxies/base.py +0 -0
  73. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/proxies/event_context.py +0 -0
  74. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/proxies/execute_context.py +0 -0
  75. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/api/proxies/query_based_api.py +0 -0
  76. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/__init__.py +0 -0
  77. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/.env.example.example +0 -0
  78. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/.gitignore.example +0 -0
  79. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/.vscode/launch.json.example +0 -0
  80. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/README.md.example +0 -0
  81. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/__init__.py +0 -0
  82. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/assets/icon.svg.example +0 -0
  83. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/__init__.py +0 -0
  84. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/commands/__init__.py +0 -0
  85. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/commands/{cmd_name}.py.example +0 -0
  86. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/commands/{cmd_name}.yaml.example +0 -0
  87. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/event_listener/__init__.py +0 -0
  88. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/event_listener/default.py.example +0 -0
  89. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/event_listener/default.yaml.example +0 -0
  90. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/knowledge_engine/__init__.py +0 -0
  91. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/knowledge_engine/{knowledge_engine_name}.py.example +0 -0
  92. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/knowledge_engine/{knowledge_engine_name}.yaml.example +0 -0
  93. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/parser/__init__.py +0 -0
  94. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/parser/{parser_name}.py.example +0 -0
  95. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/parser/{parser_name}.yaml.example +0 -0
  96. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/tools/__init__.py +0 -0
  97. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/tools/{tool_name}.py.example +0 -0
  98. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/components/tools/{tool_name}.yaml.example +0 -0
  99. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/main.py.example +0 -0
  100. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/manifest.yaml.example +0 -0
  101. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/assets/templates/requirements.txt.example +0 -0
  102. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/__init__.py +0 -0
  103. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/__main__.py +0 -0
  104. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/commands/__init__.py +0 -0
  105. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/commands/buildplugin.py +0 -0
  106. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/commands/gencomponent.py +0 -0
  107. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/commands/initplugin.py +0 -0
  108. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/commands/login.py +0 -0
  109. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/commands/logout.py +0 -0
  110. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/commands/publish.py +0 -0
  111. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/gen/__init__.py +0 -0
  112. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/gen/renderer.py +0 -0
  113. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/i18n.py +0 -0
  114. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/locales/__init__.py +0 -0
  115. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/locales/en_US.py +0 -0
  116. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/locales/ja_JP.py +0 -0
  117. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/locales/zh_Hans.py +0 -0
  118. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/locales/zh_Hant.py +0 -0
  119. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/run/__init__.py +0 -0
  120. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/run/controller.py +0 -0
  121. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/run/handler.py +0 -0
  122. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/run/hotreload.py +0 -0
  123. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/utils/__init__.py +0 -0
  124. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/utils/cloudsv.py +0 -0
  125. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/cli/utils/form.py +0 -0
  126. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/entities/__init__.py +0 -0
  127. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/entities/io/__init__.py +0 -0
  128. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/entities/io/actions/__init__.py +0 -0
  129. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/entities/io/errors.py +0 -0
  130. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/entities/io/req.py +0 -0
  131. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/entities/io/resp.py +0 -0
  132. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/entities/marketplace.py +0 -0
  133. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/LICENSE +0 -0
  134. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/README.md +0 -0
  135. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/__init__.py +0 -0
  136. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/context.py +0 -0
  137. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/helper/__init__.py +0 -0
  138. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/helper/marketplace.py +0 -0
  139. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/helper/pkgmgr.py +0 -0
  140. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/__init__.py +0 -0
  141. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/connection.py +0 -0
  142. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/connections/__init__.py +0 -0
  143. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/connections/stdio.py +0 -0
  144. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/connections/ws.py +0 -0
  145. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/controller.py +0 -0
  146. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/controllers/__init__.py +0 -0
  147. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/controllers/stdio/__init__.py +0 -0
  148. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/controllers/stdio/client.py +0 -0
  149. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/controllers/stdio/server.py +0 -0
  150. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/controllers/ws/__init__.py +0 -0
  151. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/controllers/ws/client.py +0 -0
  152. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/controllers/ws/server.py +0 -0
  153. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/handler.py +0 -0
  154. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/handlers/__init__.py +0 -0
  155. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/io/handlers/control.py +0 -0
  156. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/plugin/__init__.py +0 -0
  157. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/plugin/container.py +0 -0
  158. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/plugin/mgr.py +0 -0
  159. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/runtime/settings.py +0 -0
  160. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/utils/__init__.py +0 -0
  161. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/utils/discover/__init__.py +0 -0
  162. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/utils/discover/engine.py +0 -0
  163. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/utils/importutil.py +0 -0
  164. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/src/langbot_plugin/utils/platform.py +0 -0
  165. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/tests/api/entities/test_events.py +0 -0
  166. {langbot_plugin-0.3.2 → langbot_plugin-0.3.4}/tests/test_message.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langbot-plugin
3
- Version: 0.3.2
3
+ Version: 0.3.4
4
4
  Summary: This package contains the SDK, CLI for building plugins for LangBot, plus the runtime for hosting LangBot plugins
5
5
  Project-URL: Homepage, https://langbot.app
6
6
  Project-URL: Repository, https://github.com/langbot-app/langbot-plugin-sdk
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "langbot-plugin"
3
- version = "0.3.2"
3
+ version = "0.3.4"
4
4
  description = "This package contains the SDK, CLI for building plugins for LangBot, plus the runtime for hosting LangBot plugins"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -81,6 +81,7 @@ class LangBotAPIProxy:
81
81
  messages: list[provider_message.Message],
82
82
  funcs: list[resource_tool.LLMTool] = [],
83
83
  extra_args: dict[str, Any] = {},
84
+ timeout: float | None = None,
84
85
  ) -> provider_message.Message:
85
86
  """Invoke an LLM model"""
86
87
  resp = (
@@ -92,6 +93,7 @@ class LangBotAPIProxy:
92
93
  "funcs": [f.model_dump() for f in funcs],
93
94
  "extra_args": extra_args,
94
95
  },
96
+ timeout=timeout if timeout is not None else 15.0,
95
97
  )
96
98
  )["message"]
97
99
 
@@ -262,6 +264,7 @@ class LangBotAPIProxy:
262
264
  filters: dict[str, Any] | None = None,
263
265
  search_type: str = "vector",
264
266
  query_text: str = "",
267
+ vector_weight: float | None = None,
265
268
  ) -> list[dict[str, Any]]:
266
269
  """Search similar vectors in Host's vector store.
267
270
 
@@ -272,23 +275,27 @@ class LangBotAPIProxy:
272
275
  filters: Optional metadata filters.
273
276
  search_type: One of 'vector', 'full_text', 'hybrid'.
274
277
  query_text: Raw query text, used for full_text and hybrid search.
278
+ vector_weight: Weight for vector search in hybrid mode (0.0–1.0).
279
+ ``None`` means use equal weights (backward compatible).
275
280
 
276
281
  Returns:
277
282
  List of search results (dict with id, distance, metadata).
278
283
  Some hosts may also include an optional score field, but distance
279
284
  is the stable field and lower values mean more similar results.
280
285
  """
286
+ data = {
287
+ "collection_id": collection_id,
288
+ "query_vector": query_vector,
289
+ "top_k": top_k,
290
+ "filters": filters,
291
+ "search_type": search_type,
292
+ "query_text": query_text,
293
+ "vector_weight": vector_weight,
294
+ }
281
295
  return (
282
296
  await self.plugin_runtime_handler.call_action(
283
297
  PluginToRuntimeAction.VECTOR_SEARCH,
284
- {
285
- "collection_id": collection_id,
286
- "query_vector": query_vector,
287
- "top_k": top_k,
288
- "filters": filters,
289
- "search_type": search_type,
290
- "query_text": query_text,
291
- },
298
+ data,
292
299
  timeout=30,
293
300
  )
294
301
  )["results"]
@@ -321,6 +328,36 @@ class LangBotAPIProxy:
321
328
  )
322
329
  )["count"]
323
330
 
331
+ async def vector_list(
332
+ self,
333
+ collection_id: str,
334
+ filters: dict[str, Any] | None = None,
335
+ limit: int = 20,
336
+ offset: int = 0,
337
+ ) -> dict[str, Any]:
338
+ """List vectors from Host's vector store by metadata filter.
339
+
340
+ Args:
341
+ collection_id: Target collection ID.
342
+ filters: Optional metadata filters.
343
+ limit: Maximum number of items to return.
344
+ offset: Number of items to skip for pagination.
345
+
346
+ Returns:
347
+ Dict with 'items' (list of dicts with id, document, metadata)
348
+ and 'total' (total count matching the filter, best-effort).
349
+ """
350
+ return await self.plugin_runtime_handler.call_action(
351
+ PluginToRuntimeAction.VECTOR_LIST,
352
+ {
353
+ "collection_id": collection_id,
354
+ "filters": filters,
355
+ "limit": limit,
356
+ "offset": offset,
357
+ },
358
+ timeout=30,
359
+ )
360
+
324
361
  async def get_knowledge_file_stream(self, storage_path: str) -> bytes:
325
362
  """Get file content from Host's storage.
326
363
 
@@ -340,6 +377,62 @@ class LangBotAPIProxy:
340
377
  await self.plugin_runtime_handler.delete_local_file(file_key)
341
378
  return file_bytes
342
379
 
380
+ # ================= Knowledge Base APIs =================
381
+
382
+ async def list_knowledge_bases(self) -> list[dict[str, Any]]:
383
+ """List all knowledge bases available in the LangBot instance.
384
+
385
+ Unlike query-based ``list_pipeline_knowledge_bases``, this API is
386
+ globally available and not restricted to a specific pipeline's
387
+ configured knowledge bases.
388
+
389
+ Returns:
390
+ List of dicts, each containing:
391
+ - uuid: Knowledge base UUID
392
+ - name: Knowledge base name
393
+ - description: Knowledge base description
394
+ """
395
+ return (
396
+ await self.plugin_runtime_handler.call_action(
397
+ PluginToRuntimeAction.LIST_KNOWLEDGE_BASES, {}
398
+ )
399
+ )["knowledge_bases"]
400
+
401
+ async def retrieve_knowledge(
402
+ self,
403
+ kb_id: str,
404
+ query_text: str,
405
+ top_k: int = 5,
406
+ filters: dict[str, Any] | None = None,
407
+ ) -> list[dict[str, Any]]:
408
+ """Retrieve relevant documents from any knowledge base.
409
+
410
+ Unlike query-based ``retrieve_knowledge``, this API is globally
411
+ available and can access any knowledge base without pipeline
412
+ restrictions.
413
+
414
+ Args:
415
+ kb_id: Knowledge base UUID
416
+ query_text: Search query text
417
+ top_k: Number of results to return (default: 5)
418
+ filters: Optional metadata filters for retrieval
419
+
420
+ Returns:
421
+ List of retrieval result entries.
422
+ """
423
+ return (
424
+ await self.plugin_runtime_handler.call_action(
425
+ PluginToRuntimeAction.RETRIEVE_KNOWLEDGE,
426
+ {
427
+ "kb_id": kb_id,
428
+ "query_text": query_text,
429
+ "top_k": top_k,
430
+ "filters": filters or {},
431
+ },
432
+ timeout=30,
433
+ )
434
+ )["results"]
435
+
343
436
  # ================= Parser Capability APIs =================
344
437
 
345
438
  async def list_parsers(self, mime_type: str | None = None) -> list[dict[str, Any]]:
@@ -6,6 +6,7 @@ import dotenv
6
6
  import logging
7
7
 
8
8
  from langbot_plugin.utils.discover.engine import ComponentDiscoveryEngine
9
+ from langbot_plugin.utils.log import configure_process_logging
9
10
  from langbot_plugin.cli.run.controller import PluginRuntimeController
10
11
  from langbot_plugin.cli.i18n import cli_print
11
12
 
@@ -66,12 +67,7 @@ async def arun_plugin_process(stdio: bool = False, prod_mode: bool = False, plug
66
67
 
67
68
 
68
69
  def run_plugin_process(stdio: bool = False, prod_mode: bool = False, plugin_debug_key: str = "") -> None:
69
- # Configure logging for plugin process
70
- logging.basicConfig(
71
- level=logging.INFO,
72
- format='[%(asctime)s.%(msecs)03d] (PluginProcess) %(filename)s (%(lineno)d) - [%(levelname)s] : %(message)s',
73
- datefmt='%Y-%m-%d %H:%M:%S'
74
- )
70
+ configure_process_logging()
75
71
 
76
72
  try:
77
73
  asyncio.run(arun_plugin_process(stdio, prod_mode, plugin_debug_key))
@@ -62,12 +62,17 @@ class PluginToRuntimeAction(ActionType):
62
62
  VECTOR_UPSERT = "vector_upsert"
63
63
  VECTOR_SEARCH = "vector_search"
64
64
  VECTOR_DELETE = "vector_delete"
65
+ VECTOR_LIST = "vector_list"
65
66
  GET_KNOWLEDEGE_FILE_STREAM = "get_knowledge_file_stream"
66
67
 
67
68
  LIST_PARSERS = "list_parsers"
68
69
  INVOKE_PARSER = "invoke_parser"
69
70
 
70
- """Knowledge Base Query APIs (query-based)"""
71
+ """Knowledge Base APIs (global, unrestricted)"""
72
+ LIST_KNOWLEDGE_BASES = "list_knowledge_bases"
73
+ RETRIEVE_KNOWLEDGE = "retrieve_knowledge"
74
+
75
+ """Knowledge Base Query APIs (query-based, pipeline-scoped)"""
71
76
  LIST_PIPELINE_KNOWLEDGE_BASES = "list_pipeline_knowledge_bases"
72
77
  RETRIEVE_KNOWLEDGE_BASE = "retrieve_knowledge_base"
73
78
 
@@ -17,6 +17,7 @@ from langbot_plugin.runtime.io.connection import Connection
17
17
  from langbot_plugin.runtime.plugin import mgr as plugin_mgr_cls
18
18
  from langbot_plugin.runtime import context
19
19
  from langbot_plugin.runtime.settings import settings
20
+ from langbot_plugin.utils.log import configure_process_logging
20
21
 
21
22
  logger = logging.getLogger(__name__)
22
23
 
@@ -125,13 +126,8 @@ class RuntimeApplication:
125
126
 
126
127
 
127
128
  def main(args: argparse.Namespace):
128
- # Configure logging for runtime
129
- logging.basicConfig(
130
- level=logging.INFO,
131
- format='[%(asctime)s.%(msecs)03d] %(filename)s (%(lineno)d) - [%(levelname)s] : %(message)s',
132
- datefmt='%Y-%m-%d %H:%M:%S'
133
- )
134
-
129
+ configure_process_logging()
130
+
135
131
  app = RuntimeApplication(args)
136
132
 
137
133
  try:
@@ -208,11 +208,16 @@ class PluginConnectionHandler(handler.Handler):
208
208
 
209
209
  @self.action(PluginToRuntimeAction.INVOKE_LLM)
210
210
  async def invoke_llm(data: dict[str, Any]) -> handler.ActionResponse:
211
+ timeout = data.pop("timeout", 15.0)
212
+ if not isinstance(timeout, (int, float)) or timeout <= 0:
213
+ timeout = 15.0
214
+
211
215
  result = await self.context.control_handler.call_action(
212
216
  PluginToRuntimeAction.INVOKE_LLM,
213
217
  {
214
218
  **data,
215
219
  },
220
+ timeout=float(timeout),
216
221
  )
217
222
  return handler.ActionResponse.success(result)
218
223
 
@@ -296,6 +301,23 @@ class PluginConnectionHandler(handler.Handler):
296
301
 
297
302
  # ================= Knowledge Base Query Handlers (Plugin -> Runtime -> Host) =================
298
303
 
304
+ @self.action(PluginToRuntimeAction.LIST_KNOWLEDGE_BASES)
305
+ async def list_knowledge_bases(data: dict[str, Any]) -> handler.ActionResponse:
306
+ result = await self.context.control_handler.call_action(
307
+ PluginToRuntimeAction.LIST_KNOWLEDGE_BASES,
308
+ data,
309
+ )
310
+ return handler.ActionResponse.success(result)
311
+
312
+ @self.action(PluginToRuntimeAction.RETRIEVE_KNOWLEDGE)
313
+ async def retrieve_knowledge(data: dict[str, Any]) -> handler.ActionResponse:
314
+ result = await self.context.control_handler.call_action(
315
+ PluginToRuntimeAction.RETRIEVE_KNOWLEDGE,
316
+ data,
317
+ timeout=30,
318
+ )
319
+ return handler.ActionResponse.success(result)
320
+
299
321
  @self.action(PluginToRuntimeAction.LIST_PIPELINE_KNOWLEDGE_BASES)
300
322
  async def list_pipeline_knowledge_bases(data: dict[str, Any]) -> handler.ActionResponse:
301
323
  result = await self.context.control_handler.call_action(
@@ -0,0 +1,32 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ from typing import TextIO
5
+
6
+ DEFAULT_LOG_DATEFMT = "%m-%d %H:%M:%S"
7
+ _BASE_LOG_FORMAT = "[%(asctime)s.%(msecs)03d] %(filename)s (%(lineno)d) - [%(levelname)s] : %(message)s"
8
+ _PREFIXED_LOG_FORMAT = (
9
+ "[%(asctime)s.%(msecs)03d] ({process_name}) %(filename)s (%(lineno)d) - [%(levelname)s] : %(message)s"
10
+ )
11
+
12
+
13
+ def build_process_log_format(process_name: str | None = None) -> str:
14
+ if process_name:
15
+ return _PREFIXED_LOG_FORMAT.format(process_name=process_name)
16
+ return _BASE_LOG_FORMAT
17
+
18
+
19
+ def configure_process_logging(
20
+ *,
21
+ level: int = logging.INFO,
22
+ process_name: str | None = None,
23
+ stream: TextIO | None = None,
24
+ ) -> None:
25
+ """Configure a consistent log format for standalone SDK entrypoints."""
26
+ logging.basicConfig(
27
+ level=level,
28
+ format=build_process_log_format(process_name),
29
+ datefmt=DEFAULT_LOG_DATEFMT,
30
+ stream=stream,
31
+ force=True,
32
+ )
@@ -0,0 +1 @@
1
+ __version__ = "0.3.4"
@@ -0,0 +1,29 @@
1
+ from __future__ import annotations
2
+
3
+ import io
4
+ import logging
5
+ import re
6
+
7
+ from langbot_plugin.utils.log import build_process_log_format, configure_process_logging
8
+
9
+
10
+ def test_build_process_log_format_supports_optional_prefix():
11
+ assert build_process_log_format() == "[%(asctime)s.%(msecs)03d] %(filename)s (%(lineno)d) - [%(levelname)s] : %(message)s"
12
+ assert (
13
+ build_process_log_format("BoxRuntime")
14
+ == "[%(asctime)s.%(msecs)03d] (BoxRuntime) %(filename)s (%(lineno)d) - [%(levelname)s] : %(message)s"
15
+ )
16
+
17
+
18
+ def test_configure_process_logging_uses_unified_formatter():
19
+ stream = io.StringIO()
20
+ logger = logging.getLogger("langbot_plugin.tests.log")
21
+
22
+ configure_process_logging(stream=stream)
23
+ logger.info("hello logging")
24
+
25
+ output = stream.getvalue().strip()
26
+ assert re.match(
27
+ r"^\[\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}\] test_log\.py \(\d+\) - \[INFO\] : hello logging$",
28
+ output,
29
+ )
@@ -1 +0,0 @@
1
- __version__ = "0.3.2"
File without changes
File without changes
File without changes
File without changes