aip-agents-binary 0.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aip_agents/__init__.py +66 -0
- aip_agents/a2a/__init__.py +19 -0
- aip_agents/a2a/server/__init__.py +10 -0
- aip_agents/a2a/server/base_executor.py +1125 -0
- aip_agents/a2a/server/google_adk_executor.py +198 -0
- aip_agents/a2a/server/langflow_executor.py +180 -0
- aip_agents/a2a/server/langgraph_executor.py +270 -0
- aip_agents/a2a/types.py +232 -0
- aip_agents/a2ui/__init__.py +26 -0
- aip_agents/a2ui/catalog_provider.py +109 -0
- aip_agents/a2ui/examples/0.8/booking_form.json +1 -0
- aip_agents/a2ui/examples/0.8/confirmation.json +1 -0
- aip_agents/a2ui/examples/0.8/single_column_list.json +1 -0
- aip_agents/a2ui/examples/0.9/booking_form.json +1 -0
- aip_agents/a2ui/examples/0.9/confirmation.json +1 -0
- aip_agents/a2ui/examples/0.9/single_column_list.json +1 -0
- aip_agents/a2ui/middleware.py +754 -0
- aip_agents/a2ui/models.py +153 -0
- aip_agents/a2ui/public_url.py +138 -0
- aip_agents/a2ui/stream_filter.py +67 -0
- aip_agents/agent/__init__.py +72 -0
- aip_agents/agent/base_agent.py +1437 -0
- aip_agents/agent/base_langgraph_agent.py +4048 -0
- aip_agents/agent/google_adk_agent.py +932 -0
- aip_agents/agent/google_adk_constants.py +11 -0
- aip_agents/agent/graph_runtime.py +185 -0
- aip_agents/agent/hitl/__init__.py +24 -0
- aip_agents/agent/hitl/config.py +28 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
- aip_agents/agent/hitl/manager.py +532 -0
- aip_agents/agent/hitl/models.py +18 -0
- aip_agents/agent/hitl/prompt/__init__.py +9 -0
- aip_agents/agent/hitl/prompt/base.py +42 -0
- aip_agents/agent/hitl/prompt/deferred.py +73 -0
- aip_agents/agent/hitl/registry.py +149 -0
- aip_agents/agent/interface.py +138 -0
- aip_agents/agent/interfaces.py +65 -0
- aip_agents/agent/langflow_agent.py +464 -0
- aip_agents/agent/langgraph_react_agent.py +3741 -0
- aip_agents/agent/model_invocation_adapter.py +346 -0
- aip_agents/agent/system_instruction_context.py +34 -0
- aip_agents/agent/tool_execution_engine.py +587 -0
- aip_agents/audio_interface/__init__.py +30 -0
- aip_agents/audio_interface/audio_agent_adapter.py +254 -0
- aip_agents/audio_interface/config.py +146 -0
- aip_agents/audio_interface/errors.py +15 -0
- aip_agents/audio_interface/livekit_audio_session.py +504 -0
- aip_agents/audio_interface/livekit_realtime_audio_session.py +142 -0
- aip_agents/audio_interface/session_factory.py +40 -0
- aip_agents/clients/__init__.py +10 -0
- aip_agents/clients/langflow/__init__.py +10 -0
- aip_agents/clients/langflow/client.py +477 -0
- aip_agents/clients/langflow/types.py +18 -0
- aip_agents/common/__init__.py +5 -0
- aip_agents/common/callable_introspection.py +17 -0
- aip_agents/constants.py +23 -0
- aip_agents/context/__init__.py +5 -0
- aip_agents/context/budget.py +237 -0
- aip_agents/context/compaction.py +339 -0
- aip_agents/context/metadata.py +169 -0
- aip_agents/context/offload.py +449 -0
- aip_agents/context/preparation.py +196 -0
- aip_agents/context/prompt.py +61 -0
- aip_agents/context/runtime.py +149 -0
- aip_agents/context/session_recall.py +69 -0
- aip_agents/context/state.py +48 -0
- aip_agents/context/utils.py +44 -0
- aip_agents/credentials/manager.py +132 -0
- aip_agents/examples/__init__.py +5 -0
- aip_agents/examples/audio_livekit_session.py +116 -0
- aip_agents/examples/compare_streaming_client.py +783 -0
- aip_agents/examples/compare_streaming_server.py +141 -0
- aip_agents/examples/gl_connectors_smoke.py +148 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.py +78 -0
- aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.py +104 -0
- aip_agents/examples/hello_world_a2a_langchain_server.py +78 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +77 -0
- aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
- aip_agents/examples/hello_world_a2a_langflow_server.py +80 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +91 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.py +83 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +78 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +131 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +250 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +79 -0
- aip_agents/examples/hello_world_filesystem.py +162 -0
- aip_agents/examples/hello_world_google_adk.py +41 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
- aip_agents/examples/hello_world_google_adk_stream.py +44 -0
- aip_agents/examples/hello_world_langchain.py +28 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
- aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
- aip_agents/examples/hello_world_langchain_stream.py +36 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
- aip_agents/examples/hello_world_langflow_agent.py +163 -0
- aip_agents/examples/hello_world_langgraph.py +39 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
- aip_agents/examples/hello_world_langgraph_skills.py +62 -0
- aip_agents/examples/hello_world_langgraph_stream.py +43 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
- aip_agents/examples/hello_world_model_switch_cli.py +210 -0
- aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
- aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
- aip_agents/examples/hello_world_multi_agent_tool_output_client.py +57 -0
- aip_agents/examples/hello_world_multi_agent_tool_output_server.py +131 -0
- aip_agents/examples/hello_world_pii_logger.py +21 -0
- aip_agents/examples/hello_world_ptc.py +49 -0
- aip_agents/examples/hello_world_ptc_custom_tools.py +83 -0
- aip_agents/examples/hello_world_sentry.py +133 -0
- aip_agents/examples/hello_world_step_limits.py +273 -0
- aip_agents/examples/hello_world_stock_a2a_server.py +100 -0
- aip_agents/examples/hello_world_tool_output_client.py +55 -0
- aip_agents/examples/hello_world_tool_output_server.py +113 -0
- aip_agents/examples/hitl_demo.py +724 -0
- aip_agents/examples/mcp_configs/configs.py +63 -0
- aip_agents/examples/mcp_servers/common.py +76 -0
- aip_agents/examples/mcp_servers/mcp_name.py +29 -0
- aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
- aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
- aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
- aip_agents/examples/mcp_servers/mcp_time.py +10 -0
- aip_agents/examples/pii_demo_langgraph_client.py +69 -0
- aip_agents/examples/pii_demo_langgraph_server.py +125 -0
- aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
- aip_agents/examples/pii_demo_multi_agent_server.py +246 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.py +87 -0
- aip_agents/examples/tools/__init__.py +27 -0
- aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
- aip_agents/examples/tools/adk_weather_tool.py +60 -0
- aip_agents/examples/tools/data_generator_tool.py +103 -0
- aip_agents/examples/tools/data_visualization_tool.py +312 -0
- aip_agents/examples/tools/image_artifact_tool.py +136 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
- aip_agents/examples/tools/langchain_weather_tool.py +48 -0
- aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
- aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
- aip_agents/examples/tools/multiply_tool.py +43 -0
- aip_agents/examples/tools/pii_demo_tools.py +189 -0
- aip_agents/examples/tools/random_chart_tool.py +142 -0
- aip_agents/examples/tools/serper_tool.py +202 -0
- aip_agents/examples/tools/stock_tools.py +82 -0
- aip_agents/examples/tools/table_generator_tool.py +167 -0
- aip_agents/examples/tools/time_tool.py +82 -0
- aip_agents/examples/tools/weather_forecast_tool.py +38 -0
- aip_agents/guardrails/__init__.py +83 -0
- aip_agents/guardrails/engines/__init__.py +69 -0
- aip_agents/guardrails/engines/base.py +90 -0
- aip_agents/guardrails/engines/nemo.py +101 -0
- aip_agents/guardrails/engines/phrase_matcher.py +113 -0
- aip_agents/guardrails/exceptions.py +39 -0
- aip_agents/guardrails/manager.py +163 -0
- aip_agents/guardrails/middleware.py +199 -0
- aip_agents/guardrails/schemas.py +63 -0
- aip_agents/guardrails/utils.py +45 -0
- aip_agents/integration/__init__.py +43 -0
- aip_agents/integration/agent.py +58 -0
- aip_agents/integration/guardrails.py +52 -0
- aip_agents/integration/hitl.py +71 -0
- aip_agents/integration/ptc.py +95 -0
- aip_agents/integration/skills.py +37 -0
- aip_agents/integration/storage.py +81 -0
- aip_agents/integration/version.py +103 -0
- aip_agents/mcp/__init__.py +1 -0
- aip_agents/mcp/client/__init__.py +60 -0
- aip_agents/mcp/client/base_mcp_client.py +377 -0
- aip_agents/mcp/client/connection_manager.py +231 -0
- aip_agents/mcp/client/errors.py +119 -0
- aip_agents/mcp/client/google_adk/__init__.py +45 -0
- aip_agents/mcp/client/google_adk/client.py +383 -0
- aip_agents/mcp/client/langchain/__init__.py +11 -0
- aip_agents/mcp/client/langchain/client.py +265 -0
- aip_agents/mcp/client/persistent_session.py +704 -0
- aip_agents/mcp/client/session_pool.py +358 -0
- aip_agents/mcp/client/transports.py +288 -0
- aip_agents/mcp/utils/__init__.py +7 -0
- aip_agents/mcp/utils/config_validator.py +139 -0
- aip_agents/memory/__init__.py +14 -0
- aip_agents/memory/adapters/__init__.py +10 -0
- aip_agents/memory/adapters/base_adapter.py +815 -0
- aip_agents/memory/adapters/mem0.py +286 -0
- aip_agents/memory/base.py +84 -0
- aip_agents/memory/constants.py +49 -0
- aip_agents/memory/factory.py +86 -0
- aip_agents/memory/guidance.py +20 -0
- aip_agents/memory/simple_memory.py +47 -0
- aip_agents/middleware/__init__.py +65 -0
- aip_agents/middleware/backends/__init__.py +72 -0
- aip_agents/middleware/backends/in_memory.py +578 -0
- aip_agents/middleware/backends/local_disk.py +1203 -0
- aip_agents/middleware/backends/protocol.py +353 -0
- aip_agents/middleware/backends/sandbox.py +1431 -0
- aip_agents/middleware/backends/sandbox_files.py +113 -0
- aip_agents/middleware/backends/utils.py +293 -0
- aip_agents/middleware/base.py +239 -0
- aip_agents/middleware/filesystem.py +690 -0
- aip_agents/middleware/manager.py +291 -0
- aip_agents/middleware/memory.py +532 -0
- aip_agents/middleware/pii_middleware.py +192 -0
- aip_agents/middleware/schema.py +19 -0
- aip_agents/middleware/skills.py +872 -0
- aip_agents/middleware/task_delegation.py +1656 -0
- aip_agents/middleware/todolist.py +276 -0
- aip_agents/middleware/tools/__init__.py +23 -0
- aip_agents/middleware/tools/edit_file.py +70 -0
- aip_agents/middleware/tools/execute.py +428 -0
- aip_agents/middleware/tools/grep_file.py +79 -0
- aip_agents/middleware/tools/ls.py +71 -0
- aip_agents/middleware/tools/read_file.py +239 -0
- aip_agents/middleware/tools/skill_load.py +193 -0
- aip_agents/middleware/tools/skill_resource.py +338 -0
- aip_agents/middleware/tools/write_file.py +114 -0
- aip_agents/middleware/vision.py +322 -0
- aip_agents/ptc/__init__.py +87 -0
- aip_agents/ptc/custom_tools.py +511 -0
- aip_agents/ptc/custom_tools_payload.py +499 -0
- aip_agents/ptc/custom_tools_templates/__init__.py +1 -0
- aip_agents/ptc/custom_tools_templates/custom_build_function.py.template +24 -0
- aip_agents/ptc/custom_tools_templates/custom_init.py.template +26 -0
- aip_agents/ptc/custom_tools_templates/custom_invoke.py.template +149 -0
- aip_agents/ptc/custom_tools_templates/custom_registry.py.template +112 -0
- aip_agents/ptc/custom_tools_templates/custom_sources_init.py.template +7 -0
- aip_agents/ptc/custom_tools_templates/custom_wrapper.py.template +87 -0
- aip_agents/ptc/doc_gen.py +122 -0
- aip_agents/ptc/exceptions.py +57 -0
- aip_agents/ptc/executor.py +627 -0
- aip_agents/ptc/mcp/__init__.py +45 -0
- aip_agents/ptc/mcp/sandbox_bridge.py +679 -0
- aip_agents/ptc/mcp/templates/__init__.py +1 -0
- aip_agents/ptc/mcp/templates/mcp_client.py.template +240 -0
- aip_agents/ptc/naming.py +430 -0
- aip_agents/ptc/payload.py +26 -0
- aip_agents/ptc/prompt_builder.py +674 -0
- aip_agents/ptc/ptc_helper.py +16 -0
- aip_agents/ptc/sandbox_bridge.py +297 -0
- aip_agents/ptc/template_utils.py +33 -0
- aip_agents/ptc/templates/__init__.py +1 -0
- aip_agents/ptc/templates/ptc_helper.py.template +134 -0
- aip_agents/ptc/tool_def_helpers.py +101 -0
- aip_agents/ptc/tool_enrichment.py +163 -0
- aip_agents/resilience/__init__.py +10 -0
- aip_agents/resilience/base.py +46 -0
- aip_agents/resilience/tool.py +1661 -0
- aip_agents/sandbox/__init__.py +62 -0
- aip_agents/sandbox/defaults.py +220 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-1-datasaur.Dockerfile +120 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-1.Dockerfile +100 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-2-datasaur.Dockerfile +143 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-2.Dockerfile +119 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-3-datasaur.Dockerfile +173 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-3.Dockerfile +130 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.Dockerfile +164 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.patch_js_context.py +41 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.requirements.txt +29 -0
- aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2.Dockerfile +87 -0
- aip_agents/sandbox/e2b_runtime.py +27 -0
- aip_agents/sandbox/image_registry.py +98 -0
- aip_agents/sandbox/providers/__init__.py +76 -0
- aip_agents/sandbox/providers/base.py +392 -0
- aip_agents/sandbox/providers/bedrock.py +28 -0
- aip_agents/sandbox/providers/e2b.py +230 -0
- aip_agents/sandbox/providers/opensandbox.py +163 -0
- aip_agents/sandbox/sandbox_runtime.py +967 -0
- aip_agents/sandbox/template_builder.py +240 -0
- aip_agents/sandbox/types.py +141 -0
- aip_agents/sandbox/validation.py +50 -0
- aip_agents/schema/__init__.py +106 -0
- aip_agents/schema/a2a.py +58 -0
- aip_agents/schema/agent.py +117 -0
- aip_agents/schema/artifacts.py +75 -0
- aip_agents/schema/attachments.py +425 -0
- aip_agents/schema/hitl.py +157 -0
- aip_agents/schema/langgraph.py +47 -0
- aip_agents/schema/model_id.py +103 -0
- aip_agents/schema/model_usage.py +50 -0
- aip_agents/schema/runtime_metadata.py +78 -0
- aip_agents/schema/step_limit.py +108 -0
- aip_agents/schema/storage.py +40 -0
- aip_agents/schema/tool_payloads.py +68 -0
- aip_agents/sentry/__init__.py +11 -0
- aip_agents/sentry/sentry.py +267 -0
- aip_agents/skills/__init__.py +30 -0
- aip_agents/skills/errors.py +110 -0
- aip_agents/skills/installer.py +479 -0
- aip_agents/skills/models.py +769 -0
- aip_agents/skills/stager.py +224 -0
- aip_agents/skills/validation.py +53 -0
- aip_agents/storage/__init__.py +41 -0
- aip_agents/storage/base.py +85 -0
- aip_agents/storage/clients/__init__.py +12 -0
- aip_agents/storage/clients/minio_client.py +318 -0
- aip_agents/storage/config.py +62 -0
- aip_agents/storage/providers/__init__.py +15 -0
- aip_agents/storage/providers/base.py +106 -0
- aip_agents/storage/providers/memory.py +114 -0
- aip_agents/storage/providers/object_storage.py +214 -0
- aip_agents/tools/__init__.py +65 -0
- aip_agents/tools/agent_schedule_tool.py +392 -0
- aip_agents/tools/browser_use/__init__.py +83 -0
- aip_agents/tools/browser_use/action_parser.py +104 -0
- aip_agents/tools/browser_use/browser_use_tool.py +1118 -0
- aip_agents/tools/browser_use/llm_config.py +120 -0
- aip_agents/tools/browser_use/minio_storage.py +203 -0
- aip_agents/tools/browser_use/schemas.py +121 -0
- aip_agents/tools/browser_use/session.py +13 -0
- aip_agents/tools/browser_use/session_errors.py +132 -0
- aip_agents/tools/browser_use/steel_session_recording.py +321 -0
- aip_agents/tools/browser_use/streaming.py +263 -0
- aip_agents/tools/browser_use/structured_data_parser.py +257 -0
- aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
- aip_agents/tools/browser_use/types.py +37 -0
- aip_agents/tools/code_sandbox/__init__.py +48 -0
- aip_agents/tools/code_sandbox/code_sandbox_tool.py +350 -0
- aip_agents/tools/code_sandbox/constant.py +13 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +346 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +65 -0
- aip_agents/tools/computer_use/__init__.py +75 -0
- aip_agents/tools/computer_use/computer_use_tool.py +910 -0
- aip_agents/tools/computer_use/schemas.py +78 -0
- aip_agents/tools/computer_use/streaming.py +198 -0
- aip_agents/tools/computer_use/types.py +32 -0
- aip_agents/tools/constants.py +177 -0
- aip_agents/tools/date_range_tool.py +554 -0
- aip_agents/tools/document_loader/__init__.py +44 -0
- aip_agents/tools/document_loader/base_reader.py +302 -0
- aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
- aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
- aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
- aip_agents/tools/document_loader/pdf_splitter.py +169 -0
- aip_agents/tools/execute_ptc_code.py +582 -0
- aip_agents/tools/gl_connector/__init__.py +5 -0
- aip_agents/tools/gl_connector/tool.py +518 -0
- aip_agents/tools/gl_connector_tools.py +170 -0
- aip_agents/tools/memory_search/__init__.py +29 -0
- aip_agents/tools/memory_search/base.py +213 -0
- aip_agents/tools/memory_search/mem0.py +424 -0
- aip_agents/tools/memory_search/schema.py +81 -0
- aip_agents/tools/memory_search_tool.py +34 -0
- aip_agents/tools/streaming_common.py +577 -0
- aip_agents/tools/time_tool.py +117 -0
- aip_agents/tools/tool_config_injector.py +300 -0
- aip_agents/tools/web_search/__init__.py +15 -0
- aip_agents/tools/web_search/serper_tool.py +187 -0
- aip_agents/types/__init__.py +73 -0
- aip_agents/types/a2a_events.py +13 -0
- aip_agents/utils/__init__.py +91 -0
- aip_agents/utils/a2a_connector.py +1758 -0
- aip_agents/utils/artifact_helpers.py +542 -0
- aip_agents/utils/artifacts/__init__.py +20 -0
- aip_agents/utils/artifacts/tracker.py +367 -0
- aip_agents/utils/attachment_helpers.py +178 -0
- aip_agents/utils/constants.py +22 -0
- aip_agents/utils/datetime/__init__.py +34 -0
- aip_agents/utils/datetime/normalization.py +231 -0
- aip_agents/utils/datetime/timezone.py +206 -0
- aip_agents/utils/env_loader.py +27 -0
- aip_agents/utils/event_handler_registry.py +58 -0
- aip_agents/utils/file_prompt_utils.py +276 -0
- aip_agents/utils/file_watchers/__init__.py +33 -0
- aip_agents/utils/file_watchers/base.py +46 -0
- aip_agents/utils/file_watchers/e2b.py +128 -0
- aip_agents/utils/file_watchers/factory.py +39 -0
- aip_agents/utils/file_watchers/ls_diff.py +88 -0
- aip_agents/utils/file_watchers/sandbox.py +66 -0
- aip_agents/utils/file_watchers/watchdog.py +97 -0
- aip_agents/utils/final_response_builder.py +211 -0
- aip_agents/utils/formatter_llm_client.py +258 -0
- aip_agents/utils/langgraph/__init__.py +19 -0
- aip_agents/utils/langgraph/converter.py +399 -0
- aip_agents/utils/langgraph/delegation_context.py +22 -0
- aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1329 -0
- aip_agents/utils/langgraph/tool_output_management.py +1047 -0
- aip_agents/utils/logger.py +195 -0
- aip_agents/utils/metadata/__init__.py +27 -0
- aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
- aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
- aip_agents/utils/metadata/activity_narrative/builder.py +822 -0
- aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
- aip_agents/utils/metadata/activity_narrative/context.py +49 -0
- aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
- aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
- aip_agents/utils/metadata/schemas/__init__.py +16 -0
- aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
- aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
- aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
- aip_agents/utils/metadata_helper.py +363 -0
- aip_agents/utils/name_preprocessor/__init__.py +17 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
- aip_agents/utils/pii/__init__.py +29 -0
- aip_agents/utils/pii/pii_handler.py +555 -0
- aip_agents/utils/pii/pii_helper.py +225 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
- aip_agents/utils/reference_helper.py +273 -0
- aip_agents/utils/sse_chunk_transformer.py +836 -0
- aip_agents/utils/step_limit_manager.py +265 -0
- aip_agents/utils/token_usage_helper.py +531 -0
- aip_agents_binary-0.0.0.dist-info/METADATA +825 -0
- aip_agents_binary-0.0.0.dist-info/RECORD +447 -0
- aip_agents_binary-0.0.0.dist-info/WHEEL +5 -0
- aip_agents_binary-0.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# KNOWN ISSUES — superseded by aip-agents-sandbox-v2-3
|
|
2
|
+
#
|
|
3
|
+
# 1. All install steps share a single monolithic RUN layer. E2B builder has no
|
|
4
|
+
# per-step cache, so any timeout fails the entire build with no useful
|
|
5
|
+
# diagnostic.
|
|
6
|
+
#
|
|
7
|
+
# 2. The native AIP runtime install does not pin the OpenTelemetry
|
|
8
|
+
# instrumentation packages. gl-connectors-sdk / gllm-inference-binary pull
|
|
9
|
+
# in gl-observability, which declares broad OTel version ranges. pip
|
|
10
|
+
# backtracks through many candidates (especially
|
|
11
|
+
# opentelemetry-instrumentation-google-generativeai), consistently hitting
|
|
12
|
+
# the E2B builder deadline and leaving the template in error state.
|
|
13
|
+
#
|
|
14
|
+
# Do not modify or re-use this file. See v2-3 for the fixed version.
|
|
15
|
+
FROM python:3.12
|
|
16
|
+
|
|
17
|
+
USER root
|
|
18
|
+
WORKDIR /root
|
|
19
|
+
|
|
20
|
+
ENV JUPYTER_CONFIG_PATH=/root/.jupyter \
|
|
21
|
+
IPYTHON_CONFIG_PATH=/root/.ipython \
|
|
22
|
+
SERVER_PATH=/root/.server
|
|
23
|
+
|
|
24
|
+
RUN : "1) Install base OS deps + signed NodeSource repo + nodejs" && \
|
|
25
|
+
apt-get update && \
|
|
26
|
+
DEBIAN_FRONTEND=noninteractive DEBCONF_NOWARNINGS=yes \
|
|
27
|
+
apt-get install -y --no-install-recommends \
|
|
28
|
+
build-essential \
|
|
29
|
+
ca-certificates \
|
|
30
|
+
curl \
|
|
31
|
+
fonts-noto-cjk \
|
|
32
|
+
git \
|
|
33
|
+
gnupg \
|
|
34
|
+
jq \
|
|
35
|
+
libcairo2-dev \
|
|
36
|
+
libgirepository1.0-dev \
|
|
37
|
+
pkg-config \
|
|
38
|
+
python3-dev \
|
|
39
|
+
ripgrep \
|
|
40
|
+
sudo \
|
|
41
|
+
util-linux && \
|
|
42
|
+
mkdir -p /etc/apt/keyrings && \
|
|
43
|
+
curl --proto '=https' --tlsv1.2 -fsSL \
|
|
44
|
+
-o /etc/apt/keyrings/nodesource.asc \
|
|
45
|
+
https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key && \
|
|
46
|
+
gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg /etc/apt/keyrings/nodesource.asc && \
|
|
47
|
+
chmod 644 /etc/apt/keyrings/nodesource.gpg && \
|
|
48
|
+
rm -f /etc/apt/keyrings/nodesource.asc && \
|
|
49
|
+
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \
|
|
50
|
+
apt-get update && \
|
|
51
|
+
DEBIAN_FRONTEND=noninteractive DEBCONF_NOWARNINGS=yes \
|
|
52
|
+
apt-get install -y --no-install-recommends nodejs && \
|
|
53
|
+
rm -rf /var/lib/apt/lists/* && \
|
|
54
|
+
: "" && \
|
|
55
|
+
: "2) Bootstrap code-interpreter template files" && \
|
|
56
|
+
git clone --depth 1 --branch "@e2b/code-interpreter-template@0.2.1" \
|
|
57
|
+
https://github.com/e2b-dev/code-interpreter /tmp/code-interpreter-template && \
|
|
58
|
+
cp /tmp/code-interpreter-template/template/requirements.txt /root/requirements.txt && \
|
|
59
|
+
cp -r /tmp/code-interpreter-template/template/server /root/.server && \
|
|
60
|
+
mkdir -p /root/.config/matplotlib /root/.jupyter /root/.ipython/profile_default/startup && \
|
|
61
|
+
cp /tmp/code-interpreter-template/template/matplotlibrc /root/.config/matplotlib/.matplotlibrc && \
|
|
62
|
+
cp /tmp/code-interpreter-template/template/start-up.sh /root/.jupyter/start-up.sh && \
|
|
63
|
+
cp /tmp/code-interpreter-template/template/jupyter_server_config.py /root/.jupyter/ && \
|
|
64
|
+
cp /tmp/code-interpreter-template/template/ipython_kernel_config.py /root/.ipython/profile_default/ && \
|
|
65
|
+
cp -r /tmp/code-interpreter-template/template/startup_scripts /root/.ipython/profile_default/startup && \
|
|
66
|
+
rm -rf /tmp/code-interpreter-template && \
|
|
67
|
+
: "" && \
|
|
68
|
+
: "3) Install Python/Node runtimes and patch server timeout" && \
|
|
69
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
70
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
71
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: "torch==2.5.1+cpu" && \
|
|
72
|
+
echo "torch==2.5.1+cpu" > /tmp/constraints.txt && \
|
|
73
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
74
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
75
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: -c /tmp/constraints.txt -r requirements.txt && \
|
|
76
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
77
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
78
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: \
|
|
79
|
+
"aip-agents-binary[local]~=0.6.62" \
|
|
80
|
+
"httpx==0.28.1" \
|
|
81
|
+
"mcp==1.25.0" && \
|
|
82
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: --quiet \
|
|
83
|
+
"gl-connectors-sdk==0.1.5" \
|
|
84
|
+
"gllm-inference-binary==0.6.42" \
|
|
85
|
+
"markdown2==2.5.5" \
|
|
86
|
+
"weasyprint==68.1" && \
|
|
87
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: "bash_kernel==0.10.0" && \
|
|
88
|
+
ipython kernel install --name "python3" --user && \
|
|
89
|
+
python -m bash_kernel.install --user && \
|
|
90
|
+
# Pinned to latest commit as of 2026-05-20 (no semver tags exist in this repo).
|
|
91
|
+
# Commit hash avoids SonarCloud SCA "unresolved dependency version" warning.
|
|
92
|
+
npm install -g --ignore-scripts git+https://github.com/e2b-dev/ijavascript.git#79cb7d56dcfe0df9ff55eff0ca4dc920a6dcc361 && \
|
|
93
|
+
npm rebuild -g && \
|
|
94
|
+
ijsinstall --install=global && \
|
|
95
|
+
sed -i \
|
|
96
|
+
"s/client = httpx.AsyncClient()/client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))/" \
|
|
97
|
+
/root/.server/main.py && \
|
|
98
|
+
grep -q \
|
|
99
|
+
"client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))" \
|
|
100
|
+
/root/.server/main.py && \
|
|
101
|
+
python -m venv .server/.venv && \
|
|
102
|
+
# Do NOT add --only-binary :all: here. The server's requirements.txt may include
|
|
103
|
+
# packages that require compilation (e.g. C extensions). --only-binary silently
|
|
104
|
+
# skips them, leaving the venv incomplete. uvicorn then fails to start on port
|
|
105
|
+
# 49999 at sandbox boot, causing the "port not open" error in E2B sandboxes.
|
|
106
|
+
.server/.venv/bin/pip install --no-cache-dir -r .server/requirements.txt && \
|
|
107
|
+
chmod +x .jupyter/start-up.sh && \
|
|
108
|
+
: "" && \
|
|
109
|
+
: "4) Create runtime user and sudo policy" && \
|
|
110
|
+
(id -u user >/dev/null 2>&1 || useradd -m user) && \
|
|
111
|
+
mkdir -p /home/user && \
|
|
112
|
+
chown -R user:user /home/user && \
|
|
113
|
+
(grep -q "^user ALL=(ALL) NOPASSWD: ALL$" /etc/sudoers || \
|
|
114
|
+
echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers)
|
|
115
|
+
|
|
116
|
+
USER user
|
|
117
|
+
WORKDIR /home/user
|
|
118
|
+
|
|
119
|
+
ENTRYPOINT ["sudo", "/root/.jupyter/start-up.sh"]
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
FROM python:3.12
|
|
2
|
+
|
|
3
|
+
USER root
|
|
4
|
+
WORKDIR /root
|
|
5
|
+
|
|
6
|
+
ENV JUPYTER_CONFIG_PATH=/root/.jupyter \
|
|
7
|
+
IPYTHON_CONFIG_PATH=/root/.ipython \
|
|
8
|
+
SERVER_PATH=/root/.server \
|
|
9
|
+
BUN_VERSION=1.1.38
|
|
10
|
+
|
|
11
|
+
# NOSONAR - intentional split: separate RUN layers preserve E2B build cache between steps
|
|
12
|
+
RUN : "1) Install base OS deps + signed NodeSource repo + nodejs" && \
|
|
13
|
+
apt-get update && \
|
|
14
|
+
DEBIAN_FRONTEND=noninteractive DEBCONF_NOWARNINGS=yes \
|
|
15
|
+
apt-get install -y --no-install-recommends \
|
|
16
|
+
build-essential \
|
|
17
|
+
ca-certificates \
|
|
18
|
+
curl \
|
|
19
|
+
fonts-noto-cjk \
|
|
20
|
+
git \
|
|
21
|
+
gnupg \
|
|
22
|
+
jq \
|
|
23
|
+
libcairo2-dev \
|
|
24
|
+
libgirepository1.0-dev \
|
|
25
|
+
pkg-config \
|
|
26
|
+
python3-dev \
|
|
27
|
+
ripgrep \
|
|
28
|
+
sudo \
|
|
29
|
+
util-linux && \
|
|
30
|
+
mkdir -p /etc/apt/keyrings && \
|
|
31
|
+
curl --proto '=https' --tlsv1.2 -fsSL \
|
|
32
|
+
-o /etc/apt/keyrings/nodesource.asc \
|
|
33
|
+
https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key && \
|
|
34
|
+
gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg /etc/apt/keyrings/nodesource.asc && \
|
|
35
|
+
chmod 644 /etc/apt/keyrings/nodesource.gpg && \
|
|
36
|
+
rm -f /etc/apt/keyrings/nodesource.asc && \
|
|
37
|
+
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \
|
|
38
|
+
apt-get update && \
|
|
39
|
+
DEBIAN_FRONTEND=noninteractive DEBCONF_NOWARNINGS=yes \
|
|
40
|
+
apt-get install -y --no-install-recommends nodejs && \
|
|
41
|
+
rm -rf /var/lib/apt/lists/*
|
|
42
|
+
|
|
43
|
+
RUN : "2) Bootstrap code-interpreter template files" && \
|
|
44
|
+
git clone --depth 1 --branch "@e2b/code-interpreter-template@0.2.1" \
|
|
45
|
+
https://github.com/e2b-dev/code-interpreter /tmp/code-interpreter-template && \
|
|
46
|
+
cp /tmp/code-interpreter-template/template/requirements.txt /root/requirements.txt && \
|
|
47
|
+
cp -r /tmp/code-interpreter-template/template/server /root/.server && \
|
|
48
|
+
mkdir -p /root/.config/matplotlib /root/.jupyter /root/.ipython/profile_default/startup && \
|
|
49
|
+
cp /tmp/code-interpreter-template/template/matplotlibrc /root/.config/matplotlib/.matplotlibrc && \
|
|
50
|
+
cp /tmp/code-interpreter-template/template/start-up.sh /root/.jupyter/start-up.sh && \
|
|
51
|
+
cp /tmp/code-interpreter-template/template/jupyter_server_config.py /root/.jupyter/ && \
|
|
52
|
+
cp /tmp/code-interpreter-template/template/ipython_kernel_config.py /root/.ipython/profile_default/ && \
|
|
53
|
+
cp -r /tmp/code-interpreter-template/template/startup_scripts /root/.ipython/profile_default/startup && \
|
|
54
|
+
rm -rf /tmp/code-interpreter-template
|
|
55
|
+
|
|
56
|
+
RUN : "3) Install torch constraint" && \
|
|
57
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
58
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
59
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: "torch==2.5.1+cpu" && \
|
|
60
|
+
echo "torch==2.5.1+cpu" > /tmp/constraints.txt
|
|
61
|
+
|
|
62
|
+
RUN : "4) Install code-interpreter Python requirements" && \
|
|
63
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
64
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
65
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: -c /tmp/constraints.txt -r requirements.txt
|
|
66
|
+
|
|
67
|
+
RUN : "5) Install native AIP runtime packages" && \
|
|
68
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
69
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
70
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: \
|
|
71
|
+
"aip-agents-binary[local]==0.6.92" \
|
|
72
|
+
"boto3==1.40.61" \
|
|
73
|
+
"httpx==0.28.1" \
|
|
74
|
+
"mcp==1.25.0" \
|
|
75
|
+
"opentelemetry-instrumentation==0.60b1" \
|
|
76
|
+
"opentelemetry-instrumentation-anthropic==0.53.3" \
|
|
77
|
+
"opentelemetry-instrumentation-bedrock==0.53.3" \
|
|
78
|
+
"opentelemetry-instrumentation-fastapi==0.60b1" \
|
|
79
|
+
"opentelemetry-instrumentation-google-generativeai==0.53.3" \
|
|
80
|
+
"opentelemetry-instrumentation-httpx==0.60b1" \
|
|
81
|
+
"opentelemetry-instrumentation-langchain==0.52.6" \
|
|
82
|
+
"opentelemetry-instrumentation-logging==0.60b1" \
|
|
83
|
+
"opentelemetry-instrumentation-openai==0.53.3" \
|
|
84
|
+
"opentelemetry-instrumentation-requests==0.60b1" \
|
|
85
|
+
"opentelemetry-semantic-conventions==0.60b1" \
|
|
86
|
+
"opentelemetry-semantic-conventions-ai==0.4.16"
|
|
87
|
+
|
|
88
|
+
RUN : "6) Install reporting/runtime extras" && \
|
|
89
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: --quiet \
|
|
90
|
+
"gl-connectors-sdk==0.1.5" \
|
|
91
|
+
"gllm-inference-binary==0.6.42" \
|
|
92
|
+
"markdown2==2.5.5" \
|
|
93
|
+
"weasyprint==68.1"
|
|
94
|
+
|
|
95
|
+
RUN : "7) Install Jupyter/bash kernels" && \
|
|
96
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: "bash_kernel==0.10.0" && \
|
|
97
|
+
ipython kernel install --name "python3" --user && \
|
|
98
|
+
python -m bash_kernel.install --user
|
|
99
|
+
|
|
100
|
+
RUN : "8) Install ijavascript kernel" && \
|
|
101
|
+
# Pinned to latest commit as of 2026-05-20 (no semver tags exist in this repo).
|
|
102
|
+
# Commit hash avoids SonarCloud SCA "unresolved dependency version" warning.
|
|
103
|
+
npm install -g --ignore-scripts git+https://github.com/e2b-dev/ijavascript.git#79cb7d56dcfe0df9ff55eff0ca4dc920a6dcc361 && \
|
|
104
|
+
npm rebuild -g && \
|
|
105
|
+
ijsinstall --install=global
|
|
106
|
+
|
|
107
|
+
RUN : "9) Patch server timeout and install server env" && \
|
|
108
|
+
sed -i \
|
|
109
|
+
"s/client = httpx.AsyncClient()/client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))/" \
|
|
110
|
+
/root/.server/main.py && \
|
|
111
|
+
grep -q \
|
|
112
|
+
"client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))" \
|
|
113
|
+
/root/.server/main.py && \
|
|
114
|
+
python -m venv .server/.venv && \
|
|
115
|
+
# Do NOT add --only-binary :all: here. The server's requirements.txt may include
|
|
116
|
+
# packages that require compilation (e.g. C extensions). --only-binary silently
|
|
117
|
+
# skips them, leaving the venv incomplete. uvicorn then fails to start on port
|
|
118
|
+
# 49999 at sandbox boot, causing the "port not open" error in E2B sandboxes.
|
|
119
|
+
.server/.venv/bin/pip install --no-cache-dir -r .server/requirements.txt && \
|
|
120
|
+
chmod +x .jupyter/start-up.sh
|
|
121
|
+
|
|
122
|
+
RUN : "10) Install Datasaur runtime dependencies" && \
|
|
123
|
+
apt-get update && \
|
|
124
|
+
apt-get install -y --no-install-recommends unzip && \
|
|
125
|
+
mkdir -p /etc/apt/keyrings && \
|
|
126
|
+
curl --proto '=https' --tlsv1.2 -fsSL \
|
|
127
|
+
-o /tmp/githubcli-archive-keyring.gpg \
|
|
128
|
+
https://cli.github.com/packages/githubcli-archive-keyring.gpg && \
|
|
129
|
+
gpg --dearmor -o /etc/apt/keyrings/githubcli-archive-keyring.gpg \
|
|
130
|
+
/tmp/githubcli-archive-keyring.gpg && \
|
|
131
|
+
rm -f /tmp/githubcli-archive-keyring.gpg && \
|
|
132
|
+
chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg && \
|
|
133
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
|
|
134
|
+
> /etc/apt/sources.list.d/github-cli.list && \
|
|
135
|
+
apt-get update && \
|
|
136
|
+
apt-get install -y --no-install-recommends gh && \
|
|
137
|
+
curl --proto '=https' --tlsv1.2 -fsSL \
|
|
138
|
+
-o /tmp/bun-install.sh \
|
|
139
|
+
https://bun.sh/install && \
|
|
140
|
+
echo "bab8acfb046aac8c72407bdcce903957665d655d7acaa3e11c7c4616beae68dd /tmp/bun-install.sh" | sha256sum -c - && \
|
|
141
|
+
bash /tmp/bun-install.sh "bun-v${BUN_VERSION}" && \
|
|
142
|
+
rm -f /tmp/bun-install.sh && \
|
|
143
|
+
export BUN_INSTALL=/root/.bun && \
|
|
144
|
+
export PATH="$BUN_INSTALL/bin:$PATH" && \
|
|
145
|
+
npm install -g @playwright/cli@0.1.11 --ignore-scripts && \
|
|
146
|
+
playwright-cli install --skills && \
|
|
147
|
+
npx --ignore-scripts -y playwright install chrome && \
|
|
148
|
+
command -v gh && \
|
|
149
|
+
command -v node && \
|
|
150
|
+
command -v npm && \
|
|
151
|
+
command -v bun && \
|
|
152
|
+
command -v playwright-cli && \
|
|
153
|
+
gh --version && \
|
|
154
|
+
node --version && \
|
|
155
|
+
npm --version && \
|
|
156
|
+
bun --version && \
|
|
157
|
+
playwright-cli --version && \
|
|
158
|
+
rm -rf /var/lib/apt/lists/*
|
|
159
|
+
|
|
160
|
+
RUN : "11) Create runtime user and sudo policy" && \
|
|
161
|
+
(id -u user >/dev/null 2>&1 || useradd -m user) && \
|
|
162
|
+
mkdir -p /home/user && \
|
|
163
|
+
chown -R user:user /home/user && \
|
|
164
|
+
(grep -q "^user ALL=(ALL) NOPASSWD: ALL$" /etc/sudoers || \
|
|
165
|
+
echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers)
|
|
166
|
+
|
|
167
|
+
ENV BUN_INSTALL=/root/.bun
|
|
168
|
+
ENV PATH="$BUN_INSTALL/bin:$PATH"
|
|
169
|
+
|
|
170
|
+
USER user
|
|
171
|
+
WORKDIR /home/user
|
|
172
|
+
|
|
173
|
+
ENTRYPOINT ["sudo", "/root/.jupyter/start-up.sh"]
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
FROM python:3.12
|
|
2
|
+
|
|
3
|
+
USER root
|
|
4
|
+
WORKDIR /root
|
|
5
|
+
|
|
6
|
+
ENV JUPYTER_CONFIG_PATH=/root/.jupyter \
|
|
7
|
+
IPYTHON_CONFIG_PATH=/root/.ipython \
|
|
8
|
+
SERVER_PATH=/root/.server
|
|
9
|
+
|
|
10
|
+
# NOSONAR - intentional split: separate RUN layers preserve E2B build cache between steps
|
|
11
|
+
RUN : "1) Install base OS deps + signed NodeSource repo + nodejs" && \
|
|
12
|
+
apt-get update && \
|
|
13
|
+
DEBIAN_FRONTEND=noninteractive DEBCONF_NOWARNINGS=yes \
|
|
14
|
+
apt-get install -y --no-install-recommends \
|
|
15
|
+
build-essential \
|
|
16
|
+
ca-certificates \
|
|
17
|
+
curl \
|
|
18
|
+
fonts-noto-cjk \
|
|
19
|
+
git \
|
|
20
|
+
gnupg \
|
|
21
|
+
jq \
|
|
22
|
+
libcairo2-dev \
|
|
23
|
+
libgirepository1.0-dev \
|
|
24
|
+
pkg-config \
|
|
25
|
+
python3-dev \
|
|
26
|
+
ripgrep \
|
|
27
|
+
sudo \
|
|
28
|
+
util-linux && \
|
|
29
|
+
mkdir -p /etc/apt/keyrings && \
|
|
30
|
+
curl --proto '=https' --tlsv1.2 -fsSL \
|
|
31
|
+
-o /etc/apt/keyrings/nodesource.asc \
|
|
32
|
+
https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key && \
|
|
33
|
+
gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg /etc/apt/keyrings/nodesource.asc && \
|
|
34
|
+
chmod 644 /etc/apt/keyrings/nodesource.gpg && \
|
|
35
|
+
rm -f /etc/apt/keyrings/nodesource.asc && \
|
|
36
|
+
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \
|
|
37
|
+
apt-get update && \
|
|
38
|
+
DEBIAN_FRONTEND=noninteractive DEBCONF_NOWARNINGS=yes \
|
|
39
|
+
apt-get install -y --no-install-recommends nodejs && \
|
|
40
|
+
rm -rf /var/lib/apt/lists/*
|
|
41
|
+
|
|
42
|
+
RUN : "2) Bootstrap code-interpreter template files" && \
|
|
43
|
+
git clone --depth 1 --branch "@e2b/code-interpreter-template@0.2.1" \
|
|
44
|
+
https://github.com/e2b-dev/code-interpreter /tmp/code-interpreter-template && \
|
|
45
|
+
cp /tmp/code-interpreter-template/template/requirements.txt /root/requirements.txt && \
|
|
46
|
+
cp -r /tmp/code-interpreter-template/template/server /root/.server && \
|
|
47
|
+
mkdir -p /root/.config/matplotlib /root/.jupyter /root/.ipython/profile_default/startup && \
|
|
48
|
+
cp /tmp/code-interpreter-template/template/matplotlibrc /root/.config/matplotlib/.matplotlibrc && \
|
|
49
|
+
cp /tmp/code-interpreter-template/template/start-up.sh /root/.jupyter/start-up.sh && \
|
|
50
|
+
cp /tmp/code-interpreter-template/template/jupyter_server_config.py /root/.jupyter/ && \
|
|
51
|
+
cp /tmp/code-interpreter-template/template/ipython_kernel_config.py /root/.ipython/profile_default/ && \
|
|
52
|
+
cp -r /tmp/code-interpreter-template/template/startup_scripts /root/.ipython/profile_default/startup && \
|
|
53
|
+
rm -rf /tmp/code-interpreter-template
|
|
54
|
+
|
|
55
|
+
RUN : "3) Install torch constraint" && \
|
|
56
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
57
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
58
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: "torch==2.5.1+cpu" && \
|
|
59
|
+
echo "torch==2.5.1+cpu" > /tmp/constraints.txt
|
|
60
|
+
|
|
61
|
+
RUN : "4) Install code-interpreter Python requirements" && \
|
|
62
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
63
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
64
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: -c /tmp/constraints.txt -r requirements.txt
|
|
65
|
+
|
|
66
|
+
RUN : "5) Install native AIP runtime packages" && \
|
|
67
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
68
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
69
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: \
|
|
70
|
+
"aip-agents-binary[local]==0.6.92" \
|
|
71
|
+
"httpx==0.28.1" \
|
|
72
|
+
"mcp==1.25.0" \
|
|
73
|
+
"opentelemetry-instrumentation==0.60b1" \
|
|
74
|
+
"opentelemetry-instrumentation-anthropic==0.53.3" \
|
|
75
|
+
"opentelemetry-instrumentation-bedrock==0.53.3" \
|
|
76
|
+
"opentelemetry-instrumentation-fastapi==0.60b1" \
|
|
77
|
+
"opentelemetry-instrumentation-google-generativeai==0.53.3" \
|
|
78
|
+
"opentelemetry-instrumentation-httpx==0.60b1" \
|
|
79
|
+
"opentelemetry-instrumentation-langchain==0.52.6" \
|
|
80
|
+
"opentelemetry-instrumentation-logging==0.60b1" \
|
|
81
|
+
"opentelemetry-instrumentation-openai==0.53.3" \
|
|
82
|
+
"opentelemetry-instrumentation-requests==0.60b1" \
|
|
83
|
+
"opentelemetry-semantic-conventions==0.60b1" \
|
|
84
|
+
"opentelemetry-semantic-conventions-ai==0.4.16"
|
|
85
|
+
|
|
86
|
+
RUN : "6) Install reporting/runtime extras" && \
|
|
87
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: --quiet \
|
|
88
|
+
"gl-connectors-sdk==0.1.5" \
|
|
89
|
+
"gllm-inference-binary==0.6.42" \
|
|
90
|
+
"markdown2==2.5.5" \
|
|
91
|
+
"weasyprint==68.1"
|
|
92
|
+
|
|
93
|
+
RUN : "7) Install Jupyter/bash kernels" && \
|
|
94
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: "bash_kernel==0.10.0" && \
|
|
95
|
+
ipython kernel install --name "python3" --user && \
|
|
96
|
+
python -m bash_kernel.install --user
|
|
97
|
+
|
|
98
|
+
RUN : "8) Install ijavascript kernel" && \
|
|
99
|
+
# Pinned to latest commit as of 2026-05-20 (no semver tags exist in this repo).
|
|
100
|
+
# Commit hash avoids SonarCloud SCA "unresolved dependency version" warning.
|
|
101
|
+
npm install -g --ignore-scripts git+https://github.com/e2b-dev/ijavascript.git#79cb7d56dcfe0df9ff55eff0ca4dc920a6dcc361 && \
|
|
102
|
+
npm rebuild -g && \
|
|
103
|
+
ijsinstall --install=global
|
|
104
|
+
|
|
105
|
+
RUN : "9) Patch server timeout and install server env" && \
|
|
106
|
+
sed -i \
|
|
107
|
+
"s/client = httpx.AsyncClient()/client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))/" \
|
|
108
|
+
/root/.server/main.py && \
|
|
109
|
+
grep -q \
|
|
110
|
+
"client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))" \
|
|
111
|
+
/root/.server/main.py && \
|
|
112
|
+
python -m venv .server/.venv && \
|
|
113
|
+
# Do NOT add --only-binary :all: here. The server's requirements.txt may include
|
|
114
|
+
# packages that require compilation (e.g. C extensions). --only-binary silently
|
|
115
|
+
# skips them, leaving the venv incomplete. uvicorn then fails to start on port
|
|
116
|
+
# 49999 at sandbox boot, causing the "port not open" error in E2B sandboxes.
|
|
117
|
+
.server/.venv/bin/pip install --no-cache-dir -r .server/requirements.txt && \
|
|
118
|
+
chmod +x .jupyter/start-up.sh
|
|
119
|
+
|
|
120
|
+
RUN : "10) Create runtime user and sudo policy" && \
|
|
121
|
+
(id -u user >/dev/null 2>&1 || useradd -m user) && \
|
|
122
|
+
mkdir -p /home/user && \
|
|
123
|
+
chown -R user:user /home/user && \
|
|
124
|
+
(grep -q "^user ALL=(ALL) NOPASSWD: ALL$" /etc/sudoers || \
|
|
125
|
+
echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers)
|
|
126
|
+
|
|
127
|
+
USER user
|
|
128
|
+
WORKDIR /home/user
|
|
129
|
+
|
|
130
|
+
ENTRYPOINT ["sudo", "/root/.jupyter/start-up.sh"]
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
FROM python:3.12
|
|
2
|
+
|
|
3
|
+
USER root
|
|
4
|
+
WORKDIR /root
|
|
5
|
+
|
|
6
|
+
ENV JUPYTER_CONFIG_PATH=/root/.jupyter \
|
|
7
|
+
IPYTHON_CONFIG_PATH=/root/.ipython \
|
|
8
|
+
SERVER_PATH=/root/.server
|
|
9
|
+
|
|
10
|
+
# NOSONAR - intentional split: separate RUN layers preserve E2B build cache between steps
|
|
11
|
+
RUN : "1) Install base OS deps + signed NodeSource repo + nodejs" && \
|
|
12
|
+
apt-get update && \
|
|
13
|
+
DEBIAN_FRONTEND=noninteractive DEBCONF_NOWARNINGS=yes \
|
|
14
|
+
apt-get install -y --no-install-recommends \
|
|
15
|
+
build-essential \
|
|
16
|
+
ca-certificates \
|
|
17
|
+
curl \
|
|
18
|
+
fonts-noto-cjk \
|
|
19
|
+
git \
|
|
20
|
+
gnupg \
|
|
21
|
+
jq \
|
|
22
|
+
libcairo2-dev \
|
|
23
|
+
libgirepository1.0-dev \
|
|
24
|
+
pkg-config \
|
|
25
|
+
python3-dev \
|
|
26
|
+
ripgrep \
|
|
27
|
+
sudo \
|
|
28
|
+
util-linux && \
|
|
29
|
+
mkdir -p /etc/apt/keyrings && \
|
|
30
|
+
curl --proto '=https' --tlsv1.2 -fsSL \
|
|
31
|
+
-o /etc/apt/keyrings/nodesource.asc \
|
|
32
|
+
https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key && \
|
|
33
|
+
gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg /etc/apt/keyrings/nodesource.asc && \
|
|
34
|
+
chmod 644 /etc/apt/keyrings/nodesource.gpg && \
|
|
35
|
+
rm -f /etc/apt/keyrings/nodesource.asc && \
|
|
36
|
+
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" > /etc/apt/sources.list.d/nodesource.list && \
|
|
37
|
+
apt-get update && \
|
|
38
|
+
DEBIAN_FRONTEND=noninteractive DEBCONF_NOWARNINGS=yes \
|
|
39
|
+
apt-get install -y --no-install-recommends nodejs && \
|
|
40
|
+
rm -rf /var/lib/apt/lists/*
|
|
41
|
+
|
|
42
|
+
RUN : "2) Bootstrap code-interpreter template files" && \
|
|
43
|
+
git clone --depth 1 --branch "@e2b/code-interpreter-template@0.2.1" \
|
|
44
|
+
https://github.com/e2b-dev/code-interpreter /tmp/code-interpreter-template && \
|
|
45
|
+
cp /tmp/code-interpreter-template/template/requirements.txt /root/requirements.txt && \
|
|
46
|
+
cp -r /tmp/code-interpreter-template/template/server /root/.server && \
|
|
47
|
+
mkdir -p /root/.config/matplotlib /root/.jupyter /root/.ipython/profile_default/startup && \
|
|
48
|
+
cp /tmp/code-interpreter-template/template/matplotlibrc /root/.config/matplotlib/.matplotlibrc && \
|
|
49
|
+
cp /tmp/code-interpreter-template/template/start-up.sh /root/.jupyter/start-up.sh && \
|
|
50
|
+
cp /tmp/code-interpreter-template/template/jupyter_server_config.py /root/.jupyter/ && \
|
|
51
|
+
cp /tmp/code-interpreter-template/template/ipython_kernel_config.py /root/.ipython/profile_default/ && \
|
|
52
|
+
cp -r /tmp/code-interpreter-template/template/startup_scripts /root/.ipython/profile_default/startup && \
|
|
53
|
+
rm -rf /tmp/code-interpreter-template
|
|
54
|
+
|
|
55
|
+
RUN : "3) Install torch constraint" && \
|
|
56
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
57
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
58
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: "torch==2.5.1+cpu" && \
|
|
59
|
+
echo "torch==2.5.1+cpu" > /root/constraints.txt
|
|
60
|
+
|
|
61
|
+
RUN : "4) Install code-interpreter Python requirements" && \
|
|
62
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
63
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
64
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: -c /root/constraints.txt -r requirements.txt
|
|
65
|
+
|
|
66
|
+
RUN : "5) Install native AIP runtime packages" && \
|
|
67
|
+
PIP_EXTRA_INDEX_URL=https://pypi.org/simple \
|
|
68
|
+
PIP_INDEX_URL=https://download.pytorch.org/whl/cpu \
|
|
69
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: \
|
|
70
|
+
"aip-agents-binary[local]==0.6.92" \
|
|
71
|
+
"httpx==0.28.1" \
|
|
72
|
+
"mcp==1.25.0" \
|
|
73
|
+
"opentelemetry-instrumentation-anthropic==0.53.3" \
|
|
74
|
+
"opentelemetry-instrumentation-bedrock==0.53.3" \
|
|
75
|
+
"opentelemetry-instrumentation-fastapi==0.60b1" \
|
|
76
|
+
"opentelemetry-instrumentation-google-generativeai==0.53.3" \
|
|
77
|
+
"opentelemetry-instrumentation-httpx==0.60b1" \
|
|
78
|
+
"opentelemetry-instrumentation-langchain==0.52.6" \
|
|
79
|
+
"opentelemetry-instrumentation-logging==0.60b1" \
|
|
80
|
+
"opentelemetry-instrumentation-openai==0.53.3" \
|
|
81
|
+
"opentelemetry-instrumentation-requests==0.60b1" \
|
|
82
|
+
"opentelemetry-instrumentation==0.60b1" \
|
|
83
|
+
"opentelemetry-semantic-conventions==0.60b1" \
|
|
84
|
+
"opentelemetry-semantic-conventions-ai==0.4.15"
|
|
85
|
+
|
|
86
|
+
RUN : "6) Install reporting/runtime extras" && \
|
|
87
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: --quiet \
|
|
88
|
+
"gl-connectors-sdk==0.1.8" \
|
|
89
|
+
"gllm-inference-binary==0.6.42" \
|
|
90
|
+
"markdown2==2.5.5" \
|
|
91
|
+
"weasyprint==68.1"
|
|
92
|
+
|
|
93
|
+
RUN : "7) Install Jupyter/bash kernels" && \
|
|
94
|
+
TMPDIR=/var/tmp pip install --no-cache-dir --only-binary :all: "bash_kernel==0.10.0" && \
|
|
95
|
+
ipython kernel install --name "python3" --user && \
|
|
96
|
+
python -m bash_kernel.install --user
|
|
97
|
+
|
|
98
|
+
RUN : "8) Install ijavascript kernel" && \
|
|
99
|
+
# Pinned to latest commit as of 2026-05-20 (no semver tags exist in this repo).
|
|
100
|
+
# Commit hash avoids SonarCloud SCA "unresolved dependency version" warning.
|
|
101
|
+
npm install -g --ignore-scripts git+https://github.com/e2b-dev/ijavascript.git#79cb7d56dcfe0df9ff55eff0ca4dc920a6dcc361 && \
|
|
102
|
+
npm rebuild -g ijavascript && \
|
|
103
|
+
ijsinstall --install=global
|
|
104
|
+
|
|
105
|
+
RUN : "9) Patch server timeout and install server env" && \
|
|
106
|
+
sed -i \
|
|
107
|
+
"s/client = httpx.AsyncClient()/client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))/" \
|
|
108
|
+
/root/.server/main.py && \
|
|
109
|
+
grep -q \
|
|
110
|
+
"client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))" \
|
|
111
|
+
/root/.server/main.py && \
|
|
112
|
+
python -m venv .server/.venv && \
|
|
113
|
+
# Do NOT add --only-binary :all: here. The server's requirements.txt may include
|
|
114
|
+
# packages that require compilation (e.g. C extensions). --only-binary silently
|
|
115
|
+
# skips them, leaving the venv incomplete. uvicorn then fails to start on port
|
|
116
|
+
# 49999 at sandbox boot, causing the "port not open" error in E2B sandboxes.
|
|
117
|
+
.server/.venv/bin/pip install --no-cache-dir -r .server/requirements.txt && \
|
|
118
|
+
chmod +x .jupyter/start-up.sh
|
|
119
|
+
|
|
120
|
+
COPY aip-agents-sandbox-v2-4-runner-managed.requirements.txt /root/runner-managed-requirements.txt
|
|
121
|
+
COPY aip-agents-sandbox-v2-4-runner-managed.patch_js_context.py /root/runner-managed-patch-js-context.py
|
|
122
|
+
|
|
123
|
+
RUN : "10) Install runner-managed Python requirements" && \
|
|
124
|
+
# antlr4-python3-runtime==4.9.3 is sdist-only; the requirements file
|
|
125
|
+
# contains the targeted --no-binary override for that package.
|
|
126
|
+
TMPDIR=/var/tmp pip install \
|
|
127
|
+
--no-cache-dir \
|
|
128
|
+
--only-binary :all: \
|
|
129
|
+
--no-deps \
|
|
130
|
+
-r /root/runner-managed-requirements.txt
|
|
131
|
+
|
|
132
|
+
RUN : "11) Tolerate optional JavaScript context startup" && \
|
|
133
|
+
python /root/runner-managed-patch-js-context.py && \
|
|
134
|
+
rm -f /root/runner-managed-patch-js-context.py
|
|
135
|
+
|
|
136
|
+
RUN : "12) Verify runner-managed Python runtime" && \
|
|
137
|
+
python -c "\
|
|
138
|
+
import importlib; \
|
|
139
|
+
modules = ( \
|
|
140
|
+
'catapa', \
|
|
141
|
+
'catapa_private', \
|
|
142
|
+
'digital_employee_core', \
|
|
143
|
+
'glaip_sdk', \
|
|
144
|
+
'gllm_pipeline', \
|
|
145
|
+
'googleapiclient.discovery', \
|
|
146
|
+
'openapi_client', \
|
|
147
|
+
'openapi_client.exceptions', \
|
|
148
|
+
'opensearchpy', \
|
|
149
|
+
'weasyprint', \
|
|
150
|
+
); \
|
|
151
|
+
[importlib.import_module(module) for module in modules]; \
|
|
152
|
+
print('runner managed imports ok')"
|
|
153
|
+
|
|
154
|
+
RUN : "13) Create runtime user and sudo policy" && \
|
|
155
|
+
(id -u user >/dev/null 2>&1 || useradd -m user) && \
|
|
156
|
+
mkdir -p /home/user && \
|
|
157
|
+
chown -R user:user /home/user && \
|
|
158
|
+
(grep -q "^user ALL=(ALL) NOPASSWD: ALL$" /etc/sudoers || \
|
|
159
|
+
echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers)
|
|
160
|
+
|
|
161
|
+
USER user
|
|
162
|
+
WORKDIR /home/user
|
|
163
|
+
|
|
164
|
+
ENTRYPOINT ["sudo", "/root/.jupyter/start-up.sh"]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""Patch code-interpreter server startup for runner-managed sandboxes."""
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
_SERVER_MAIN_PATH = Path("/root/.server/main.py")
|
|
7
|
+
_OLD_CONTEXT_BLOCK = """ javascript_context = await create_context(
|
|
8
|
+
client, websockets, "javascript", "/home/user"
|
|
9
|
+
)
|
|
10
|
+
default_websockets["javascript"] = javascript_context.id
|
|
11
|
+
"""
|
|
12
|
+
_NEW_CONTEXT_BLOCK = """ try:
|
|
13
|
+
javascript_context = await create_context(
|
|
14
|
+
client, websockets, "javascript", "/home/user"
|
|
15
|
+
)
|
|
16
|
+
default_websockets["javascript"] = javascript_context.id
|
|
17
|
+
except Exception as e:
|
|
18
|
+
logger.warning(f"Skipping default JavaScript context initialization: {e}")
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def patch_server_main() -> None:
|
|
23
|
+
"""Patch the code-interpreter server main module in place."""
|
|
24
|
+
text = _SERVER_MAIN_PATH.read_text()
|
|
25
|
+
if _OLD_CONTEXT_BLOCK not in text:
|
|
26
|
+
raise RuntimeError("Expected JavaScript default context block not found in code-interpreter server")
|
|
27
|
+
|
|
28
|
+
# This Docker build helper patches a fixed in-image server path, not user input.
|
|
29
|
+
_SERVER_MAIN_PATH.write_text(text.replace(_OLD_CONTEXT_BLOCK, _NEW_CONTEXT_BLOCK)) # NOSONAR
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def main() -> None:
|
|
33
|
+
"""CLI entrypoint for Dockerfile RUN usage."""
|
|
34
|
+
try:
|
|
35
|
+
patch_server_main()
|
|
36
|
+
except RuntimeError as exc:
|
|
37
|
+
sys.exit(str(exc))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
if __name__ == "__main__":
|
|
41
|
+
main() # pragma: no cover
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
aip-agents-binary==0.6.100
|
|
2
|
+
alembic==1.18.5
|
|
3
|
+
--no-binary antlr4-python3-runtime
|
|
4
|
+
antlr4-python3-runtime==4.9.3
|
|
5
|
+
apscheduler==3.11.3
|
|
6
|
+
authlib==1.7.2
|
|
7
|
+
catapa-private==0.1.3
|
|
8
|
+
catapa==0.3.6
|
|
9
|
+
digital-employee-core==0.1.12
|
|
10
|
+
email-validator==2.3.0
|
|
11
|
+
fastapi==0.138.1
|
|
12
|
+
glaip-sdk==0.8.46
|
|
13
|
+
gllm-pipeline-binary==0.5.17.post1
|
|
14
|
+
google-api-python-client==2.198.0
|
|
15
|
+
mako==1.3.12
|
|
16
|
+
markdown==3.10.2
|
|
17
|
+
marshmallow==4.3.0
|
|
18
|
+
omegaconf==2.3.1
|
|
19
|
+
openpyxl==3.1.5
|
|
20
|
+
opensearch-py==3.2.0
|
|
21
|
+
opentelemetry-instrumentation-sqlalchemy==0.64b0
|
|
22
|
+
psycopg2-binary==2.9.12
|
|
23
|
+
pydantic==2.13.4
|
|
24
|
+
pymupdf==1.25.3
|
|
25
|
+
python-dotenv==1.2.2
|
|
26
|
+
python-multipart==0.0.32
|
|
27
|
+
requests==2.32.5
|
|
28
|
+
sqlparse==0.5.5
|
|
29
|
+
uvicorn==0.34.3
|