langbot-plugin 0.4.2b1__tar.gz → 0.4.2b3__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 (235) hide show
  1. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/PKG-INFO +1 -1
  2. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/pyproject.toml +1 -1
  3. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/nsjail_backend.py +39 -0
  4. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/test_nsjail_backend.py +92 -2
  5. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/.github/workflows/publish-pypi.yaml +0 -0
  6. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/.github/workflows/test.yml +0 -0
  7. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/.gitignore +0 -0
  8. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/.python-version +0 -0
  9. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/AGENTS.md +0 -0
  10. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/CLAUDE.md +0 -0
  11. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/LICENSE +0 -0
  12. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/README.md +0 -0
  13. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/data/.env.example +0 -0
  14. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/docs/Message.md +0 -0
  15. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/docs/PluginPages.md +0 -0
  16. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/docs/communication/apis/lb2rt.md +0 -0
  17. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/docs/communication/runtime_plugin.md +0 -0
  18. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/docs/dependency-management.md +0 -0
  19. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/docs/langbot-plugin-social.png +0 -0
  20. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/__init__.py +0 -0
  21. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/__init__.py +0 -0
  22. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/__init__.py +0 -0
  23. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/abstract/__init__.py +0 -0
  24. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/abstract/platform/__init__.py +0 -0
  25. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/abstract/platform/adapter.py +0 -0
  26. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/abstract/platform/event_logger.py +0 -0
  27. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/__init__.py +0 -0
  28. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/base.py +0 -0
  29. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/command/__init__.py +0 -0
  30. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/command/command.py +0 -0
  31. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/common/__init__.py +0 -0
  32. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/common/event_listener.py +0 -0
  33. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/knowledge_engine/__init__.py +0 -0
  34. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/knowledge_engine/engine.py +0 -0
  35. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/manifest.py +0 -0
  36. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/page/__init__.py +0 -0
  37. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/parser/__init__.py +0 -0
  38. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/parser/parser.py +0 -0
  39. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/tool/__init__.py +0 -0
  40. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/components/tool/tool.py +0 -0
  41. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/definition/plugin.py +0 -0
  42. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/__init__.py +0 -0
  43. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/__init__.py +0 -0
  44. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/command/__init__.py +0 -0
  45. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/command/context.py +0 -0
  46. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/command/errors.py +0 -0
  47. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/pipeline/__init__.py +0 -0
  48. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/pipeline/query.py +0 -0
  49. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/platform/__init__.py +0 -0
  50. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/platform/entities.py +0 -0
  51. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/platform/events.py +0 -0
  52. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/platform/logger.py +0 -0
  53. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/platform/message.py +0 -0
  54. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/provider/__init__.py +0 -0
  55. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/provider/message.py +0 -0
  56. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/provider/prompt.py +0 -0
  57. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/provider/session.py +0 -0
  58. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/rag/__init__.py +0 -0
  59. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/rag/context.py +0 -0
  60. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/rag/enums.py +0 -0
  61. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/rag/errors.py +0 -0
  62. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/rag/models.py +0 -0
  63. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/resource/__init__.py +0 -0
  64. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/builtin/resource/tool.py +0 -0
  65. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/context.py +0 -0
  66. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/entities/events.py +0 -0
  67. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/proxies/__init__.py +0 -0
  68. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/proxies/base.py +0 -0
  69. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/proxies/event_context.py +0 -0
  70. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/proxies/execute_context.py +0 -0
  71. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/proxies/langbot_api.py +0 -0
  72. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/api/proxies/query_based_api.py +0 -0
  73. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/__init__.py +0 -0
  74. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/langbot-page-sdk.js +0 -0
  75. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/.env.example.example +0 -0
  76. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/.gitignore.example +0 -0
  77. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/.vscode/launch.json.example +0 -0
  78. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/README.md.example +0 -0
  79. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/__init__.py +0 -0
  80. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/assets/icon.svg.example +0 -0
  81. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/__init__.py +0 -0
  82. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/commands/__init__.py +0 -0
  83. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/commands/{cmd_name}.py.example +0 -0
  84. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/commands/{cmd_name}.yaml.example +0 -0
  85. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/event_listener/__init__.py +0 -0
  86. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/event_listener/default.py.example +0 -0
  87. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/event_listener/default.yaml.example +0 -0
  88. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/knowledge_engine/__init__.py +0 -0
  89. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/knowledge_engine/{knowledge_engine_name}.py.example +0 -0
  90. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/knowledge_engine/{knowledge_engine_name}.yaml.example +0 -0
  91. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/pages/{page_name}.html.example +0 -0
  92. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/pages/{page_name}.yaml.example +0 -0
  93. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/parser/__init__.py +0 -0
  94. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/parser/{parser_name}.py.example +0 -0
  95. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/parser/{parser_name}.yaml.example +0 -0
  96. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/tools/__init__.py +0 -0
  97. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/tools/{tool_name}.py.example +0 -0
  98. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/components/tools/{tool_name}.yaml.example +0 -0
  99. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/main.py.example +0 -0
  100. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/manifest.yaml.example +0 -0
  101. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/assets/templates/requirements.txt.example +0 -0
  102. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/__init__.py +0 -0
  103. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/actions.py +0 -0
  104. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/backend.py +0 -0
  105. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/client.py +0 -0
  106. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/e2b_backend.py +0 -0
  107. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/errors.py +0 -0
  108. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/models.py +0 -0
  109. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/runtime.py +0 -0
  110. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/security.py +0 -0
  111. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/server.py +0 -0
  112. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/box/skill_store.py +0 -0
  113. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/__init__.py +0 -0
  114. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/__main__.py +0 -0
  115. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/commands/__init__.py +0 -0
  116. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/commands/buildplugin.py +0 -0
  117. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/commands/gencomponent.py +0 -0
  118. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/commands/initplugin.py +0 -0
  119. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/commands/login.py +0 -0
  120. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/commands/logout.py +0 -0
  121. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/commands/publish.py +0 -0
  122. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/commands/runplugin.py +0 -0
  123. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/gen/__init__.py +0 -0
  124. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/gen/renderer.py +0 -0
  125. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/i18n.py +0 -0
  126. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/locales/__init__.py +0 -0
  127. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/locales/en_US.py +0 -0
  128. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/locales/es_ES.py +0 -0
  129. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/locales/ja_JP.py +0 -0
  130. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/locales/th_TH.py +0 -0
  131. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/locales/vi_VN.py +0 -0
  132. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/locales/zh_Hans.py +0 -0
  133. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/locales/zh_Hant.py +0 -0
  134. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/run/__init__.py +0 -0
  135. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/run/controller.py +0 -0
  136. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/run/handler.py +0 -0
  137. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/run/hotreload.py +0 -0
  138. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/utils/__init__.py +0 -0
  139. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/utils/cloudsv.py +0 -0
  140. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/utils/form.py +0 -0
  141. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/cli/utils/page_components.py +0 -0
  142. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/entities/__init__.py +0 -0
  143. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/entities/io/__init__.py +0 -0
  144. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/entities/io/actions/__init__.py +0 -0
  145. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/entities/io/actions/enums.py +0 -0
  146. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/entities/io/errors.py +0 -0
  147. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/entities/io/req.py +0 -0
  148. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/entities/io/resp.py +0 -0
  149. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/entities/marketplace.py +0 -0
  150. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/LICENSE +0 -0
  151. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/README.md +0 -0
  152. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/__init__.py +0 -0
  153. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/app.py +0 -0
  154. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/context.py +0 -0
  155. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/helper/__init__.py +0 -0
  156. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/helper/marketplace.py +0 -0
  157. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/helper/pkgmgr.py +0 -0
  158. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/__init__.py +0 -0
  159. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/connection.py +0 -0
  160. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/connections/__init__.py +0 -0
  161. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/connections/stdio.py +0 -0
  162. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/connections/ws.py +0 -0
  163. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/controller.py +0 -0
  164. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/controllers/__init__.py +0 -0
  165. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/controllers/stdio/__init__.py +0 -0
  166. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/controllers/stdio/client.py +0 -0
  167. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/controllers/stdio/server.py +0 -0
  168. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/controllers/ws/__init__.py +0 -0
  169. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/controllers/ws/client.py +0 -0
  170. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/controllers/ws/server.py +0 -0
  171. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/handler.py +0 -0
  172. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/handlers/__init__.py +0 -0
  173. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/handlers/control.py +0 -0
  174. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/io/handlers/plugin.py +0 -0
  175. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/plugin/__init__.py +0 -0
  176. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/plugin/container.py +0 -0
  177. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/plugin/mgr.py +0 -0
  178. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/runtime/settings.py +0 -0
  179. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/utils/__init__.py +0 -0
  180. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/utils/discover/__init__.py +0 -0
  181. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/utils/discover/engine.py +0 -0
  182. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/utils/importutil.py +0 -0
  183. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/utils/log.py +0 -0
  184. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/utils/platform.py +0 -0
  185. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/src/langbot_plugin/version.py +0 -0
  186. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/__init__.py +0 -0
  187. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/definition/components/test_components.py +0 -0
  188. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/definition/test_manifest.py +0 -0
  189. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/entities/builtin/test_command_context.py +0 -0
  190. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/entities/builtin/test_platform_logger.py +0 -0
  191. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/entities/builtin/test_provider_message.py +0 -0
  192. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/entities/builtin/test_rag_models.py +0 -0
  193. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/entities/test_context.py +0 -0
  194. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/entities/test_events.py +0 -0
  195. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/proxies/test_base.py +0 -0
  196. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/proxies/test_langbot_api.py +0 -0
  197. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/api/proxies/test_query_based_api.py +0 -0
  198. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/__init__.py +0 -0
  199. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/test_backend.py +0 -0
  200. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/test_backend_selection.py +0 -0
  201. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/test_client.py +0 -0
  202. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/test_e2b_backend.py +0 -0
  203. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/test_runtime.py +0 -0
  204. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/test_server.py +0 -0
  205. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/box/test_skill_store.py +0 -0
  206. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/run/test_controller.py +0 -0
  207. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/run/test_runtime_handler.py +0 -0
  208. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_buildplugin.py +0 -0
  209. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_gencomponent.py +0 -0
  210. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_i18n_form.py +0 -0
  211. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_initplugin.py +0 -0
  212. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_login.py +0 -0
  213. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_logout_publish.py +0 -0
  214. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_page_components.py +0 -0
  215. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_renderer.py +0 -0
  216. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/cli/test_runplugin.py +0 -0
  217. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/entities/io/test_protocol.py +0 -0
  218. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/helpers/__init__.py +0 -0
  219. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/helpers/protocol.py +0 -0
  220. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/helper/test_marketplace.py +0 -0
  221. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/helper/test_pkgmgr.py +0 -0
  222. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/io/handlers/test_control_handler.py +0 -0
  223. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/io/handlers/test_import_contracts.py +0 -0
  224. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/io/handlers/test_plugin_handler.py +0 -0
  225. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/io/test_connections.py +0 -0
  226. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/io/test_controllers.py +0 -0
  227. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/io/test_handler.py +0 -0
  228. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/plugin/test_container.py +0 -0
  229. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/plugin/test_manager.py +0 -0
  230. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/runtime/test_app.py +0 -0
  231. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/test_log.py +0 -0
  232. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/test_message.py +0 -0
  233. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/utils/test_discovery.py +0 -0
  234. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/utils/test_importutil.py +0 -0
  235. {langbot_plugin-0.4.2b1 → langbot_plugin-0.4.2b3}/tests/utils/test_platform.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langbot-plugin
