langbot-plugin 0.7.9__tar.gz → 0.7.11__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.
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/ARCHITECTURE.md +21 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/PKG-INFO +1 -1
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/pyproject.toml +1 -1
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/abstract/platform/adapter.py +4 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/plugin.py +3 -2
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/platform/events.py +207 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/resources.py +39 -31
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/backend.py +25 -10
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/models.py +10 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/run/handler.py +13 -1
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/io/actions/enums.py +1 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/io/context.py +65 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/io/req.py +2 -1
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/io/resp.py +8 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/context.py +3 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/handler.py +170 -18
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/handlers/control.py +4 -1
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/handlers/plugin.py +11 -6
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/mgr.py +43 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/worker_launcher.py +30 -6
- langbot_plugin-0.7.11/src/langbot_plugin/runtime/plugin/worker_observability.py +63 -0
- langbot_plugin-0.7.11/src/langbot_plugin/runtime/plugin/worker_watchdog.py +72 -0
- langbot_plugin-0.7.11/src/langbot_plugin/version.py +1 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/test_events.py +29 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/test_runner_handlers_matrix.py +2 -2
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/run/test_runtime_handler.py +8 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/test_heartbeat_admission.py +7 -0
- langbot_plugin-0.7.11/tests/runtime/io/test_stream_flow_control.py +221 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_installation_manager.py +56 -0
- langbot_plugin-0.7.11/tests/runtime/plugin/test_mode_resource_limits.py +60 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_worker_launcher.py +52 -0
- langbot_plugin-0.7.11/tests/runtime/plugin/test_worker_plugin_identity.py +22 -0
- langbot_plugin-0.7.11/tests/test_worker_observability.py +46 -0
- langbot_plugin-0.7.11/tests/test_worker_watchdog.py +110 -0
- langbot_plugin-0.7.9/src/langbot_plugin/version.py +0 -1
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/.github/workflows/cla.yml +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/.github/workflows/publish-pypi.yaml +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/.github/workflows/publish.yml +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/.github/workflows/test.yml +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/.gitignore +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/.python-version +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/AGENTS.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/CLAUDE.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/CONTRIBUTING.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/LICENSE +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/README.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/README_CN.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/data/.env.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/Message.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/PluginPages.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/agent-runner-interactions.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/agent-runner-pluginization/PROTOCOL_V1.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/agent-runner-pluginization/README.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/agent-runner-pluginization/SDK_RUNTIME_PLAN.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/certified-plugins.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/communication/apis/lb2rt.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/communication/runtime_plugin.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/dependency-management.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/langbot-plugin-social.png +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/runner.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/docs/stateless-components.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/local_e2e/acceptance.json +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/local_e2e/registration_fanin.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/local_e2e/run_acceptance.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/mypy.ini +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/scripts/check_action_consistency.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/scripts/runtime_resource_probe.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/asset_gateway.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/daemon.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/decorators.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/external_tools.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/mcp_access.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/mcp_bridge.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/mcp_config.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/mcp_protocol.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/agent_tools/mcp_stdio.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/abstract/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/abstract/platform/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/abstract/platform/event_logger.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/base.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/command/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/command/command.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/common/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/common/event_listener.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/knowledge_engine/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/knowledge_engine/engine.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/manifest.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/page/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/parser/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/parser/parser.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/runner/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/runner/runner.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/tool/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/definition/components/tool/tool.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/command/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/command/context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/command/errors.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/pipeline/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/pipeline/query.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/platform/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/platform/entities.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/platform/errors.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/platform/logger.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/platform/message.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/provider/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/provider/message.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/provider/prompt.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/provider/reasoning.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/provider/session.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/rag/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/rag/context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/rag/enums.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/rag/errors.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/rag/models.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/resource/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/resource/tool.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/box.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/capabilities.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/compat.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/context_access.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/delivery.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/errors.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/event.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/input.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/interaction.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/manifest.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/page_results.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/permissions.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/resources.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/result.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/run_ledger.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/runtime.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/runtime_registry.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/state.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/stats.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/steering.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/transcript.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/builtin/runner/trigger.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/events.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/entities/execution.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/base.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/event_context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/execute_context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/invocation.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/langbot_api.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/query_based_api.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/admin.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/api.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/box.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/common.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/ledger.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/platform.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/reply_stream.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/state.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/tracing.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/langbot-page-sdk.js +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/.env.example.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/.github/workflows/release.yml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/.gitignore.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/.vscode/launch.json.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/README.md.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/assets/icon.svg.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/commands/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/commands/{cmd_name}.py.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/commands/{cmd_name}.yaml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/event_listener/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/event_listener/default.py.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/event_listener/default.yaml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/knowledge_engine/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/knowledge_engine/{knowledge_engine_name}.py.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/knowledge_engine/{knowledge_engine_name}.yaml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/pages/{page_name}.html.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/pages/{page_name}.yaml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/parser/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/parser/{parser_name}.py.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/parser/{parser_name}.yaml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/runner/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/runner/{runner_name}.py.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/runner/{runner_name}.yaml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/tools/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/tools/{tool_name}.py.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/components/tools/{tool_name}.yaml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/main.py.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/manifest.yaml.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/readme/README_zh_Hans.md.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/assets/templates/requirements.txt.example +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/actions.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/client.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/e2b_backend.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/errors.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/host_backend.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/nsjail_backend.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/runtime.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/security.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/server.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/skill_store.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/box/tenancy.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/certification.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/__main__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/commands/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/commands/buildplugin.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/commands/gencomponent.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/commands/initplugin.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/commands/login.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/commands/logout.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/commands/publish.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/commands/runplugin.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/gen/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/gen/renderer.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/i18n.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/locales/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/locales/en_US.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/locales/es_ES.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/locales/ja_JP.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/locales/th_TH.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/locales/vi_VN.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/locales/zh_Hans.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/locales/zh_Hant.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/run/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/run/controller.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/run/hotreload.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/utils/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/utils/cloudsv.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/utils/form.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/cli/utils/page_components.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/io/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/io/actions/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/io/errors.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/entities/marketplace.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/LICENSE +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/README.md +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/app.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/bounded_executor.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/event_loop_monitor.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/helper/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/helper/marketplace.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/helper/pkgmgr.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/connection.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/connections/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/connections/stdio.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/connections/ws.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/controller.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/controllers/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/controllers/stdio/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/controllers/stdio/client.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/controllers/stdio/server.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/controllers/ws/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/controllers/ws/client.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/controllers/ws/server.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/io/handlers/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/ops_metrics.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/artifact.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/container.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/dependency_environment.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/logbuffer.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/restart_coordinator.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/plugin/runner_service.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/security.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/runtime/settings.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/storage.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/utils/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/utils/deadline.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/utils/discover/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/utils/discover/engine.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/utils/importutil.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/utils/log.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/utils/platform.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/definition/components/test_components.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/definition/components/test_imports.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/definition/test_manifest.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/builtin/runner/test_context_result.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/builtin/runner/test_history_event_entities.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/builtin/runner/test_interaction.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/builtin/runner/test_run_ledger_entities.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/builtin/test_command_context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/builtin/test_platform_logger.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/builtin/test_provider_message.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/builtin/test_rag_models.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/entities/test_context.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/proxies/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/proxies/test_agent_run_api_proxy.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/proxies/test_base.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/proxies/test_box_api.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/proxies/test_history_event_api_proxy.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/proxies/test_langbot_api.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/proxies/test_query_based_api.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/proxies/test_reasoning_parameter.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/test_agent_tools_mcp_bridge.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/test_runner_handlers.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/api/test_runner_public_apis.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_admission.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_backend.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_backend_selection.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_client.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_e2b_backend.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_host_backend.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_nsjail_backend.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_runtime.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_server.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_skill_store.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/box/test_storage_analysis.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/run/test_controller.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/run/test_hotreload.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_buildplugin.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_gencomponent.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_i18n_form.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_initplugin.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_login.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_logout_publish.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_page_components.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_renderer.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_runner_usages.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/cli/test_runplugin.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/e2e/standalone_runtime_eba_probe.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/entities/io/test_dependency_errors.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/entities/io/test_protocol.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/fixtures/eba_event_probe_plugin/.gitignore +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/fixtures/eba_event_probe_plugin/assets/icon.svg +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/fixtures/eba_event_probe_plugin/components/event_listener/default.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/fixtures/eba_event_probe_plugin/components/event_listener/default.yaml +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/fixtures/eba_event_probe_plugin/main.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/fixtures/eba_event_probe_plugin/manifest.yaml +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/helpers/__init__.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/helpers/protocol.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/packaging/test_installed_cli_blackbox.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/packaging/test_release_metadata.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/helper/test_marketplace.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/helper/test_pkgmgr.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/handlers/test_control_handler.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/handlers/test_import_contracts.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/handlers/test_legacy_file_chunk.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/handlers/test_plugin_handler.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/test_action_consistency.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/test_connections.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/test_controllers.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/test_handler.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/io/test_stdio_server.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_artifact_store.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_container.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_dependency_environment.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_exact_dify_real_worker.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_exact_legacy_sdk_compat.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_legacy_shadow.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_manager.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_mgr_runner.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_restart_coordinator.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_shared_worker_subprocess.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/plugin/test_workload_isolation.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/test_app.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/test_bounded_executor.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/test_event_loop_monitor.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/test_ops_metrics.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/runtime/test_pull_api_handlers.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/test_certification.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/test_log.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/test_message.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/test_plugin_logbuffer.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/test_storage.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/utils/test_deadline.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/utils/test_discovery.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/utils/test_importutil.py +0 -0
- {langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/tests/utils/test_platform.py +0 -0
|
@@ -97,6 +97,27 @@ Subcommand implementations live under `cli/commands/`, `cli/run/`, and `cli/gen/
|
|
|
97
97
|
|
|
98
98
|
## Action RPC Protocol
|
|
99
99
|
|
|
100
|
+
Streaming callers may send `stream_flow_control: 1` in the request envelope.
|
|
101
|
+
Supporting senders number data responses with `stream_index` starting at 1 and
|
|
102
|
+
allow eight unacknowledged frames per stream. After processing four frames, the
|
|
103
|
+
caller sends `__stream_ack` with the original `seq_id` and cumulative `index`,
|
|
104
|
+
using the original immutable installation context. The sender validates the
|
|
105
|
+
context and index before returning credit. ACK admission has its own bounded
|
|
106
|
+
capacity, separate from business actions and cancellation/heartbeat capacity.
|
|
107
|
+
Only that stream's producer waits for credit; the connection router never waits
|
|
108
|
+
on a consumer queue. Forwarding hops negotiate independently.
|
|
109
|
+
|
|
110
|
+
Each streamed frame is limited to 1 MiB of serialized UTF-8 and each receiving
|
|
111
|
+
buffer to 128 frames / 8 MiB. Oversize or legacy overflow is a terminal error,
|
|
112
|
+
never a silently dropped delta. Older senders ignore the optional request field;
|
|
113
|
+
without `stream_index`, callers send no ACKs and retain bounded legacy routing.
|
|
114
|
+
Older callers omit the field, so new senders retain legacy push behavior.
|
|
115
|
+
This compatibility does not provide backpressure on legacy hops; all hops must
|
|
116
|
+
be upgraded for end-to-end flow control. Unfinished/failed/closed consumers send
|
|
117
|
+
best-effort scoped cancellation, and producers explicitly close their iterators.
|
|
118
|
+
The wire timeout bounds idle reads and ACK waits, not arbitrary time spent by
|
|
119
|
+
application code processing a yielded value.
|
|
120
|
+
|
|
100
121
|
The runtime protocol is a bidirectional action RPC protocol over stdio or WebSocket. It is implemented by `runtime/io/handler.py` and data models under `entities/io/`.
|
|
101
122
|
|
|
102
123
|
Request shape:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: langbot-plugin
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.11
|
|
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
|
|
@@ -28,6 +28,10 @@ class AbstractMessagePlatformAdapter(pydantic.BaseModel, metaclass=abc.ABCMeta):
|
|
|
28
28
|
def __init__(self, *args, **kwargs):
|
|
29
29
|
super().__init__(*args, **kwargs)
|
|
30
30
|
|
|
31
|
+
def get_supported_apis(self) -> list[str]:
|
|
32
|
+
"""Expose the message APIs required of every legacy adapter to Agents."""
|
|
33
|
+
return ["send_message", "reply_message"]
|
|
34
|
+
|
|
31
35
|
@abc.abstractmethod
|
|
32
36
|
async def send_message(
|
|
33
37
|
self, target_type: str, target_id: str, message: platform_message.MessageChain
|
|
@@ -25,8 +25,9 @@ class BasePlugin(abc.ABC, langbot_api.LangBotAPIProxy):
|
|
|
25
25
|
return getattr(self, "_legacy_config", {})
|
|
26
26
|
|
|
27
27
|
@config.setter
|
|
28
|
-
def config(self, value: dict[str, typing.Any]) -> None:
|
|
29
|
-
|
|
28
|
+
def config(self, value: dict[str, typing.Any] | None) -> None:
|
|
29
|
+
# Legacy plugins initialize this attribute to None before runtime binding.
|
|
30
|
+
self._legacy_config = {} if value is None else dict(value)
|
|
30
31
|
|
|
31
32
|
def get_config(self) -> dict[str, typing.Any]:
|
|
32
33
|
"""Return the active invocation config, or the legacy dedicated config."""
|
|
@@ -205,6 +205,9 @@ class EBAEvent(Event):
|
|
|
205
205
|
Coexists with the legacy MessageEvent hierarchy.
|
|
206
206
|
"""
|
|
207
207
|
|
|
208
|
+
summary_field: typing.ClassVar[str] = "type"
|
|
209
|
+
"""Existing field path used for display summaries; never serialized."""
|
|
210
|
+
|
|
208
211
|
type: str
|
|
209
212
|
"""Event type identifier, e.g. 'message.received'."""
|
|
210
213
|
|
|
@@ -227,6 +230,8 @@ class EBAEvent(Event):
|
|
|
227
230
|
class MessageReceivedEvent(EBAEvent):
|
|
228
231
|
"""New message received. Replaces legacy FriendMessage / GroupMessage."""
|
|
229
232
|
|
|
233
|
+
summary_field: typing.ClassVar[str] = "message_chain"
|
|
234
|
+
|
|
230
235
|
type: str = "message.received"
|
|
231
236
|
|
|
232
237
|
message_id: typing.Union[int, str] = ""
|
|
@@ -321,6 +326,8 @@ class MessageReceivedEvent(EBAEvent):
|
|
|
321
326
|
class MessageEditedEvent(EBAEvent):
|
|
322
327
|
"""Message was edited."""
|
|
323
328
|
|
|
329
|
+
summary_field: typing.ClassVar[str] = "new_content"
|
|
330
|
+
|
|
324
331
|
type: str = "message.edited"
|
|
325
332
|
|
|
326
333
|
message_id: typing.Union[int, str] = ""
|
|
@@ -342,6 +349,8 @@ class MessageEditedEvent(EBAEvent):
|
|
|
342
349
|
class MessageDeletedEvent(EBAEvent):
|
|
343
350
|
"""Message was deleted / recalled."""
|
|
344
351
|
|
|
352
|
+
summary_field: typing.ClassVar[str] = "message_id"
|
|
353
|
+
|
|
345
354
|
type: str = "message.deleted"
|
|
346
355
|
|
|
347
356
|
message_id: typing.Union[int, str] = ""
|
|
@@ -358,6 +367,8 @@ class MessageDeletedEvent(EBAEvent):
|
|
|
358
367
|
class MessageReactionEvent(EBAEvent):
|
|
359
368
|
"""Message received an emoji reaction."""
|
|
360
369
|
|
|
370
|
+
summary_field: typing.ClassVar[str] = "reaction"
|
|
371
|
+
|
|
361
372
|
type: str = "message.reaction"
|
|
362
373
|
|
|
363
374
|
message_id: typing.Union[int, str] = ""
|
|
@@ -385,6 +396,8 @@ class MessageReactionEvent(EBAEvent):
|
|
|
385
396
|
class FeedbackReceivedEvent(EBAEvent):
|
|
386
397
|
"""User feedback received for a bot response."""
|
|
387
398
|
|
|
399
|
+
summary_field: typing.ClassVar[str] = "feedback_content"
|
|
400
|
+
|
|
388
401
|
type: str = "feedback.received"
|
|
389
402
|
|
|
390
403
|
feedback_id: str
|
|
@@ -432,6 +445,8 @@ class FeedbackReceivedEvent(EBAEvent):
|
|
|
432
445
|
class MemberJoinedEvent(EBAEvent):
|
|
433
446
|
"""New member joined a group."""
|
|
434
447
|
|
|
448
|
+
summary_field: typing.ClassVar[str] = "member"
|
|
449
|
+
|
|
435
450
|
type: str = "group.member_joined"
|
|
436
451
|
|
|
437
452
|
group: platform_entities.UserGroup = pydantic.Field(
|
|
@@ -454,6 +469,8 @@ class MemberJoinedEvent(EBAEvent):
|
|
|
454
469
|
class MemberLeftEvent(EBAEvent):
|
|
455
470
|
"""Member left a group."""
|
|
456
471
|
|
|
472
|
+
summary_field: typing.ClassVar[str] = "member"
|
|
473
|
+
|
|
457
474
|
type: str = "group.member_left"
|
|
458
475
|
|
|
459
476
|
group: platform_entities.UserGroup = pydantic.Field(
|
|
@@ -473,6 +490,8 @@ class MemberLeftEvent(EBAEvent):
|
|
|
473
490
|
class MemberBannedEvent(EBAEvent):
|
|
474
491
|
"""Member was muted / restricted."""
|
|
475
492
|
|
|
493
|
+
summary_field: typing.ClassVar[str] = "member"
|
|
494
|
+
|
|
476
495
|
type: str = "group.member_banned"
|
|
477
496
|
|
|
478
497
|
group: platform_entities.UserGroup = pydantic.Field(
|
|
@@ -489,6 +508,8 @@ class MemberBannedEvent(EBAEvent):
|
|
|
489
508
|
class GroupInfoUpdatedEvent(EBAEvent):
|
|
490
509
|
"""Group info was updated."""
|
|
491
510
|
|
|
511
|
+
summary_field: typing.ClassVar[str] = "changed_fields"
|
|
512
|
+
|
|
492
513
|
type: str = "group.info_updated"
|
|
493
514
|
|
|
494
515
|
group: platform_entities.UserGroup = pydantic.Field(
|
|
@@ -507,6 +528,8 @@ class GroupInfoUpdatedEvent(EBAEvent):
|
|
|
507
528
|
class FriendRequestReceivedEvent(EBAEvent):
|
|
508
529
|
"""Friend request received."""
|
|
509
530
|
|
|
531
|
+
summary_field: typing.ClassVar[str] = "message"
|
|
532
|
+
|
|
510
533
|
type: str = "friend.request_received"
|
|
511
534
|
|
|
512
535
|
request_id: typing.Union[int, str] = ""
|
|
@@ -524,6 +547,8 @@ class FriendRequestReceivedEvent(EBAEvent):
|
|
|
524
547
|
class FriendAddedEvent(EBAEvent):
|
|
525
548
|
"""Friend successfully added."""
|
|
526
549
|
|
|
550
|
+
summary_field: typing.ClassVar[str] = "user"
|
|
551
|
+
|
|
527
552
|
type: str = "friend.added"
|
|
528
553
|
|
|
529
554
|
user: platform_entities.User = pydantic.Field(
|
|
@@ -534,6 +559,8 @@ class FriendAddedEvent(EBAEvent):
|
|
|
534
559
|
class FriendRemovedEvent(EBAEvent):
|
|
535
560
|
"""Friend was removed."""
|
|
536
561
|
|
|
562
|
+
summary_field: typing.ClassVar[str] = "user"
|
|
563
|
+
|
|
537
564
|
type: str = "friend.removed"
|
|
538
565
|
|
|
539
566
|
user: platform_entities.User = pydantic.Field(
|
|
@@ -547,6 +574,8 @@ class FriendRemovedEvent(EBAEvent):
|
|
|
547
574
|
class BotInvitedToGroupEvent(EBAEvent):
|
|
548
575
|
"""Bot was invited to join a group."""
|
|
549
576
|
|
|
577
|
+
summary_field: typing.ClassVar[str] = "group"
|
|
578
|
+
|
|
550
579
|
type: str = "bot.invited_to_group"
|
|
551
580
|
|
|
552
581
|
group: platform_entities.UserGroup = pydantic.Field(
|
|
@@ -561,6 +590,8 @@ class BotInvitedToGroupEvent(EBAEvent):
|
|
|
561
590
|
class BotRemovedFromGroupEvent(EBAEvent):
|
|
562
591
|
"""Bot was removed from a group."""
|
|
563
592
|
|
|
593
|
+
summary_field: typing.ClassVar[str] = "group"
|
|
594
|
+
|
|
564
595
|
type: str = "bot.removed_from_group"
|
|
565
596
|
|
|
566
597
|
group: platform_entities.UserGroup = pydantic.Field(
|
|
@@ -572,6 +603,8 @@ class BotRemovedFromGroupEvent(EBAEvent):
|
|
|
572
603
|
class BotMutedEvent(EBAEvent):
|
|
573
604
|
"""Bot was muted in a group."""
|
|
574
605
|
|
|
606
|
+
summary_field: typing.ClassVar[str] = "group"
|
|
607
|
+
|
|
575
608
|
type: str = "bot.muted"
|
|
576
609
|
|
|
577
610
|
group: platform_entities.UserGroup = pydantic.Field(
|
|
@@ -584,6 +617,8 @@ class BotMutedEvent(EBAEvent):
|
|
|
584
617
|
class BotUnmutedEvent(EBAEvent):
|
|
585
618
|
"""Bot was unmuted in a group."""
|
|
586
619
|
|
|
620
|
+
summary_field: typing.ClassVar[str] = "group"
|
|
621
|
+
|
|
587
622
|
type: str = "bot.unmuted"
|
|
588
623
|
|
|
589
624
|
group: platform_entities.UserGroup = pydantic.Field(
|
|
@@ -601,6 +636,8 @@ class PlatformSpecificEvent(EBAEvent):
|
|
|
601
636
|
Used when the adapter cannot map an event to a standard type.
|
|
602
637
|
"""
|
|
603
638
|
|
|
639
|
+
summary_field: typing.ClassVar[str] = "action"
|
|
640
|
+
|
|
604
641
|
type: str = "platform.specific"
|
|
605
642
|
|
|
606
643
|
action: str = ""
|
|
@@ -610,9 +647,179 @@ class PlatformSpecificEvent(EBAEvent):
|
|
|
610
647
|
"""Event data; structure defined by each adapter."""
|
|
611
648
|
|
|
612
649
|
|
|
650
|
+
# ---- WeCom AI Bot Events ----
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
class WecomBotEnterChatEvent(EBAEvent):
|
|
654
|
+
"""User entered an AI bot conversation (not a friend-added event)."""
|
|
655
|
+
|
|
656
|
+
summary_field: typing.ClassVar[str] = "chat_id"
|
|
657
|
+
type: str = "wecombot.enter_chat"
|
|
658
|
+
user: typing.Optional[platform_entities.User] = None
|
|
659
|
+
chat_id: str = ""
|
|
660
|
+
chat_type: platform_entities.ChatType = platform_entities.ChatType.PRIVATE
|
|
661
|
+
message_id: str = ""
|
|
662
|
+
data: dict = pydantic.Field(default_factory=dict)
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
class WecomBotTemplateCardEvent(EBAEvent):
|
|
666
|
+
"""User clicked or submitted a non-managed AI bot template card."""
|
|
667
|
+
|
|
668
|
+
summary_field: typing.ClassVar[str] = "event_key"
|
|
669
|
+
type: str = "wecombot.template_card_event"
|
|
670
|
+
user: typing.Optional[platform_entities.User] = None
|
|
671
|
+
chat_id: str = ""
|
|
672
|
+
chat_type: platform_entities.ChatType = platform_entities.ChatType.PRIVATE
|
|
673
|
+
message_id: str = ""
|
|
674
|
+
task_id: str = ""
|
|
675
|
+
event_key: str = ""
|
|
676
|
+
card_type: str = ""
|
|
677
|
+
selected_items: list[dict] = pydantic.Field(default_factory=list)
|
|
678
|
+
data: dict = pydantic.Field(default_factory=dict)
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
class DingTalkCardActionEvent(EBAEvent):
|
|
682
|
+
"""A DingTalk card interaction outside managed input forms."""
|
|
683
|
+
|
|
684
|
+
summary_field: typing.ClassVar[str] = "action"
|
|
685
|
+
type: str = "dingtalk.card_action"
|
|
686
|
+
user: typing.Optional[platform_entities.User] = None
|
|
687
|
+
space_id: str = ""
|
|
688
|
+
card_instance_id: str = ""
|
|
689
|
+
action: str = ""
|
|
690
|
+
data: dict = pydantic.Field(default_factory=dict)
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
# ---- WeCom Customer Service Events ----
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
class WecomCSEnterSessionEvent(EBAEvent):
|
|
697
|
+
"""Customer opened a WeCom customer-service conversation."""
|
|
698
|
+
|
|
699
|
+
summary_field: typing.ClassVar[str] = "external_userid"
|
|
700
|
+
type: str = "wecomcs.enter_session"
|
|
701
|
+
open_kfid: str = ""
|
|
702
|
+
external_userid: str = ""
|
|
703
|
+
chat_id: str = ""
|
|
704
|
+
chat_type: platform_entities.ChatType = platform_entities.ChatType.PRIVATE
|
|
705
|
+
user: typing.Optional[platform_entities.User] = None
|
|
706
|
+
data: dict = pydantic.Field(default_factory=dict)
|
|
707
|
+
scene: str = ""
|
|
708
|
+
scene_param: str = ""
|
|
709
|
+
welcome_code: str = ""
|
|
710
|
+
wechat_channels: dict = pydantic.Field(default_factory=dict)
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
class WecomCSMessageSendFailedEvent(EBAEvent):
|
|
714
|
+
"""WeCom reported that an outgoing customer-service message failed."""
|
|
715
|
+
|
|
716
|
+
summary_field: typing.ClassVar[str] = "fail_msgid"
|
|
717
|
+
type: str = "wecomcs.msg_send_fail"
|
|
718
|
+
open_kfid: str = ""
|
|
719
|
+
external_userid: str = ""
|
|
720
|
+
chat_id: str = ""
|
|
721
|
+
chat_type: platform_entities.ChatType = platform_entities.ChatType.PRIVATE
|
|
722
|
+
user: typing.Optional[platform_entities.User] = None
|
|
723
|
+
data: dict = pydantic.Field(default_factory=dict)
|
|
724
|
+
fail_msgid: str = ""
|
|
725
|
+
fail_type: int = 0
|
|
726
|
+
|
|
727
|
+
|
|
728
|
+
class WecomCSServicerStatusChangedEvent(EBAEvent):
|
|
729
|
+
"""A WeCom customer-service representative changed availability."""
|
|
730
|
+
|
|
731
|
+
summary_field: typing.ClassVar[str] = "servicer_userid"
|
|
732
|
+
type: str = "wecomcs.servicer_status_change"
|
|
733
|
+
open_kfid: str = ""
|
|
734
|
+
external_userid: str = ""
|
|
735
|
+
chat_id: str = ""
|
|
736
|
+
chat_type: platform_entities.ChatType = platform_entities.ChatType.PRIVATE
|
|
737
|
+
user: typing.Optional[platform_entities.User] = None
|
|
738
|
+
data: dict = pydantic.Field(default_factory=dict)
|
|
739
|
+
servicer_userid: str = ""
|
|
740
|
+
status: int = 0
|
|
741
|
+
stop_type: int = 0
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
class WecomCSSessionStatusChangedEvent(EBAEvent):
|
|
745
|
+
"""A WeCom customer-service conversation was assigned, transferred or closed."""
|
|
746
|
+
|
|
747
|
+
summary_field: typing.ClassVar[str] = "external_userid"
|
|
748
|
+
type: str = "wecomcs.session_status_change"
|
|
749
|
+
open_kfid: str = ""
|
|
750
|
+
external_userid: str = ""
|
|
751
|
+
chat_id: str = ""
|
|
752
|
+
chat_type: platform_entities.ChatType = platform_entities.ChatType.PRIVATE
|
|
753
|
+
user: typing.Optional[platform_entities.User] = None
|
|
754
|
+
data: dict = pydantic.Field(default_factory=dict)
|
|
755
|
+
change_type: int = 0
|
|
756
|
+
old_servicer_userid: str = ""
|
|
757
|
+
new_servicer_userid: str = ""
|
|
758
|
+
msg_code: str = ""
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
class WecomCSRejectCustomerMessageChangedEvent(EBAEvent):
|
|
762
|
+
"""A representative enabled or disabled rejection of customer messages."""
|
|
763
|
+
|
|
764
|
+
summary_field: typing.ClassVar[str] = "external_userid"
|
|
765
|
+
type: str = "wecomcs.reject_customer_msg_switch_change"
|
|
766
|
+
open_kfid: str = ""
|
|
767
|
+
external_userid: str = ""
|
|
768
|
+
chat_id: str = ""
|
|
769
|
+
chat_type: platform_entities.ChatType = platform_entities.ChatType.PRIVATE
|
|
770
|
+
user: typing.Optional[platform_entities.User] = None
|
|
771
|
+
data: dict = pydantic.Field(default_factory=dict)
|
|
772
|
+
servicer_userid: str = ""
|
|
773
|
+
reject_switch: int = 0
|
|
774
|
+
|
|
775
|
+
|
|
613
776
|
# ---- Message Send Result ----
|
|
614
777
|
|
|
615
778
|
|
|
779
|
+
def event_summary(event: EBAEvent | dict) -> str:
|
|
780
|
+
"""Read only the summary field declared by the event class."""
|
|
781
|
+
if isinstance(event, EBAEvent):
|
|
782
|
+
event_type = event.type
|
|
783
|
+
value = getattr(event, event.summary_field, None)
|
|
784
|
+
else:
|
|
785
|
+
event_type = str(event.get("type") or "event")
|
|
786
|
+
event_class = next(
|
|
787
|
+
(
|
|
788
|
+
cls
|
|
789
|
+
for cls in EBAEvent.__subclasses__()
|
|
790
|
+
if cls.model_fields["type"].default == event_type
|
|
791
|
+
),
|
|
792
|
+
EBAEvent,
|
|
793
|
+
)
|
|
794
|
+
value = event.get(event_class.summary_field)
|
|
795
|
+
|
|
796
|
+
def render(value: typing.Any) -> str:
|
|
797
|
+
if value is None:
|
|
798
|
+
return ""
|
|
799
|
+
if isinstance(value, platform_message.MessageChain):
|
|
800
|
+
return str(value)
|
|
801
|
+
if isinstance(value, pydantic.BaseModel):
|
|
802
|
+
value = value.model_dump(mode="json")
|
|
803
|
+
if isinstance(value, dict):
|
|
804
|
+
if "root" in value:
|
|
805
|
+
return render(value["root"])
|
|
806
|
+
if value.get("type") == "Source":
|
|
807
|
+
return ""
|
|
808
|
+
if value.get("type") in {"Plain", "text"}:
|
|
809
|
+
return str(value.get("text") or "")
|
|
810
|
+
if "type" in value:
|
|
811
|
+
return f"[{value['type']}]"
|
|
812
|
+
return str(
|
|
813
|
+
value.get("nickname") or value.get("name") or value.get("id") or ""
|
|
814
|
+
)
|
|
815
|
+
if isinstance(value, (list, tuple)):
|
|
816
|
+
separator = "" if any(isinstance(item, dict) for item in value) else ", "
|
|
817
|
+
return separator.join(render(item) for item in value)
|
|
818
|
+
return str(value)
|
|
819
|
+
|
|
820
|
+
return render(value).strip() or event_type
|
|
821
|
+
|
|
822
|
+
|
|
616
823
|
def parse_eba_event(data: dict) -> EBAEvent:
|
|
617
824
|
"""Deserialize public EBA event fields without creating plugin-only wrappers."""
|
|
618
825
|
if not isinstance(data, dict) or not isinstance(data.get("type"), str):
|
{langbot_plugin-0.7.9 → langbot_plugin-0.7.11}/src/langbot_plugin/api/proxies/runner/resources.py
RENAMED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from contextlib import aclosing
|
|
6
|
+
|
|
5
7
|
import base64
|
|
6
8
|
from copy import deepcopy
|
|
7
9
|
from typing import Any
|
|
@@ -170,20 +172,23 @@ class AgentRunResourceAPIMixin:
|
|
|
170
172
|
reasoning_level: ReasoningLevel | None = None,
|
|
171
173
|
):
|
|
172
174
|
"""Invoke an LLM model with streaming, permission validation."""
|
|
173
|
-
async
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
175
|
+
async with aclosing(
|
|
176
|
+
self.invoke_llm_stream_events(
|
|
177
|
+
llm_model_uuid=llm_model_uuid,
|
|
178
|
+
messages=messages,
|
|
179
|
+
funcs=funcs,
|
|
180
|
+
extra_args=extra_args,
|
|
181
|
+
**(
|
|
182
|
+
{"reasoning_level": reasoning_level}
|
|
183
|
+
if reasoning_level is not None
|
|
184
|
+
else {}
|
|
185
|
+
),
|
|
186
|
+
remove_think=remove_think,
|
|
187
|
+
)
|
|
188
|
+
) as owned_stream:
|
|
189
|
+
async for event in owned_stream:
|
|
190
|
+
if event.chunk is not None:
|
|
191
|
+
yield event.chunk
|
|
187
192
|
|
|
188
193
|
async def invoke_llm_stream_events(
|
|
189
194
|
self,
|
|
@@ -211,23 +216,26 @@ class AgentRunResourceAPIMixin:
|
|
|
211
216
|
}
|
|
212
217
|
if remove_think is not None:
|
|
213
218
|
payload["remove_think"] = remove_think
|
|
214
|
-
async
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
chunk_data
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
219
|
+
async with aclosing(
|
|
220
|
+
self._api.plugin_runtime_handler.call_action_generator(
|
|
221
|
+
PluginToRuntimeAction.INVOKE_LLM_STREAM,
|
|
222
|
+
payload,
|
|
223
|
+
effective_timeout,
|
|
224
|
+
)
|
|
225
|
+
) as owned_stream:
|
|
226
|
+
async for chunk_data in owned_stream:
|
|
227
|
+
event_data: dict[str, Any] = {}
|
|
228
|
+
if isinstance(chunk_data, dict) and "chunk" in chunk_data:
|
|
229
|
+
event_data["chunk"] = chunk_data["chunk"]
|
|
230
|
+
if isinstance(chunk_data, dict) and "usage" in chunk_data:
|
|
231
|
+
event_data["usage"] = chunk_data["usage"]
|
|
232
|
+
if not event_data:
|
|
233
|
+
event_data["chunk"] = self._expect_key(
|
|
234
|
+
chunk_data,
|
|
235
|
+
"chunk",
|
|
236
|
+
PluginToRuntimeAction.INVOKE_LLM_STREAM,
|
|
237
|
+
)
|
|
238
|
+
yield provider_message.LLMStreamEvent.model_validate(event_data)
|
|
231
239
|
|
|
232
240
|
# ================= Tool APIs (delegated with validation) =================
|
|
233
241
|
|
|
@@ -261,14 +261,15 @@ class CLISandboxBackend(BaseSandboxBackend):
|
|
|
261
261
|
for key, value in spec.env.items():
|
|
262
262
|
args.extend(["-e", f"{key}={value}"])
|
|
263
263
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
264
|
+
command = self._build_exec_command(spec.workdir, spec.cmd)
|
|
265
|
+
# Attachment manifests can exceed Windows CreateProcess limits (and
|
|
266
|
+
# POSIX per-argument limits). Keep large scripts out of argv.
|
|
267
|
+
input_data = None
|
|
268
|
+
if len(command.encode("utf-8")) > 8192:
|
|
269
|
+
args.append("-i")
|
|
270
|
+
input_data = command.encode("utf-8")
|
|
271
|
+
command = 'exec sh -lc "$(cat)"'
|
|
272
|
+
args.extend([session.backend_session_id, "sh", "-lc", command])
|
|
272
273
|
|
|
273
274
|
cmd_preview = spec.cmd.strip()
|
|
274
275
|
if len(cmd_preview) > 400:
|
|
@@ -280,8 +281,9 @@ class CLISandboxBackend(BaseSandboxBackend):
|
|
|
280
281
|
f"env_keys={sorted(spec.env.keys())} cmd={cmd_preview}"
|
|
281
282
|
)
|
|
282
283
|
|
|
284
|
+
run_options = {"input_data": input_data} if input_data is not None else {}
|
|
283
285
|
result = await self._run_command(
|
|
284
|
-
args, timeout_sec=spec.timeout_sec, check=False
|
|
286
|
+
args, timeout_sec=spec.timeout_sec, check=False, **run_options
|
|
285
287
|
)
|
|
286
288
|
duration_ms = int(
|
|
287
289
|
(dt.datetime.now(dt.timezone.utc) - start).total_seconds() * 1000
|
|
@@ -435,18 +437,31 @@ class CLISandboxBackend(BaseSandboxBackend):
|
|
|
435
437
|
args: list[str],
|
|
436
438
|
timeout_sec: int,
|
|
437
439
|
check: bool,
|
|
440
|
+
input_data: bytes | None = None,
|
|
438
441
|
) -> _CommandResult:
|
|
439
442
|
process = await asyncio.create_subprocess_exec(
|
|
440
443
|
*args,
|
|
444
|
+
stdin=asyncio.subprocess.PIPE if input_data is not None else None,
|
|
441
445
|
stdout=asyncio.subprocess.PIPE,
|
|
442
446
|
stderr=asyncio.subprocess.PIPE,
|
|
443
447
|
)
|
|
444
448
|
stdout_task = asyncio.create_task(self._read_stream(process.stdout))
|
|
445
449
|
stderr_task = asyncio.create_task(self._read_stream(process.stderr))
|
|
446
450
|
|
|
451
|
+
async def feed_and_wait():
|
|
452
|
+
if input_data is not None:
|
|
453
|
+
try:
|
|
454
|
+
process.stdin.write(input_data)
|
|
455
|
+
await process.stdin.drain()
|
|
456
|
+
except (BrokenPipeError, ConnectionResetError):
|
|
457
|
+
pass
|
|
458
|
+
finally:
|
|
459
|
+
process.stdin.close()
|
|
460
|
+
await process.wait()
|
|
461
|
+
|
|
447
462
|
timed_out = False
|
|
448
463
|
try:
|
|
449
|
-
await asyncio.wait_for(
|
|
464
|
+
await asyncio.wait_for(feed_and_wait(), timeout=timeout_sec)
|
|
450
465
|
except asyncio.TimeoutError:
|
|
451
466
|
process.kill()
|
|
452
467
|
timed_out = True
|
|
@@ -426,6 +426,16 @@ class BoxProfile(pydantic.BaseModel):
|
|
|
426
426
|
BUILTIN_PROFILES: dict[str, BoxProfile] = {
|
|
427
427
|
"default": BoxProfile(
|
|
428
428
|
name="default",
|
|
429
|
+
network=BoxNetworkMode.ON,
|
|
430
|
+
host_path_mode=BoxHostMountMode.READ_WRITE,
|
|
431
|
+
cpus=1.0,
|
|
432
|
+
memory_mb=512,
|
|
433
|
+
pids_limit=128,
|
|
434
|
+
read_only_rootfs=True,
|
|
435
|
+
max_timeout_sec=120,
|
|
436
|
+
),
|
|
437
|
+
"offline": BoxProfile(
|
|
438
|
+
name="offline",
|
|
429
439
|
network=BoxNetworkMode.OFF,
|
|
430
440
|
host_path_mode=BoxHostMountMode.READ_WRITE,
|
|
431
441
|
cpus=1.0,
|
|
@@ -18,7 +18,7 @@ from langbot_plugin.runtime.io.handler import Handler
|
|
|
18
18
|
from langbot_plugin.api.entities import events
|
|
19
19
|
from langbot_plugin.api.definition.components.base import NoneComponent
|
|
20
20
|
from langbot_plugin.api.definition.components.common.event_listener import EventListener
|
|
21
|
-
from langbot_plugin.entities.io.actions.enums import PluginToRuntimeAction
|
|
21
|
+
from langbot_plugin.entities.io.actions.enums import CommonAction, PluginToRuntimeAction
|
|
22
22
|
from langbot_plugin.entities.io.actions.enums import RuntimeToPluginAction
|
|
23
23
|
from langbot_plugin.entities.io.context import InstallationBinding
|
|
24
24
|
from langbot_plugin.api.proxies.invocation import bind_invocation, thaw_config
|
|
@@ -255,6 +255,10 @@ class PluginRuntimeHandler(Handler):
|
|
|
255
255
|
}
|
|
256
256
|
)
|
|
257
257
|
|
|
258
|
+
@self.action(CommonAction.PING)
|
|
259
|
+
async def ping(data: dict[str, typing.Any]) -> ActionResponse:
|
|
260
|
+
return ActionResponse.success({"alive": True})
|
|
261
|
+
|
|
258
262
|
@self.action(RuntimeToPluginAction.GET_PLUGIN_CONTAINER)
|
|
259
263
|
async def get_plugin_container(data: dict[str, typing.Any]) -> ActionResponse:
|
|
260
264
|
return ActionResponse.success(self.plugin_container.model_dump())
|
|
@@ -804,6 +808,11 @@ class PluginRuntimeHandler(Handler):
|
|
|
804
808
|
|
|
805
809
|
return ActionResponse.success(result.model_dump(mode="json"))
|
|
806
810
|
|
|
811
|
+
def _uses_reserved_admission(self, req_data):
|
|
812
|
+
return req_data.get(
|
|
813
|
+
"action"
|
|
814
|
+
) == CommonAction.PING.value or super()._uses_reserved_admission(req_data)
|
|
815
|
+
|
|
807
816
|
@property
|
|
808
817
|
def plugin_container(self) -> PluginContainer:
|
|
809
818
|
return self._base_plugin_container
|
|
@@ -814,6 +823,9 @@ class PluginRuntimeHandler(Handler):
|
|
|
814
823
|
|
|
815
824
|
@contextlib.contextmanager
|
|
816
825
|
def action_invocation_scope(self, action, action_context):
|
|
826
|
+
if action == CommonAction.PING.value:
|
|
827
|
+
yield
|
|
828
|
+
return
|
|
817
829
|
if not isinstance(action_context, InstallationBinding):
|
|
818
830
|
yield
|
|
819
831
|
return
|