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,232 @@
1
+ """Type definitions and constants for A2A artifact generation.
2
+
3
+ This module provides common MIME types, artifact types, and other constants
4
+ used in A2A artifact generation to ensure consistency across the codebase.
5
+
6
+ Authors:
7
+ Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
8
+ """
9
+
10
+ import base64
11
+ from enum import StrEnum
12
+ from typing import Any
13
+
14
+ from pydantic import BaseModel, Field, field_validator
15
+
16
+
17
+ class MimeType(StrEnum):
18
+ """Common MIME types for A2A artifacts.
19
+
20
+ This class provides constants for commonly used MIME types in artifact generation,
21
+ ensuring consistency and reducing typos across the codebase.
22
+ """
23
+
24
+ # Text formats
25
+ TEXT_PLAIN = "text/plain"
26
+ TEXT_HTML = "text/html"
27
+ TEXT_CSS = "text/css"
28
+ TEXT_JAVASCRIPT = "text/javascript"
29
+ TEXT_CSV = "text/csv"
30
+ TEXT_XML = "text/xml"
31
+ TEXT_MARKDOWN = "text/markdown"
32
+
33
+ # Application formats
34
+ APPLICATION_JSON = "application/json"
35
+ APPLICATION_XML = "application/xml"
36
+ APPLICATION_PDF = "application/pdf"
37
+ APPLICATION_ZIP = "application/zip"
38
+ APPLICATION_GZIP = "application/gzip"
39
+ APPLICATION_TAR = "application/x-tar"
40
+ APPLICATION_OCTET_STREAM = "application/octet-stream"
41
+
42
+ # Microsoft Office formats
43
+ APPLICATION_MSWORD = "application/msword"
44
+ APPLICATION_EXCEL = "application/vnd.ms-excel"
45
+ APPLICATION_POWERPOINT = "application/vnd.ms-powerpoint"
46
+ APPLICATION_DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
47
+ APPLICATION_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
48
+ APPLICATION_PPTX = "application/vnd.openxmlformats-officedocument.presentationml.presentation"
49
+
50
+ # Image formats
51
+ IMAGE_JPEG = "image/jpeg"
52
+ IMAGE_PNG = "image/png"
53
+ IMAGE_GIF = "image/gif"
54
+ IMAGE_WEBP = "image/webp"
55
+ IMAGE_SVG = "image/svg+xml"
56
+ IMAGE_BMP = "image/bmp"
57
+ IMAGE_TIFF = "image/tiff"
58
+ IMAGE_ICO = "image/x-icon"
59
+
60
+ # Audio formats
61
+ AUDIO_MP3 = "audio/mpeg"
62
+ AUDIO_WAV = "audio/wav"
63
+ AUDIO_OGG = "audio/ogg"
64
+ AUDIO_AAC = "audio/aac"
65
+ AUDIO_FLAC = "audio/flac"
66
+
67
+ # Video formats
68
+ VIDEO_MP4 = "video/mp4"
69
+ VIDEO_AVI = "video/x-msvideo"
70
+ VIDEO_MOV = "video/quicktime"
71
+ VIDEO_WMV = "video/x-ms-wmv"
72
+ VIDEO_WEBM = "video/webm"
73
+ VIDEO_MKV = "video/x-matroska"
74
+
75
+ # Font formats
76
+ FONT_TTF = "font/ttf"
77
+ FONT_OTF = "font/otf"
78
+ FONT_WOFF = "font/woff"
79
+ FONT_WOFF2 = "font/woff2"
80
+
81
+
82
+ class ArtifactType(StrEnum):
83
+ """Common artifact types for A2A artifacts.
84
+
85
+ This class provides constants for artifact types used in the A2A protocol.
86
+ """
87
+
88
+ FILE = "file"
89
+ DATA = "data"
90
+ TEXT = "text"
91
+
92
+
93
+ # Common file extension to MIME type mappings
94
+ EXTENSION_TO_MIME_TYPE = {
95
+ # Text files
96
+ ".txt": MimeType.TEXT_PLAIN,
97
+ ".html": MimeType.TEXT_HTML,
98
+ ".htm": MimeType.TEXT_HTML,
99
+ ".css": MimeType.TEXT_CSS,
100
+ ".js": MimeType.TEXT_JAVASCRIPT,
101
+ ".csv": MimeType.TEXT_CSV,
102
+ ".xml": MimeType.TEXT_XML,
103
+ ".md": MimeType.TEXT_MARKDOWN,
104
+ ".markdown": MimeType.TEXT_MARKDOWN,
105
+ # Application files
106
+ ".json": MimeType.APPLICATION_JSON,
107
+ ".pdf": MimeType.APPLICATION_PDF,
108
+ ".zip": MimeType.APPLICATION_ZIP,
109
+ ".gz": MimeType.APPLICATION_GZIP,
110
+ ".tar": MimeType.APPLICATION_TAR,
111
+ # Microsoft Office
112
+ ".doc": MimeType.APPLICATION_MSWORD,
113
+ ".xls": MimeType.APPLICATION_EXCEL,
114
+ ".ppt": MimeType.APPLICATION_POWERPOINT,
115
+ ".docx": MimeType.APPLICATION_DOCX,
116
+ ".xlsx": MimeType.APPLICATION_XLSX,
117
+ ".pptx": MimeType.APPLICATION_PPTX,
118
+ # Images
119
+ ".jpg": MimeType.IMAGE_JPEG,
120
+ ".jpeg": MimeType.IMAGE_JPEG,
121
+ ".png": MimeType.IMAGE_PNG,
122
+ ".gif": MimeType.IMAGE_GIF,
123
+ ".webp": MimeType.IMAGE_WEBP,
124
+ ".svg": MimeType.IMAGE_SVG,
125
+ ".bmp": MimeType.IMAGE_BMP,
126
+ ".tiff": MimeType.IMAGE_TIFF,
127
+ ".tif": MimeType.IMAGE_TIFF,
128
+ ".ico": MimeType.IMAGE_ICO,
129
+ # Audio
130
+ ".mp3": MimeType.AUDIO_MP3,
131
+ ".wav": MimeType.AUDIO_WAV,
132
+ ".ogg": MimeType.AUDIO_OGG,
133
+ ".aac": MimeType.AUDIO_AAC,
134
+ ".flac": MimeType.AUDIO_FLAC,
135
+ # Video
136
+ ".mp4": MimeType.VIDEO_MP4,
137
+ ".avi": MimeType.VIDEO_AVI,
138
+ ".mov": MimeType.VIDEO_MOV,
139
+ ".wmv": MimeType.VIDEO_WMV,
140
+ ".webm": MimeType.VIDEO_WEBM,
141
+ ".mkv": MimeType.VIDEO_MKV,
142
+ # Fonts
143
+ ".ttf": MimeType.FONT_TTF,
144
+ ".otf": MimeType.FONT_OTF,
145
+ ".woff": MimeType.FONT_WOFF,
146
+ ".woff2": MimeType.FONT_WOFF2,
147
+ }
148
+ MIME_TYPE_TO_EXTENSION = {v: k for k, v in EXTENSION_TO_MIME_TYPE.items()}
149
+
150
+
151
+ def get_mime_type_from_filename(filename: str) -> str:
152
+ """Get MIME type from filename extension.
153
+
154
+ Args:
155
+ filename: The filename to get the MIME type for.
156
+
157
+ Returns:
158
+ The MIME type string, or application/octet-stream if unknown.
159
+
160
+ Example:
161
+ >>> get_mime_type_from_filename("data.csv")
162
+ 'text/csv'
163
+ >>> get_mime_type_from_filename("image.png")
164
+ 'image/png'
165
+ >>> get_mime_type_from_filename("unknown.xyz")
166
+ 'application/octet-stream'
167
+ """
168
+ if "." not in filename:
169
+ return MimeType.APPLICATION_OCTET_STREAM
170
+
171
+ extension = "." + filename.split(".")[-1].lower()
172
+ return EXTENSION_TO_MIME_TYPE.get(extension, MimeType.APPLICATION_OCTET_STREAM)
173
+
174
+
175
+ def get_extension_from_mime_type(mime_type: str) -> str | None:
176
+ """Get file extension from MIME type.
177
+
178
+ Args:
179
+ mime_type: The MIME type to get the extension for.
180
+
181
+ Returns:
182
+ The file extension (with dot) or None if not found.
183
+
184
+ Example:
185
+ >>> get_extension_from_mime_type("text/csv")
186
+ '.csv'
187
+ >>> get_extension_from_mime_type("image/png")
188
+ '.png'
189
+ >>> get_extension_from_mime_type("unknown/type")
190
+ None
191
+ """
192
+ return MIME_TYPE_TO_EXTENSION.get(mime_type)
193
+
194
+
195
+ class Artifact(BaseModel):
196
+ """Represents an artifact payload used by A2A helpers and executors.
197
+
198
+ This model standardizes the structure for artifacts generated by tools and
199
+ passed through the A2A pipeline.
200
+
201
+ Attributes:
202
+ artifact_type (ArtifactType): The type of artifact. Defaults to FILE.
203
+ data (str): Base64-encoded content of the artifact.
204
+ name (str): Display name or filename of the artifact.
205
+ description (str): Optional description for the artifact. Defaults to empty string.
206
+ mime_type (str): MIME type of the artifact content.
207
+ metadata (dict[str, Any] | None): Optional per-artifact metadata to pass through.
208
+ """
209
+
210
+ artifact_type: ArtifactType = Field(default=ArtifactType.FILE)
211
+ data: str
212
+ name: str
213
+ description: str = ""
214
+ mime_type: str
215
+ metadata: dict[str, Any] | None = None
216
+
217
+ @field_validator("data")
218
+ @classmethod
219
+ def validate_base64(cls, v: str) -> str:
220
+ """Validate that 'data' is a valid base64 string.
221
+
222
+ Args:
223
+ v (str): The base64 string to validate.
224
+
225
+ Returns:
226
+ str: The validated base64 string if valid.
227
+ """
228
+ try:
229
+ base64.b64decode(v, validate=True)
230
+ except Exception as exc: # noqa: BLE001
231
+ raise ValueError("Artifact.data must be a valid base64-encoded string") from exc
232
+ return v
@@ -0,0 +1,26 @@
1
+ """A2UI package for aip-agents.
2
+
3
+ This package hosts protocol models and middleware used to support
4
+ agent-driven UI payloads in the v0.8 standard-catalog slice.
5
+
6
+ Authors:
7
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from aip_agents.a2ui.middleware import A2UIMiddleware
13
+ from aip_agents.a2ui.models import (
14
+ A2UIActionContext,
15
+ A2UIActionValidationResult,
16
+ A2UIContentMetadata,
17
+ A2UIContext,
18
+ )
19
+
20
+ __all__ = [
21
+ "A2UIMiddleware",
22
+ "A2UIActionContext",
23
+ "A2UIActionValidationResult",
24
+ "A2UIContentMetadata",
25
+ "A2UIContext",
26
+ ]
@@ -0,0 +1,109 @@
1
+ """URL-backed A2UI catalog providers for public unauthenticated endpoints.
2
+
3
+ Authors:
4
+ Reinhart Linanda (reinhart.linanda@gdplabs.id)
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+ import os
11
+ import shutil
12
+ import tempfile
13
+ from json.decoder import JSONDecodeError
14
+ from typing import Any
15
+ from urllib.parse import urlparse
16
+
17
+ import requests
18
+ from a2ui.schema.catalog_provider import A2uiCatalogProvider
19
+
20
+ from aip_agents.a2ui.public_url import DEFAULT_PUBLIC_URL_FETCH_TIMEOUT_SECONDS, fetch_public_url
21
+
22
+
23
+ def materialize_example_urls(
24
+ example_urls: list[str],
25
+ *,
26
+ session: requests.Session | None = None,
27
+ timeout: float = DEFAULT_PUBLIC_URL_FETCH_TIMEOUT_SECONDS,
28
+ ) -> str:
29
+ """Download public example JSON documents into a temp directory."""
30
+ if not example_urls:
31
+ raise ValueError("example_urls must not be empty")
32
+
33
+ http_session = session or requests.Session()
34
+ temp_dir = tempfile.mkdtemp(prefix="a2ui-example-fixtures-")
35
+ used_names: set[str] = set()
36
+
37
+ try:
38
+ for index, url in enumerate(example_urls):
39
+ try:
40
+ response = fetch_public_url(url, session=http_session, timeout=timeout)
41
+ content = response.text
42
+ json.loads(content)
43
+ except OSError as exc:
44
+ raise OSError(f"Could not fetch example from {url}: {exc}") from exc
45
+ except JSONDecodeError as exc:
46
+ raise OSError(f"Example at {url} is not valid JSON: {exc}") from exc
47
+
48
+ parsed = urlparse(url)
49
+ basename = os.path.basename(parsed.path.rstrip("/")) or f"example-{index}.json"
50
+ if not basename.endswith(".json"):
51
+ basename = f"{basename}.json"
52
+ if basename in used_names:
53
+ basename = f"{index}-{basename}"
54
+ used_names.add(basename)
55
+
56
+ example_path = os.path.join(temp_dir, basename)
57
+ with open(example_path, "w", encoding="utf-8") as example_file:
58
+ example_file.write(content)
59
+
60
+ return temp_dir
61
+ except Exception:
62
+ shutil.rmtree(temp_dir, ignore_errors=True)
63
+ raise
64
+
65
+
66
+ def release_materialized_example_dirs(example_dirs: list[str]) -> None:
67
+ """Remove temp directories created while materializing remote example fixtures."""
68
+ for examples_dir in example_dirs:
69
+ shutil.rmtree(examples_dir, ignore_errors=True)
70
+
71
+
72
+ class UrlCatalogProvider(A2uiCatalogProvider):
73
+ """Loads catalog definitions from public HTTP/HTTPS URLs without authentication."""
74
+
75
+ def __init__(
76
+ self,
77
+ url: str,
78
+ *,
79
+ session: requests.Session | None = None,
80
+ timeout: float = DEFAULT_PUBLIC_URL_FETCH_TIMEOUT_SECONDS,
81
+ ) -> None:
82
+ """Initialize the URL catalog provider."""
83
+ self.url = url
84
+ self.timeout = timeout
85
+ self._session = session or requests.Session()
86
+
87
+ def load(self) -> dict[str, Any]:
88
+ """Fetch and parse a catalog JSON document from the configured URL."""
89
+ try:
90
+ response = fetch_public_url(self.url, session=self._session, timeout=self.timeout)
91
+ except OSError as exc:
92
+ raise OSError(f"Could not fetch catalog from {self.url}: {exc}") from exc
93
+
94
+ try:
95
+ catalog = response.json()
96
+ except JSONDecodeError as exc:
97
+ raise OSError(f"Catalog at {self.url} is not valid JSON: {exc}") from exc
98
+
99
+ if not isinstance(catalog, dict):
100
+ raise OSError(f"Catalog at {self.url} must be a JSON object")
101
+
102
+ return catalog
103
+
104
+
105
+ __all__ = [
106
+ "UrlCatalogProvider",
107
+ "materialize_example_urls",
108
+ "release_materialized_example_dirs",
109
+ ]
@@ -0,0 +1 @@
1
+ [{"beginRendering":{"surfaceId":"booking-form","root":"booking-form-column","styles":{"primaryColor":"#FF0000","font":"Roboto"}}},{"surfaceUpdate":{"surfaceId":"booking-form","components":[{"id":"booking-form-column","component":{"Column":{"children":{"explicitList":["booking-title","restaurant-image","restaurant-address","party-size-field","datetime-field","dietary-field","submit-button"]}}}},{"id":"booking-title","component":{"Text":{"usageHint":"h2","text":{"path":"/title"}}}},{"id":"restaurant-image","component":{"Image":{"url":{"path":"/imageUrl"}}}},{"id":"restaurant-address","component":{"Text":{"text":{"path":"/address"}}}},{"id":"party-size-field","component":{"TextField":{"label":{"literalString":"Party Size"},"text":{"path":"/partySize"},"textFieldType":"number"}}},{"id":"datetime-field","component":{"DateTimeInput":{"label":{"literalString":"Date & Time"},"value":{"path":"/reservationTime"},"enableDate":true,"enableTime":true}}},{"id":"dietary-field","component":{"TextField":{"label":{"literalString":"Dietary Requirements"},"text":{"path":"/dietary"}}}},{"id":"submit-button","component":{"Button":{"child":"submit-reservation-text","action":{"name":"submit_booking","context":[{"key":"restaurantName","value":{"path":"/restaurantName"}},{"key":"partySize","value":{"path":"/partySize"}},{"key":"reservationTime","value":{"path":"/reservationTime"}},{"key":"dietary","value":{"path":"/dietary"}},{"key":"imageUrl","value":{"path":"/imageUrl"}}]}}}},{"id":"submit-reservation-text","component":{"Text":{"text":{"literalString":"Submit Reservation"}}}}]}},{"dataModelUpdate":{"surfaceId":"booking-form","path":"/","contents":[{"key":"title","valueString":"Book a Table at [RestaurantName]"},{"key":"address","valueString":"[Restaurant Address]"},{"key":"restaurantName","valueString":"[RestaurantName]"},{"key":"partySize","valueString":"2"},{"key":"reservationTime","valueString":""},{"key":"dietary","valueString":""},{"key":"imageUrl","valueString":""}]}}]
@@ -0,0 +1 @@
1
+ [{"beginRendering":{"surfaceId":"confirmation","root":"confirmation-card","styles":{"primaryColor":"#FF0000","font":"Roboto"}}},{"surfaceUpdate":{"surfaceId":"confirmation","components":[{"id":"confirmation-card","component":{"Card":{"child":"confirmation-column"}}},{"id":"confirmation-column","component":{"Column":{"children":{"explicitList":["confirm-title","confirm-image","divider1","confirm-details","divider2","confirm-dietary","divider3","confirm-text"]}}}},{"id":"confirm-title","component":{"Text":{"usageHint":"h2","text":{"path":"/title"}}}},{"id":"confirm-image","component":{"Image":{"url":{"path":"/imageUrl"}}}},{"id":"confirm-details","component":{"Text":{"text":{"path":"/bookingDetails"}}}},{"id":"confirm-dietary","component":{"Text":{"text":{"path":"/dietaryRequirements"}}}},{"id":"confirm-text","component":{"Text":{"usageHint":"h5","text":{"literalString":"We look forward to seeing you!"}}}},{"id":"divider1","component":{"Divider":{}}},{"id":"divider2","component":{"Divider":{}}},{"id":"divider3","component":{"Divider":{}}}]}},{"dataModelUpdate":{"surfaceId":"confirmation","path":"/","contents":[{"key":"title","valueString":"Booking at [RestaurantName]"},{"key":"bookingDetails","valueString":"[PartySize] people at [Time]"},{"key":"dietaryRequirements","valueString":"Dietary Requirements: [Requirements]"},{"key":"imageUrl","valueString":"[ImageUrl]"}]}}]
@@ -0,0 +1 @@
1
+ [{"beginRendering":{"surfaceId":"default","root":"root-column","styles":{"primaryColor":"#FF0000","font":"Roboto"}}},{"surfaceUpdate":{"surfaceId":"default","components":[{"id":"root-column","component":{"Column":{"children":{"explicitList":["title-heading","item-list"]}}}},{"id":"title-heading","component":{"Text":{"usageHint":"h1","text":{"path":"/title"}}}},{"id":"item-list","component":{"List":{"direction":"vertical","children":{"template":{"componentId":"item-card-template","dataBinding":"/items"}}}}},{"id":"item-card-template","component":{"Card":{"child":"card-layout"}}},{"id":"card-layout","component":{"Row":{"children":{"explicitList":["template-image","card-details"]}}}},{"id":"template-image","weight":1,"component":{"Image":{"url":{"path":"/imageUrl"}}}},{"id":"card-details","weight":2,"component":{"Column":{"children":{"explicitList":["template-name","template-rating","template-detail","template-link","template-book-button"]}}}},{"id":"template-name","component":{"Text":{"usageHint":"h3","text":{"path":"/name"}}}},{"id":"template-rating","component":{"Text":{"text":{"path":"/rating"}}}},{"id":"template-detail","component":{"Text":{"text":{"path":"/detail"}}}},{"id":"template-link","component":{"Text":{"text":{"path":"/infoLink"}}}},{"id":"template-book-button","component":{"Button":{"child":"book-now-text","primary":true,"action":{"name":"book_restaurant","context":[{"key":"restaurantName","value":{"path":"/name"}},{"key":"imageUrl","value":{"path":"/imageUrl"}},{"key":"address","value":{"path":"/address"}}]}}}},{"id":"book-now-text","component":{"Text":{"text":{"literalString":"Book Now"}}}}]}},{"dataModelUpdate":{"surfaceId":"default","path":"/","contents":[{"key":"items","valueMap":[{"key":"item1","valueMap":[{"key":"name","valueString":"The Fancy Place"},{"key":"rating","valueNumber":4.8},{"key":"detail","valueString":"Fine dining experience"},{"key":"infoLink","valueString":"https://example.com/fancy"},{"key":"imageUrl","valueString":"https://example.com/fancy.jpg"},{"key":"address","valueString":"123 Main St"}]},{"key":"item2","valueMap":[{"key":"name","valueString":"Quick Bites"},{"key":"rating","valueNumber":4.2},{"key":"detail","valueString":"Casual and fast"},{"key":"infoLink","valueString":"https://example.com/quick"},{"key":"imageUrl","valueString":"https://example.com/quick.jpg"},{"key":"address","valueString":"456 Oak Ave"}]}]}]}}]
@@ -0,0 +1 @@
1
+ [{"version":"v0.9","createSurface":{"surfaceId":"booking-form","catalogId":"https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json","theme":{"primaryColor":"#FF0000","font":"Roboto"}}},{"version":"v0.9","updateComponents":{"surfaceId":"booking-form","components":[{"id":"root","component":"Column","children":["booking-title","restaurant-image","restaurant-address","party-size-field","datetime-field","dietary-field","submit-button"]},{"id":"booking-title","component":"Text","variant":"h2","text":{"path":"/title"}},{"id":"restaurant-image","component":"Image","url":{"path":"/imageUrl"}},{"id":"restaurant-address","component":"Text","text":{"path":"/address"}},{"id":"party-size-field","component":"TextField","label":"Party Size","value":{"path":"/partySize"},"variant":"number"},{"id":"datetime-field","component":"DateTimeInput","label":"Date & Time","value":{"path":"/reservationTime"},"enableDate":true,"enableTime":true},{"id":"dietary-field","component":"TextField","label":"Dietary Requirements","value":{"path":"/dietary"}},{"id":"submit-button","component":"Button","child":"submit-reservation-text","action":{"event":{"name":"submit_booking","context":{"restaurantName":{"path":"/restaurantName"},"partySize":{"path":"/partySize"},"reservationTime":{"path":"/reservationTime"},"dietary":{"path":"/dietary"},"imageUrl":{"path":"/imageUrl"}}}}},{"id":"submit-reservation-text","component":"Text","text":"Submit Reservation"}]}},{"version":"v0.9","updateDataModel":{"surfaceId":"booking-form","path":"/","value":{"title":"Book a Table at [RestaurantName]","address":"[Restaurant Address]","restaurantName":"[RestaurantName]","partySize":"2","reservationTime":"","dietary":"","imageUrl":""}}}]
@@ -0,0 +1 @@
1
+ [{"version":"v0.9","createSurface":{"surfaceId":"confirmation","catalogId":"https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json","theme":{"primaryColor":"#FF0000","font":"Roboto"}}},{"version":"v0.9","updateComponents":{"surfaceId":"confirmation","components":[{"id":"root","component":"Card","child":"confirmation-column"},{"id":"confirmation-column","component":"Column","children":["confirm-title","confirm-image","divider1","confirm-details","divider2","confirm-dietary","divider3","confirm-text"]},{"id":"confirm-title","component":"Text","variant":"h2","text":{"path":"/title"}},{"id":"confirm-image","component":"Image","url":{"path":"/imageUrl"}},{"id":"confirm-details","component":"Text","text":{"path":"/bookingDetails"}},{"id":"confirm-dietary","component":"Text","text":{"path":"/dietaryRequirements"}},{"id":"confirm-text","component":"Text","variant":"h5","text":"We look forward to seeing you!"},{"id":"divider1","component":"Divider"},{"id":"divider2","component":"Divider"},{"id":"divider3","component":"Divider"}]}},{"version":"v0.9","updateDataModel":{"surfaceId":"confirmation","path":"/","value":{"title":"Booking at [RestaurantName]","bookingDetails":"[PartySize] people at [Time]","dietaryRequirements":"Dietary Requirements: [Requirements]","imageUrl":"[ImageUrl]"}}}]
@@ -0,0 +1 @@
1
+ [{"version":"v0.9","createSurface":{"surfaceId":"default","catalogId":"https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json","theme":{"primaryColor":"#FF0000","font":"Roboto"}}},{"version":"v0.9","updateComponents":{"surfaceId":"default","components":[{"id":"root","component":"Column","children":["title-heading","item-list"]},{"id":"title-heading","component":"Text","variant":"h1","text":{"path":"/title"}},{"id":"item-list","component":"List","direction":"vertical","children":{"componentId":"item-card-template","path":"/items"}},{"id":"item-card-template","component":"Card","child":"card-layout"},{"id":"card-layout","component":"Row","children":["card-image","card-details"]},{"id":"card-image","component":"Image","variant":"mediumFeature","weight":1,"url":{"path":"imageUrl"}},{"id":"card-details","component":"Column","weight":2,"children":["template-name","template-rating","template-detail","template-link","template-book-button"]},{"id":"template-name","component":"Text","variant":"h3","text":{"path":"name"}},{"id":"template-rating","component":"Text","text":{"path":"rating"}},{"id":"template-detail","component":"Text","text":{"path":"detail"}},{"id":"template-link","component":"Text","text":{"path":"infoLink"}},{"id":"template-book-button","component":"Button","child":"book-now-text","variant":"primary","action":{"event":{"name":"book_restaurant","context":{"restaurantName":{"path":"name"},"imageUrl":{"path":"imageUrl"},"address":{"path":"address"}}}}},{"id":"book-now-text","component":"Text","text":"Book Now"}]}},{"version":"v0.9","updateDataModel":{"surfaceId":"default","path":"/title","value":"Found Restaurants"}},{"version":"v0.9","updateDataModel":{"surfaceId":"default","path":"/items","value":[{"name":"The Fancy Place","rating":4.8,"detail":"Fine dining experience","infoLink":"https://fancyplace.com","imageUrl":"https://picsum.photos/200/300?random=1","address":"123 Luxury Ave, Food City"},{"name":"Quick Bites","rating":4.2,"detail":"Casual and fast","infoLink":"https://quickbites.com","imageUrl":"https://picsum.photos/200/300?random=2","address":"456 Fast Lane, Quick Town"}]}}]