3
- Version: 0.4.2b1
3
+ Version: 0.4.2b3
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.4.2b1"
3
+ version = "0.4.2b3"
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 = [
@@ -44,6 +44,23 @@ _READONLY_ETC_ENTRIES: list[str] = [
44
44
  '/etc/resolv.conf', # needed when network=ON
45
45
  ]
46
46
 
47
+ # Essential character devices bind-mounted into the sandbox's /dev.
48
+ # /dev is a fresh empty tmpfs (see _build_args), so these nodes do not exist
49
+ # unless we bind them in from the host. Tooling that shells out for probes
50
+ # relies on them — notably `uv`/`uvx` redirects its glibc/musl detection
51
+ # subprocess to /dev/null; without it uv fails with "Could not detect either
52
+ # glibc version nor musl libc version" and the process exits before it can do
53
+ # anything (e.g. an stdio MCP server dies before the initialize handshake,
54
+ # surfacing as a misleading "Connection closed / please check URL").
55
+ _DEV_NODES: list[str] = [
56
+ '/dev/null',
57
+ '/dev/zero',
58
+ '/dev/full',
59
+ '/dev/random',
60
+ '/dev/urandom',
61
+ '/dev/tty',
62
+ ]
63
+
47
64
  _DEFAULT_BASE_DIR = '/tmp/langbot-box-nsjail'
48
65
 
49
66
 
@@ -116,6 +133,19 @@ class NsjailBackend(BaseSandboxBackend):
116
133
  for d in (root_dir, workspace_dir, tmp_dir, home_dir):
117
134
  d.mkdir(parents=True, exist_ok=True)
118
135
 
136
+ # When a host_path is mounted into the sandbox it becomes the nsjail
137
+ # bind-mount source (see _build_mounts). nsjail requires the source to
138
+ # already exist on the host, otherwise the bind-mount fails and the
139
+ # command exits 255 with no stdout/stderr. The per-session loop above
140
+ # never creates host_path (it lives outside session_dir), so ensure it
141
+ # exists here. Read-only mounts intentionally are NOT auto-created: a
142
+ # missing read-only source is a caller error that should surface.
143
+ if (
144
+ spec.host_path is not None
145
+ and spec.host_path_mode == BoxHostMountMode.READ_WRITE
146
+ ):
147
+ os.makedirs(spec.host_path, exist_ok=True)
148
+
119
149
  # If host_path is specified, we will use it directly instead of the
120
150
  # per-session workspace when building nsjail args (see _build_mounts).
121
151
  meta = {
@@ -317,6 +347,15 @@ class NsjailBackend(BaseSandboxBackend):
317
347
  args.extend(['--mount', 'none:/proc:proc:rw'])
318
348
  args.extend(['--mount', 'none:/dev:tmpfs:rw'])
319
349
 
350
+ # /dev is a fresh empty tmpfs, so bind in the essential character
351
+ # devices. Without /dev/null in particular, uv's glibc/musl detection
352
+ # subprocess fails and any uvx-launched process (e.g. stdio MCP servers)
353
+ # exits before doing useful work. Mounted read-write so writes to
354
+ # /dev/null behave normally.
355
+ for dev in _DEV_NODES:
356
+ if os.path.exists(dev):
357
+ args.extend(['--bindmount', f'{dev}:{dev}'])
358
+
320
359
  # Working directory.
321
360
  args.extend(['--cwd', spec.workdir])
322
361
 
@@ -93,20 +93,62 @@ async def test_start_session_creates_directories(backend, tmp_base):
93
93
  @pytest.mark.anyio
94
94
  async def test_start_session_with_host_path(backend, tmp_base):
95
95
  tmp_base.mkdir(parents=True, exist_ok=True)
96
+ host_path = str(tmp_base / 'rw_host')
96
97
  spec = BoxSpec(
97
98
  session_id='sess2',
98
99
  cmd='ls',
99
- host_path='/some/path',
100
+ host_path=host_path,
100
101
  host_path_mode=BoxHostMountMode.READ_WRITE,
101
102
  mount_path='/project',
102
103
  )
103
104
 
104
105
  info = await backend.start_session(spec)
105
- assert info.host_path == '/some/path'
106
+ assert info.host_path == host_path
106
107
  assert info.host_path_mode == BoxHostMountMode.READ_WRITE
107
108
  assert info.mount_path == '/project'
108
109
 
109
110
 
111
+ @pytest.mark.anyio
112
+ async def test_start_session_creates_missing_rw_host_path(backend, tmp_base):
113
+ """Regression: a read-write host_path that does not yet exist must be
114
+ created by start_session, otherwise nsjail's --bindmount source is missing
115
+ and the command exits 255 with no output (SaaS MCP shared-workspace bug)."""
116
+ tmp_base.mkdir(parents=True, exist_ok=True)
117
+ host_path = tmp_base / 'never_created' / 'workspace'
118
+ assert not host_path.exists()
119
+
120
+ spec = BoxSpec(
121
+ session_id='sess-mkdir',
122
+ cmd='ls',
123
+ host_path=str(host_path),
124
+ host_path_mode=BoxHostMountMode.READ_WRITE,
125
+ mount_path='/workspace',
126
+ )
127
+
128
+ await backend.start_session(spec)
129
+ assert host_path.is_dir()
130
+
131
+
132
+ @pytest.mark.anyio
133
+ async def test_start_session_does_not_create_ro_host_path(backend, tmp_base):
134
+ """A missing read-only host_path is a caller error and must NOT be silently
135
+ created — it should surface rather than mount an empty dir."""
136
+ tmp_base.mkdir(parents=True, exist_ok=True)
137
+ host_path = tmp_base / 'ro_missing'
138
+ assert not host_path.exists()
139
+
140
+ spec = BoxSpec(
141
+ session_id='sess-ro',
142
+ cmd='ls',
143
+ host_path=str(host_path),
144
+ host_path_mode=BoxHostMountMode.READ_ONLY,
145
+ mount_path='/project',
146
+ )
147
+
148
+ await backend.start_session(spec)
149
+ assert not host_path.exists()
150
+
151
+
110
152
  # ── stop_session ──────────────────────────────────────────────────────
111
153
 
112
154
  @pytest.mark.anyio
@@ -173,6 +215,54 @@ def test_build_nsjail_args_basic(backend, tmp_base):
173
215
  assert (session_dir / 'root' / 'home').is_dir()
174
216
 
175
217
 
218
+ def test_build_nsjail_args_binds_essential_dev_nodes(backend, tmp_base):
219
+ """/dev is a fresh empty tmpfs, so essential character devices must be
220
+ bind-mounted in. Regression: without /dev/null, uv's glibc/musl detection
221
+ subprocess fails ("Could not detect either glibc version nor musl libc
222
+ version") and uvx-launched stdio MCP servers die before the initialize
223
+ handshake, surfacing as a misleading "Connection closed / please check URL".
224
+ """
225
+ tmp_base.mkdir(parents=True, exist_ok=True)
226
+ session_dir = tmp_base / 'test_dev'
227
+ for d in ('root', 'workspace', 'tmp', 'home'):
228
+ (session_dir / d).mkdir(parents=True)
229
+
230
+ spec = BoxSpec(session_id='s-dev', cmd='echo hi')
231
+ session = BoxSessionInfo(
232
+ session_id='s-dev',
233
+ backend_name='nsjail',
234
+ backend_session_id=str(session_dir),
235
+ image=spec.image,
236
+ network=BoxNetworkMode.OFF,
237
+ created_at='2024-01-01T00:00:00+00:00',
238
+ last_used_at='2024-01-01T00:00:00+00:00',
239
+ )
240
+
241
+ # Pretend every candidate device node exists on the host.
242
+ with mock.patch('os.path.exists', return_value=True):
243
+ args = backend._build_nsjail_args(session, spec, session_dir)
244
+
245
+ # /dev itself is a tmpfs mount.
246
+ mount_specs = [args[i + 1] for i, a in enumerate(args) if a == '--mount']
247
+ assert 'none:/dev:tmpfs:rw' in mount_specs
248
+
249
+ # /dev/null (the critical one for uv) must be bind-mounted read-write,
250
+ # ordered AFTER the /dev tmpfs mount so it lands on the fresh tmpfs.
251
+ rw_binds = [args[i + 1] for i, a in enumerate(args) if a == '--bindmount']
252
+ assert '/dev/null:/dev/null' in rw_binds
253
+ assert '/dev/urandom:/dev/urandom' in rw_binds
254
+
255
+ dev_tmpfs_idx = next(
256
+ i for i, a in enumerate(args)
257
+ if a == '--mount' and args[i + 1] == 'none:/dev:tmpfs:rw'
258
+ )
259
+ dev_null_idx = next(
260
+ i for i, a in enumerate(args)
261
+ if a == '--bindmount' and args[i + 1] == '/dev/null:/dev/null'
262
+ )
263
+ assert dev_tmpfs_idx < dev_null_idx
264
+
265
+
176
266
  def test_build_nsjail_args_network_on(backend, tmp_base):
177
267
  tmp_base.mkdir(parents=True, exist_ok=True)
178
268
  session_dir = tmp_base / 'test_session_net'