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.
Files changed (447) hide show
  1. aip_agents/__init__.py +66 -0
  2. aip_agents/a2a/__init__.py +19 -0
  3. aip_agents/a2a/server/__init__.py +10 -0
  4. aip_agents/a2a/server/base_executor.py +1125 -0
  5. aip_agents/a2a/server/google_adk_executor.py +198 -0
  6. aip_agents/a2a/server/langflow_executor.py +180 -0
  7. aip_agents/a2a/server/langgraph_executor.py +270 -0
  8. aip_agents/a2a/types.py +232 -0
  9. aip_agents/a2ui/__init__.py +26 -0
  10. aip_agents/a2ui/catalog_provider.py +109 -0
  11. aip_agents/a2ui/examples/0.8/booking_form.json +1 -0
  12. aip_agents/a2ui/examples/0.8/confirmation.json +1 -0
  13. aip_agents/a2ui/examples/0.8/single_column_list.json +1 -0
  14. aip_agents/a2ui/examples/0.9/booking_form.json +1 -0
  15. aip_agents/a2ui/examples/0.9/confirmation.json +1 -0
  16. aip_agents/a2ui/examples/0.9/single_column_list.json +1 -0
  17. aip_agents/a2ui/middleware.py +754 -0
  18. aip_agents/a2ui/models.py +153 -0
  19. aip_agents/a2ui/public_url.py +138 -0
  20. aip_agents/a2ui/stream_filter.py +67 -0
  21. aip_agents/agent/__init__.py +72 -0
  22. aip_agents/agent/base_agent.py +1437 -0
  23. aip_agents/agent/base_langgraph_agent.py +4048 -0
  24. aip_agents/agent/google_adk_agent.py +932 -0
  25. aip_agents/agent/google_adk_constants.py +11 -0
  26. aip_agents/agent/graph_runtime.py +185 -0
  27. aip_agents/agent/hitl/__init__.py +24 -0
  28. aip_agents/agent/hitl/config.py +28 -0
  29. aip_agents/agent/hitl/langgraph_hitl_mixin.py +515 -0
  30. aip_agents/agent/hitl/manager.py +532 -0
  31. aip_agents/agent/hitl/models.py +18 -0
  32. aip_agents/agent/hitl/prompt/__init__.py +9 -0
  33. aip_agents/agent/hitl/prompt/base.py +42 -0
  34. aip_agents/agent/hitl/prompt/deferred.py +73 -0
  35. aip_agents/agent/hitl/registry.py +149 -0
  36. aip_agents/agent/interface.py +138 -0
  37. aip_agents/agent/interfaces.py +65 -0
  38. aip_agents/agent/langflow_agent.py +464 -0
  39. aip_agents/agent/langgraph_react_agent.py +3741 -0
  40. aip_agents/agent/model_invocation_adapter.py +346 -0
  41. aip_agents/agent/system_instruction_context.py +34 -0
  42. aip_agents/agent/tool_execution_engine.py +587 -0
  43. aip_agents/audio_interface/__init__.py +30 -0
  44. aip_agents/audio_interface/audio_agent_adapter.py +254 -0
  45. aip_agents/audio_interface/config.py +146 -0
  46. aip_agents/audio_interface/errors.py +15 -0
  47. aip_agents/audio_interface/livekit_audio_session.py +504 -0
  48. aip_agents/audio_interface/livekit_realtime_audio_session.py +142 -0
  49. aip_agents/audio_interface/session_factory.py +40 -0
  50. aip_agents/clients/__init__.py +10 -0
  51. aip_agents/clients/langflow/__init__.py +10 -0
  52. aip_agents/clients/langflow/client.py +477 -0
  53. aip_agents/clients/langflow/types.py +18 -0
  54. aip_agents/common/__init__.py +5 -0
  55. aip_agents/common/callable_introspection.py +17 -0
  56. aip_agents/constants.py +23 -0
  57. aip_agents/context/__init__.py +5 -0
  58. aip_agents/context/budget.py +237 -0
  59. aip_agents/context/compaction.py +339 -0
  60. aip_agents/context/metadata.py +169 -0
  61. aip_agents/context/offload.py +449 -0
  62. aip_agents/context/preparation.py +196 -0
  63. aip_agents/context/prompt.py +61 -0
  64. aip_agents/context/runtime.py +149 -0
  65. aip_agents/context/session_recall.py +69 -0
  66. aip_agents/context/state.py +48 -0
  67. aip_agents/context/utils.py +44 -0
  68. aip_agents/credentials/manager.py +132 -0
  69. aip_agents/examples/__init__.py +5 -0
  70. aip_agents/examples/audio_livekit_session.py +116 -0
  71. aip_agents/examples/compare_streaming_client.py +783 -0
  72. aip_agents/examples/compare_streaming_server.py +141 -0
  73. aip_agents/examples/gl_connectors_smoke.py +148 -0
  74. aip_agents/examples/hello_world_a2a_google_adk_client.py +49 -0
  75. aip_agents/examples/hello_world_a2a_google_adk_client_agent.py +48 -0
  76. aip_agents/examples/hello_world_a2a_google_adk_client_streaming.py +60 -0
  77. aip_agents/examples/hello_world_a2a_google_adk_server.py +78 -0
  78. aip_agents/examples/hello_world_a2a_langchain_client.py +39 -0
  79. aip_agents/examples/hello_world_a2a_langchain_client_agent.py +39 -0
  80. aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.py +37 -0
  81. aip_agents/examples/hello_world_a2a_langchain_client_streaming.py +41 -0
  82. aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.py +60 -0
  83. aip_agents/examples/hello_world_a2a_langchain_reference_server.py +104 -0
  84. aip_agents/examples/hello_world_a2a_langchain_server.py +78 -0
  85. aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.py +77 -0
  86. aip_agents/examples/hello_world_a2a_langflow_client.py +83 -0
  87. aip_agents/examples/hello_world_a2a_langflow_server.py +80 -0
  88. aip_agents/examples/hello_world_a2a_langgraph_artifact_client.py +73 -0
  89. aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.py +76 -0
  90. aip_agents/examples/hello_world_a2a_langgraph_artifact_server.py +91 -0
  91. aip_agents/examples/hello_world_a2a_langgraph_client.py +54 -0
  92. aip_agents/examples/hello_world_a2a_langgraph_client_agent.py +54 -0
  93. aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.py +32 -0
  94. aip_agents/examples/hello_world_a2a_langgraph_client_streaming.py +50 -0
  95. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.py +44 -0
  96. aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.py +92 -0
  97. aip_agents/examples/hello_world_a2a_langgraph_server.py +83 -0
  98. aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.py +78 -0
  99. aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.py +131 -0
  100. aip_agents/examples/hello_world_a2a_mcp_langgraph.py +196 -0
  101. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.py +244 -0
  102. aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.py +250 -0
  103. aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.py +57 -0
  104. aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.py +79 -0
  105. aip_agents/examples/hello_world_filesystem.py +162 -0
  106. aip_agents/examples/hello_world_google_adk.py +41 -0
  107. aip_agents/examples/hello_world_google_adk_mcp_http.py +34 -0
  108. aip_agents/examples/hello_world_google_adk_mcp_http_stream.py +40 -0
  109. aip_agents/examples/hello_world_google_adk_mcp_sse.py +44 -0
  110. aip_agents/examples/hello_world_google_adk_mcp_sse_stream.py +48 -0
  111. aip_agents/examples/hello_world_google_adk_mcp_stdio.py +44 -0
  112. aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.py +48 -0
  113. aip_agents/examples/hello_world_google_adk_stream.py +44 -0
  114. aip_agents/examples/hello_world_langchain.py +28 -0
  115. aip_agents/examples/hello_world_langchain_lm_invoker.py +15 -0
  116. aip_agents/examples/hello_world_langchain_mcp_http.py +34 -0
  117. aip_agents/examples/hello_world_langchain_mcp_http_interactive.py +130 -0
  118. aip_agents/examples/hello_world_langchain_mcp_http_stream.py +42 -0
  119. aip_agents/examples/hello_world_langchain_mcp_multi_server.py +155 -0
  120. aip_agents/examples/hello_world_langchain_mcp_sse.py +34 -0
  121. aip_agents/examples/hello_world_langchain_mcp_sse_stream.py +40 -0
  122. aip_agents/examples/hello_world_langchain_mcp_stdio.py +30 -0
  123. aip_agents/examples/hello_world_langchain_mcp_stdio_stream.py +41 -0
  124. aip_agents/examples/hello_world_langchain_stream.py +36 -0
  125. aip_agents/examples/hello_world_langchain_stream_lm_invoker.py +39 -0
  126. aip_agents/examples/hello_world_langflow_agent.py +163 -0
  127. aip_agents/examples/hello_world_langgraph.py +39 -0
  128. aip_agents/examples/hello_world_langgraph_gl_connector_twitter.py +44 -0
  129. aip_agents/examples/hello_world_langgraph_mcp_http.py +31 -0
  130. aip_agents/examples/hello_world_langgraph_mcp_http_stream.py +34 -0
  131. aip_agents/examples/hello_world_langgraph_mcp_sse.py +35 -0
  132. aip_agents/examples/hello_world_langgraph_mcp_sse_stream.py +50 -0
  133. aip_agents/examples/hello_world_langgraph_mcp_stdio.py +35 -0
  134. aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.py +50 -0
  135. aip_agents/examples/hello_world_langgraph_skills.py +62 -0
  136. aip_agents/examples/hello_world_langgraph_stream.py +43 -0
  137. aip_agents/examples/hello_world_langgraph_stream_lm_invoker.py +37 -0
  138. aip_agents/examples/hello_world_model_switch_cli.py +210 -0
  139. aip_agents/examples/hello_world_multi_agent_adk.py +75 -0
  140. aip_agents/examples/hello_world_multi_agent_langchain.py +54 -0
  141. aip_agents/examples/hello_world_multi_agent_langgraph.py +66 -0
  142. aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.py +69 -0
  143. aip_agents/examples/hello_world_multi_agent_tool_output_client.py +57 -0
  144. aip_agents/examples/hello_world_multi_agent_tool_output_server.py +131 -0
  145. aip_agents/examples/hello_world_pii_logger.py +21 -0
  146. aip_agents/examples/hello_world_ptc.py +49 -0
  147. aip_agents/examples/hello_world_ptc_custom_tools.py +83 -0
  148. aip_agents/examples/hello_world_sentry.py +133 -0
  149. aip_agents/examples/hello_world_step_limits.py +273 -0
  150. aip_agents/examples/hello_world_stock_a2a_server.py +100 -0
  151. aip_agents/examples/hello_world_tool_output_client.py +55 -0
  152. aip_agents/examples/hello_world_tool_output_server.py +113 -0
  153. aip_agents/examples/hitl_demo.py +724 -0
  154. aip_agents/examples/mcp_configs/configs.py +63 -0
  155. aip_agents/examples/mcp_servers/common.py +76 -0
  156. aip_agents/examples/mcp_servers/mcp_name.py +29 -0
  157. aip_agents/examples/mcp_servers/mcp_server_http.py +19 -0
  158. aip_agents/examples/mcp_servers/mcp_server_sse.py +19 -0
  159. aip_agents/examples/mcp_servers/mcp_server_stdio.py +19 -0
  160. aip_agents/examples/mcp_servers/mcp_time.py +10 -0
  161. aip_agents/examples/pii_demo_langgraph_client.py +69 -0
  162. aip_agents/examples/pii_demo_langgraph_server.py +125 -0
  163. aip_agents/examples/pii_demo_multi_agent_client.py +80 -0
  164. aip_agents/examples/pii_demo_multi_agent_server.py +246 -0
  165. aip_agents/examples/todolist_planning_a2a_langchain_client.py +70 -0
  166. aip_agents/examples/todolist_planning_a2a_langgraph_server.py +87 -0
  167. aip_agents/examples/tools/__init__.py +27 -0
  168. aip_agents/examples/tools/adk_arithmetic_tools.py +36 -0
  169. aip_agents/examples/tools/adk_weather_tool.py +60 -0
  170. aip_agents/examples/tools/data_generator_tool.py +103 -0
  171. aip_agents/examples/tools/data_visualization_tool.py +312 -0
  172. aip_agents/examples/tools/image_artifact_tool.py +136 -0
  173. aip_agents/examples/tools/langchain_arithmetic_tools.py +26 -0
  174. aip_agents/examples/tools/langchain_currency_exchange_tool.py +88 -0
  175. aip_agents/examples/tools/langchain_graph_artifact_tool.py +172 -0
  176. aip_agents/examples/tools/langchain_weather_tool.py +48 -0
  177. aip_agents/examples/tools/langgraph_streaming_tool.py +130 -0
  178. aip_agents/examples/tools/mock_retrieval_tool.py +56 -0
  179. aip_agents/examples/tools/multiply_tool.py +43 -0
  180. aip_agents/examples/tools/pii_demo_tools.py +189 -0
  181. aip_agents/examples/tools/random_chart_tool.py +142 -0
  182. aip_agents/examples/tools/serper_tool.py +202 -0
  183. aip_agents/examples/tools/stock_tools.py +82 -0
  184. aip_agents/examples/tools/table_generator_tool.py +167 -0
  185. aip_agents/examples/tools/time_tool.py +82 -0
  186. aip_agents/examples/tools/weather_forecast_tool.py +38 -0
  187. aip_agents/guardrails/__init__.py +83 -0
  188. aip_agents/guardrails/engines/__init__.py +69 -0
  189. aip_agents/guardrails/engines/base.py +90 -0
  190. aip_agents/guardrails/engines/nemo.py +101 -0
  191. aip_agents/guardrails/engines/phrase_matcher.py +113 -0
  192. aip_agents/guardrails/exceptions.py +39 -0
  193. aip_agents/guardrails/manager.py +163 -0
  194. aip_agents/guardrails/middleware.py +199 -0
  195. aip_agents/guardrails/schemas.py +63 -0
  196. aip_agents/guardrails/utils.py +45 -0
  197. aip_agents/integration/__init__.py +43 -0
  198. aip_agents/integration/agent.py +58 -0
  199. aip_agents/integration/guardrails.py +52 -0
  200. aip_agents/integration/hitl.py +71 -0
  201. aip_agents/integration/ptc.py +95 -0
  202. aip_agents/integration/skills.py +37 -0
  203. aip_agents/integration/storage.py +81 -0
  204. aip_agents/integration/version.py +103 -0
  205. aip_agents/mcp/__init__.py +1 -0
  206. aip_agents/mcp/client/__init__.py +60 -0
  207. aip_agents/mcp/client/base_mcp_client.py +377 -0
  208. aip_agents/mcp/client/connection_manager.py +231 -0
  209. aip_agents/mcp/client/errors.py +119 -0
  210. aip_agents/mcp/client/google_adk/__init__.py +45 -0
  211. aip_agents/mcp/client/google_adk/client.py +383 -0
  212. aip_agents/mcp/client/langchain/__init__.py +11 -0
  213. aip_agents/mcp/client/langchain/client.py +265 -0
  214. aip_agents/mcp/client/persistent_session.py +704 -0
  215. aip_agents/mcp/client/session_pool.py +358 -0
  216. aip_agents/mcp/client/transports.py +288 -0
  217. aip_agents/mcp/utils/__init__.py +7 -0
  218. aip_agents/mcp/utils/config_validator.py +139 -0
  219. aip_agents/memory/__init__.py +14 -0
  220. aip_agents/memory/adapters/__init__.py +10 -0
  221. aip_agents/memory/adapters/base_adapter.py +815 -0
  222. aip_agents/memory/adapters/mem0.py +286 -0
  223. aip_agents/memory/base.py +84 -0
  224. aip_agents/memory/constants.py +49 -0
  225. aip_agents/memory/factory.py +86 -0
  226. aip_agents/memory/guidance.py +20 -0
  227. aip_agents/memory/simple_memory.py +47 -0
  228. aip_agents/middleware/__init__.py +65 -0
  229. aip_agents/middleware/backends/__init__.py +72 -0
  230. aip_agents/middleware/backends/in_memory.py +578 -0
  231. aip_agents/middleware/backends/local_disk.py +1203 -0
  232. aip_agents/middleware/backends/protocol.py +353 -0
  233. aip_agents/middleware/backends/sandbox.py +1431 -0
  234. aip_agents/middleware/backends/sandbox_files.py +113 -0
  235. aip_agents/middleware/backends/utils.py +293 -0
  236. aip_agents/middleware/base.py +239 -0
  237. aip_agents/middleware/filesystem.py +690 -0
  238. aip_agents/middleware/manager.py +291 -0
  239. aip_agents/middleware/memory.py +532 -0
  240. aip_agents/middleware/pii_middleware.py +192 -0
  241. aip_agents/middleware/schema.py +19 -0
  242. aip_agents/middleware/skills.py +872 -0
  243. aip_agents/middleware/task_delegation.py +1656 -0
  244. aip_agents/middleware/todolist.py +276 -0
  245. aip_agents/middleware/tools/__init__.py +23 -0
  246. aip_agents/middleware/tools/edit_file.py +70 -0
  247. aip_agents/middleware/tools/execute.py +428 -0
  248. aip_agents/middleware/tools/grep_file.py +79 -0
  249. aip_agents/middleware/tools/ls.py +71 -0
  250. aip_agents/middleware/tools/read_file.py +239 -0
  251. aip_agents/middleware/tools/skill_load.py +193 -0
  252. aip_agents/middleware/tools/skill_resource.py +338 -0
  253. aip_agents/middleware/tools/write_file.py +114 -0
  254. aip_agents/middleware/vision.py +322 -0
  255. aip_agents/ptc/__init__.py +87 -0
  256. aip_agents/ptc/custom_tools.py +511 -0
  257. aip_agents/ptc/custom_tools_payload.py +499 -0
  258. aip_agents/ptc/custom_tools_templates/__init__.py +1 -0
  259. aip_agents/ptc/custom_tools_templates/custom_build_function.py.template +24 -0
  260. aip_agents/ptc/custom_tools_templates/custom_init.py.template +26 -0
  261. aip_agents/ptc/custom_tools_templates/custom_invoke.py.template +149 -0
  262. aip_agents/ptc/custom_tools_templates/custom_registry.py.template +112 -0
  263. aip_agents/ptc/custom_tools_templates/custom_sources_init.py.template +7 -0
  264. aip_agents/ptc/custom_tools_templates/custom_wrapper.py.template +87 -0
  265. aip_agents/ptc/doc_gen.py +122 -0
  266. aip_agents/ptc/exceptions.py +57 -0
  267. aip_agents/ptc/executor.py +627 -0
  268. aip_agents/ptc/mcp/__init__.py +45 -0
  269. aip_agents/ptc/mcp/sandbox_bridge.py +679 -0
  270. aip_agents/ptc/mcp/templates/__init__.py +1 -0
  271. aip_agents/ptc/mcp/templates/mcp_client.py.template +240 -0
  272. aip_agents/ptc/naming.py +430 -0
  273. aip_agents/ptc/payload.py +26 -0
  274. aip_agents/ptc/prompt_builder.py +674 -0
  275. aip_agents/ptc/ptc_helper.py +16 -0
  276. aip_agents/ptc/sandbox_bridge.py +297 -0
  277. aip_agents/ptc/template_utils.py +33 -0
  278. aip_agents/ptc/templates/__init__.py +1 -0
  279. aip_agents/ptc/templates/ptc_helper.py.template +134 -0
  280. aip_agents/ptc/tool_def_helpers.py +101 -0
  281. aip_agents/ptc/tool_enrichment.py +163 -0
  282. aip_agents/resilience/__init__.py +10 -0
  283. aip_agents/resilience/base.py +46 -0
  284. aip_agents/resilience/tool.py +1661 -0
  285. aip_agents/sandbox/__init__.py +62 -0
  286. aip_agents/sandbox/defaults.py +220 -0
  287. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-1-datasaur.Dockerfile +120 -0
  288. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-1.Dockerfile +100 -0
  289. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-2-datasaur.Dockerfile +143 -0
  290. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-2.Dockerfile +119 -0
  291. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-3-datasaur.Dockerfile +173 -0
  292. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-3.Dockerfile +130 -0
  293. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.Dockerfile +164 -0
  294. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.patch_js_context.py +41 -0
  295. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2-4-runner-managed.requirements.txt +29 -0
  296. aip_agents/sandbox/dockerfiles/aip-agents-sandbox-v2.Dockerfile +87 -0
  297. aip_agents/sandbox/e2b_runtime.py +27 -0
  298. aip_agents/sandbox/image_registry.py +98 -0
  299. aip_agents/sandbox/providers/__init__.py +76 -0
  300. aip_agents/sandbox/providers/base.py +392 -0
  301. aip_agents/sandbox/providers/bedrock.py +28 -0
  302. aip_agents/sandbox/providers/e2b.py +230 -0
  303. aip_agents/sandbox/providers/opensandbox.py +163 -0
  304. aip_agents/sandbox/sandbox_runtime.py +967 -0
  305. aip_agents/sandbox/template_builder.py +240 -0
  306. aip_agents/sandbox/types.py +141 -0
  307. aip_agents/sandbox/validation.py +50 -0
  308. aip_agents/schema/__init__.py +106 -0
  309. aip_agents/schema/a2a.py +58 -0
  310. aip_agents/schema/agent.py +117 -0
  311. aip_agents/schema/artifacts.py +75 -0
  312. aip_agents/schema/attachments.py +425 -0
  313. aip_agents/schema/hitl.py +157 -0
  314. aip_agents/schema/langgraph.py +47 -0
  315. aip_agents/schema/model_id.py +103 -0
  316. aip_agents/schema/model_usage.py +50 -0
  317. aip_agents/schema/runtime_metadata.py +78 -0
  318. aip_agents/schema/step_limit.py +108 -0
  319. aip_agents/schema/storage.py +40 -0
  320. aip_agents/schema/tool_payloads.py +68 -0
  321. aip_agents/sentry/__init__.py +11 -0
  322. aip_agents/sentry/sentry.py +267 -0
  323. aip_agents/skills/__init__.py +30 -0
  324. aip_agents/skills/errors.py +110 -0
  325. aip_agents/skills/installer.py +479 -0
  326. aip_agents/skills/models.py +769 -0
  327. aip_agents/skills/stager.py +224 -0
  328. aip_agents/skills/validation.py +53 -0
  329. aip_agents/storage/__init__.py +41 -0
  330. aip_agents/storage/base.py +85 -0
  331. aip_agents/storage/clients/__init__.py +12 -0
  332. aip_agents/storage/clients/minio_client.py +318 -0
  333. aip_agents/storage/config.py +62 -0
  334. aip_agents/storage/providers/__init__.py +15 -0
  335. aip_agents/storage/providers/base.py +106 -0
  336. aip_agents/storage/providers/memory.py +114 -0
  337. aip_agents/storage/providers/object_storage.py +214 -0
  338. aip_agents/tools/__init__.py +65 -0
  339. aip_agents/tools/agent_schedule_tool.py +392 -0
  340. aip_agents/tools/browser_use/__init__.py +83 -0
  341. aip_agents/tools/browser_use/action_parser.py +104 -0
  342. aip_agents/tools/browser_use/browser_use_tool.py +1118 -0
  343. aip_agents/tools/browser_use/llm_config.py +120 -0
  344. aip_agents/tools/browser_use/minio_storage.py +203 -0
  345. aip_agents/tools/browser_use/schemas.py +121 -0
  346. aip_agents/tools/browser_use/session.py +13 -0
  347. aip_agents/tools/browser_use/session_errors.py +132 -0
  348. aip_agents/tools/browser_use/steel_session_recording.py +321 -0
  349. aip_agents/tools/browser_use/streaming.py +263 -0
  350. aip_agents/tools/browser_use/structured_data_parser.py +257 -0
  351. aip_agents/tools/browser_use/structured_data_recovery.py +204 -0
  352. aip_agents/tools/browser_use/types.py +37 -0
  353. aip_agents/tools/code_sandbox/__init__.py +48 -0
  354. aip_agents/tools/code_sandbox/code_sandbox_tool.py +350 -0
  355. aip_agents/tools/code_sandbox/constant.py +13 -0
  356. aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.py +346 -0
  357. aip_agents/tools/code_sandbox/e2b_sandbox_tool.py +65 -0
  358. aip_agents/tools/computer_use/__init__.py +75 -0
  359. aip_agents/tools/computer_use/computer_use_tool.py +910 -0
  360. aip_agents/tools/computer_use/schemas.py +78 -0
  361. aip_agents/tools/computer_use/streaming.py +198 -0
  362. aip_agents/tools/computer_use/types.py +32 -0
  363. aip_agents/tools/constants.py +177 -0
  364. aip_agents/tools/date_range_tool.py +554 -0
  365. aip_agents/tools/document_loader/__init__.py +44 -0
  366. aip_agents/tools/document_loader/base_reader.py +302 -0
  367. aip_agents/tools/document_loader/docx_reader_tool.py +68 -0
  368. aip_agents/tools/document_loader/excel_reader_tool.py +171 -0
  369. aip_agents/tools/document_loader/pdf_reader_tool.py +79 -0
  370. aip_agents/tools/document_loader/pdf_splitter.py +169 -0
  371. aip_agents/tools/execute_ptc_code.py +582 -0
  372. aip_agents/tools/gl_connector/__init__.py +5 -0
  373. aip_agents/tools/gl_connector/tool.py +518 -0
  374. aip_agents/tools/gl_connector_tools.py +170 -0
  375. aip_agents/tools/memory_search/__init__.py +29 -0
  376. aip_agents/tools/memory_search/base.py +213 -0
  377. aip_agents/tools/memory_search/mem0.py +424 -0
  378. aip_agents/tools/memory_search/schema.py +81 -0
  379. aip_agents/tools/memory_search_tool.py +34 -0
  380. aip_agents/tools/streaming_common.py +577 -0
  381. aip_agents/tools/time_tool.py +117 -0
  382. aip_agents/tools/tool_config_injector.py +300 -0
  383. aip_agents/tools/web_search/__init__.py +15 -0
  384. aip_agents/tools/web_search/serper_tool.py +187 -0
  385. aip_agents/types/__init__.py +73 -0
  386. aip_agents/types/a2a_events.py +13 -0
  387. aip_agents/utils/__init__.py +91 -0
  388. aip_agents/utils/a2a_connector.py +1758 -0
  389. aip_agents/utils/artifact_helpers.py +542 -0
  390. aip_agents/utils/artifacts/__init__.py +20 -0
  391. aip_agents/utils/artifacts/tracker.py +367 -0
  392. aip_agents/utils/attachment_helpers.py +178 -0
  393. aip_agents/utils/constants.py +22 -0
  394. aip_agents/utils/datetime/__init__.py +34 -0
  395. aip_agents/utils/datetime/normalization.py +231 -0
  396. aip_agents/utils/datetime/timezone.py +206 -0
  397. aip_agents/utils/env_loader.py +27 -0
  398. aip_agents/utils/event_handler_registry.py +58 -0
  399. aip_agents/utils/file_prompt_utils.py +276 -0
  400. aip_agents/utils/file_watchers/__init__.py +33 -0
  401. aip_agents/utils/file_watchers/base.py +46 -0
  402. aip_agents/utils/file_watchers/e2b.py +128 -0
  403. aip_agents/utils/file_watchers/factory.py +39 -0
  404. aip_agents/utils/file_watchers/ls_diff.py +88 -0
  405. aip_agents/utils/file_watchers/sandbox.py +66 -0
  406. aip_agents/utils/file_watchers/watchdog.py +97 -0
  407. aip_agents/utils/final_response_builder.py +211 -0
  408. aip_agents/utils/formatter_llm_client.py +258 -0
  409. aip_agents/utils/langgraph/__init__.py +19 -0
  410. aip_agents/utils/langgraph/converter.py +399 -0
  411. aip_agents/utils/langgraph/delegation_context.py +22 -0
  412. aip_agents/utils/langgraph/tool_managers/__init__.py +15 -0
  413. aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.py +99 -0
  414. aip_agents/utils/langgraph/tool_managers/base_tool_manager.py +66 -0
  415. aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +1329 -0
  416. aip_agents/utils/langgraph/tool_output_management.py +1047 -0
  417. aip_agents/utils/logger.py +195 -0
  418. aip_agents/utils/metadata/__init__.py +27 -0
  419. aip_agents/utils/metadata/activity_metadata_helper.py +407 -0
  420. aip_agents/utils/metadata/activity_narrative/__init__.py +35 -0
  421. aip_agents/utils/metadata/activity_narrative/builder.py +822 -0
  422. aip_agents/utils/metadata/activity_narrative/constants.py +51 -0
  423. aip_agents/utils/metadata/activity_narrative/context.py +49 -0
  424. aip_agents/utils/metadata/activity_narrative/formatters.py +230 -0
  425. aip_agents/utils/metadata/activity_narrative/utils.py +35 -0
  426. aip_agents/utils/metadata/schemas/__init__.py +16 -0
  427. aip_agents/utils/metadata/schemas/activity_schema.py +29 -0
  428. aip_agents/utils/metadata/schemas/thinking_schema.py +31 -0
  429. aip_agents/utils/metadata/thinking_metadata_helper.py +38 -0
  430. aip_agents/utils/metadata_helper.py +363 -0
  431. aip_agents/utils/name_preprocessor/__init__.py +17 -0
  432. aip_agents/utils/name_preprocessor/base_name_preprocessor.py +73 -0
  433. aip_agents/utils/name_preprocessor/google_name_preprocessor.py +100 -0
  434. aip_agents/utils/name_preprocessor/name_preprocessor.py +87 -0
  435. aip_agents/utils/name_preprocessor/openai_name_preprocessor.py +48 -0
  436. aip_agents/utils/pii/__init__.py +29 -0
  437. aip_agents/utils/pii/pii_handler.py +555 -0
  438. aip_agents/utils/pii/pii_helper.py +225 -0
  439. aip_agents/utils/pii/uuid_deanonymizer_mapping.py +195 -0
  440. aip_agents/utils/reference_helper.py +273 -0
  441. aip_agents/utils/sse_chunk_transformer.py +836 -0
  442. aip_agents/utils/step_limit_manager.py +265 -0
  443. aip_agents/utils/token_usage_helper.py +531 -0
  444. aip_agents_binary-0.0.0.dist-info/METADATA +825 -0
  445. aip_agents_binary-0.0.0.dist-info/RECORD +447 -0
  446. aip_agents_binary-0.0.0.dist-info/WHEEL +5 -0
  447. 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