@google/adk 0.6.0 → 1.0.0
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.
- package/dist/cjs/a2a/a2a_remote_agent.js +18 -13
- package/dist/cjs/a2a/a2a_remote_agent_run_processor.js +7 -0
- package/dist/cjs/agents/base_agent.js +11 -2
- package/dist/cjs/agents/context.js +1 -0
- package/dist/cjs/agents/functions.js +1 -0
- package/dist/cjs/agents/invocation_context.js +1 -0
- package/dist/cjs/agents/llm_agent.js +70 -13
- package/dist/cjs/agents/loop_agent.js +4 -0
- package/dist/cjs/agents/parallel_agent.js +4 -0
- package/dist/cjs/agents/processors/code_execution_request_processor.js +2 -0
- package/dist/cjs/agents/processors/context_compactor_request_processor.js +9 -0
- package/dist/cjs/agents/processors/tool_filter_request_processor.js +73 -0
- package/dist/cjs/agents/routed_agent.js +97 -0
- package/dist/cjs/auth/auth_handler.js +66 -1
- package/dist/cjs/auth/auth_preprocessor.js +178 -0
- package/dist/cjs/auth/auth_provider_registry.js +61 -0
- package/dist/cjs/auth/base_auth_provider.js +27 -0
- package/dist/cjs/auth/credential_service/session_state_credential_service.js +51 -0
- package/dist/cjs/auth/oauth2/oauth2_credential_exchanger.js +198 -0
- package/dist/cjs/auth/oauth2/oauth2_credential_refresher.js +109 -0
- package/dist/cjs/auth/oauth2/oauth2_discovery.js +186 -0
- package/dist/cjs/auth/oauth2/oauth2_utils.js +119 -0
- package/dist/cjs/auth/refresher/base_credential_refresher.js +44 -0
- package/dist/cjs/auth/refresher/credential_refresher_registry.js +68 -0
- package/dist/cjs/code_executors/base_code_executor.js +9 -5
- package/dist/cjs/code_executors/code_execution_utils.js +19 -0
- package/dist/cjs/code_executors/unsafe_local_code_executor.js +241 -0
- package/dist/cjs/common.js +61 -0
- package/dist/cjs/features/feature_registry.js +141 -0
- package/dist/cjs/index.js +32 -20
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/models/apigee_llm.js +2 -2
- package/dist/cjs/models/google_llm.js +18 -53
- package/dist/cjs/models/routed_llm.js +99 -0
- package/dist/cjs/plugins/base_plugin.js +39 -2
- package/dist/cjs/plugins/plugin_manager.js +39 -0
- package/dist/cjs/runner/runner.js +31 -3
- package/dist/cjs/sessions/db/operations.js +3 -10
- package/dist/cjs/skills/loader.js +283 -0
- package/dist/cjs/skills/prompt.js +58 -0
- package/dist/cjs/skills/skill.js +78 -0
- package/dist/cjs/tools/agent_tool.js +10 -3
- package/dist/cjs/tools/mcp/mcp_tool.js +4 -1
- package/dist/cjs/tools/skill/list_skills_tool.js +76 -0
- package/dist/cjs/tools/skill/load_skill_resource_tool.js +225 -0
- package/dist/cjs/tools/skill/load_skill_tool.js +108 -0
- package/dist/cjs/tools/skill/run_skill_inline_script_tool.js +146 -0
- package/dist/cjs/tools/skill/run_skill_script_tool.js +224 -0
- package/dist/cjs/tools/skill/skill_toolset.js +163 -0
- package/dist/cjs/utils/experimental.js +74 -0
- package/dist/cjs/utils/failover_utils.js +93 -0
- package/dist/cjs/utils/file_extension_utils.js +77 -0
- package/dist/cjs/utils/file_utils.js +94 -0
- package/dist/cjs/utils/gemini_schema_util.js +54 -12
- package/dist/cjs/utils/streaming_utils.js +333 -0
- package/dist/cjs/version.js +1 -1
- package/dist/esm/a2a/a2a_event.js +2 -0
- package/dist/esm/a2a/a2a_remote_agent.js +20 -13
- package/dist/esm/a2a/a2a_remote_agent_run_processor.js +9 -0
- package/dist/esm/a2a/a2a_remote_agent_utils.js +2 -0
- package/dist/esm/a2a/agent_card.js +2 -0
- package/dist/esm/a2a/agent_executor.js +2 -0
- package/dist/esm/a2a/agent_to_a2a.js +2 -0
- package/dist/esm/a2a/event_converter_utils.js +2 -0
- package/dist/esm/a2a/event_processor_utils.js +2 -0
- package/dist/esm/a2a/executor_context.js +2 -0
- package/dist/esm/a2a/metadata_converter_utils.js +2 -0
- package/dist/esm/a2a/part_converter_utils.js +2 -0
- package/dist/esm/agents/active_streaming_tool.js +2 -0
- package/dist/esm/agents/base_agent.js +13 -2
- package/dist/esm/agents/context.js +3 -0
- package/dist/esm/agents/functions.js +3 -0
- package/dist/esm/agents/instructions.js +2 -0
- package/dist/esm/agents/invocation_context.js +3 -0
- package/dist/esm/agents/live_request_queue.js +2 -0
- package/dist/esm/agents/llm_agent.js +72 -13
- package/dist/esm/agents/loop_agent.js +6 -0
- package/dist/esm/agents/parallel_agent.js +6 -0
- package/dist/esm/agents/processors/agent_transfer_llm_request_processor.js +2 -0
- package/dist/esm/agents/processors/base_llm_processor.js +2 -0
- package/dist/esm/agents/processors/basic_llm_request_processor.js +2 -0
- package/dist/esm/agents/processors/code_execution_request_processor.js +5 -0
- package/dist/esm/agents/processors/content_processor_utils.js +2 -0
- package/dist/esm/agents/processors/content_request_processor.js +2 -0
- package/dist/esm/agents/processors/context_compactor_request_processor.js +11 -0
- package/dist/esm/agents/processors/identity_llm_request_processor.js +2 -0
- package/dist/esm/agents/processors/instructions_llm_request_processor.js +2 -0
- package/dist/esm/agents/processors/request_confirmation_llm_request_processor.js +2 -0
- package/dist/esm/agents/processors/tool_filter_request_processor.js +44 -0
- package/dist/esm/agents/readonly_context.js +2 -0
- package/dist/esm/agents/routed_agent.js +70 -0
- package/dist/esm/agents/run_config.js +2 -0
- package/dist/esm/agents/sequential_agent.js +2 -0
- package/dist/esm/agents/transcription_entry.js +2 -0
- package/dist/esm/artifacts/base_artifact_service.js +2 -0
- package/dist/esm/artifacts/file_artifact_service.js +2 -0
- package/dist/esm/artifacts/gcs_artifact_service.js +2 -0
- package/dist/esm/artifacts/in_memory_artifact_service.js +2 -0
- package/dist/esm/artifacts/registry.js +2 -0
- package/dist/esm/auth/auth_credential.js +2 -0
- package/dist/esm/auth/auth_handler.js +68 -1
- package/dist/esm/auth/auth_preprocessor.js +155 -0
- package/dist/esm/auth/auth_provider_registry.js +33 -0
- package/dist/esm/auth/auth_schemes.js +2 -0
- package/dist/esm/auth/auth_tool.js +2 -0
- package/dist/esm/auth/base_auth_provider.js +7 -0
- package/dist/esm/auth/credential_service/base_credential_service.js +2 -0
- package/dist/esm/auth/credential_service/in_memory_credential_service.js +2 -0
- package/dist/esm/auth/credential_service/session_state_credential_service.js +23 -0
- package/dist/esm/auth/exchanger/base_credential_exchanger.js +2 -0
- package/dist/esm/auth/exchanger/credential_exchanger_registry.js +2 -0
- package/dist/esm/auth/oauth2/oauth2_credential_exchanger.js +177 -0
- package/dist/esm/auth/oauth2/oauth2_credential_refresher.js +85 -0
- package/dist/esm/auth/oauth2/oauth2_discovery.js +156 -0
- package/dist/esm/auth/oauth2/oauth2_utils.js +87 -0
- package/dist/esm/auth/refresher/base_credential_refresher.js +16 -0
- package/dist/esm/auth/refresher/credential_refresher_registry.js +40 -0
- package/dist/esm/code_executors/base_code_executor.js +11 -5
- package/dist/esm/code_executors/built_in_code_executor.js +2 -0
- package/dist/esm/code_executors/code_execution_utils.js +19 -0
- package/dist/esm/code_executors/code_executor_context.js +2 -0
- package/dist/esm/code_executors/unsafe_local_code_executor.js +205 -0
- package/dist/esm/common.js +47 -3
- package/dist/esm/context/base_context_compactor.js +2 -0
- package/dist/esm/context/summarizers/base_summarizer.js +2 -0
- package/dist/esm/context/summarizers/llm_summarizer.js +2 -0
- package/dist/esm/context/token_based_context_compactor.js +2 -0
- package/dist/esm/context/truncating_context_compactor.js +2 -0
- package/dist/esm/events/compacted_event.js +2 -0
- package/dist/esm/events/event.js +2 -0
- package/dist/esm/events/event_actions.js +2 -0
- package/dist/esm/events/structured_events.js +2 -0
- package/dist/esm/examples/base_example_provider.js +2 -0
- package/dist/esm/examples/example.js +2 -0
- package/dist/esm/examples/example_util.js +2 -0
- package/dist/esm/features/feature_registry.js +107 -0
- package/dist/esm/index.js +34 -21
- package/dist/esm/index.js.map +4 -4
- package/dist/esm/index_web.js +2 -0
- package/dist/esm/memory/base_memory_service.js +2 -0
- package/dist/esm/memory/in_memory_memory_service.js +2 -0
- package/dist/esm/memory/memory_entry.js +2 -0
- package/dist/esm/models/apigee_llm.js +4 -2
- package/dist/esm/models/base_llm.js +2 -0
- package/dist/esm/models/base_llm_connection.js +2 -0
- package/dist/esm/models/gemini_llm_connection.js +2 -0
- package/dist/esm/models/google_llm.js +20 -54
- package/dist/esm/models/llm_request.js +2 -0
- package/dist/esm/models/llm_response.js +2 -0
- package/dist/esm/models/registry.js +2 -0
- package/dist/esm/models/routed_llm.js +73 -0
- package/dist/esm/plugins/base_plugin.js +41 -1
- package/dist/esm/plugins/logging_plugin.js +2 -0
- package/dist/esm/plugins/plugin_manager.js +41 -0
- package/dist/esm/plugins/security_plugin.js +2 -0
- package/dist/esm/runner/in_memory_runner.js +2 -0
- package/dist/esm/runner/runner.js +33 -3
- package/dist/esm/sessions/base_session_service.js +2 -0
- package/dist/esm/sessions/database_session_service.js +2 -0
- package/dist/esm/sessions/db/operations.js +5 -10
- package/dist/esm/sessions/db/schema.js +2 -0
- package/dist/esm/sessions/in_memory_session_service.js +2 -0
- package/dist/esm/sessions/registry.js +2 -0
- package/dist/esm/sessions/session.js +2 -0
- package/dist/esm/sessions/state.js +2 -0
- package/dist/esm/skills/loader.js +244 -0
- package/dist/esm/skills/prompt.js +30 -0
- package/dist/esm/skills/skill.js +49 -0
- package/dist/esm/telemetry/google_cloud.js +2 -0
- package/dist/esm/telemetry/setup.js +2 -0
- package/dist/esm/telemetry/tracing.js +2 -0
- package/dist/esm/tools/agent_tool.js +12 -3
- package/dist/esm/tools/base_tool.js +2 -0
- package/dist/esm/tools/base_toolset.js +2 -0
- package/dist/esm/tools/exit_loop_tool.js +2 -0
- package/dist/esm/tools/forwarding_artifact_service.js +2 -0
- package/dist/esm/tools/function_tool.js +2 -0
- package/dist/esm/tools/google_search_tool.js +2 -0
- package/dist/esm/tools/load_artifacts_tool.js +2 -0
- package/dist/esm/tools/load_memory_tool.js +2 -0
- package/dist/esm/tools/long_running_tool.js +2 -0
- package/dist/esm/tools/mcp/mcp_session_manager.js +2 -0
- package/dist/esm/tools/mcp/mcp_tool.js +6 -1
- package/dist/esm/tools/mcp/mcp_toolset.js +2 -0
- package/dist/esm/tools/preload_memory_tool.js +2 -0
- package/dist/esm/tools/skill/list_skills_tool.js +50 -0
- package/dist/esm/tools/skill/load_skill_resource_tool.js +191 -0
- package/dist/esm/tools/skill/load_skill_tool.js +82 -0
- package/dist/esm/tools/skill/run_skill_inline_script_tool.js +120 -0
- package/dist/esm/tools/skill/run_skill_script_tool.js +192 -0
- package/dist/esm/tools/skill/skill_toolset.js +137 -0
- package/dist/esm/tools/tool_confirmation.js +2 -0
- package/dist/esm/utils/client_labels.js +2 -0
- package/dist/esm/utils/env_aware_utils.js +2 -0
- package/dist/esm/utils/experimental.js +46 -0
- package/dist/esm/utils/failover_utils.js +65 -0
- package/dist/esm/utils/file_extension_utils.js +51 -0
- package/dist/esm/utils/file_utils.js +56 -0
- package/dist/esm/utils/gemini_schema_util.js +56 -12
- package/dist/esm/utils/logger.js +2 -0
- package/dist/esm/utils/model_name.js +2 -0
- package/dist/esm/utils/object_notation_utils.js +2 -0
- package/dist/esm/utils/simple_zod_to_json.js +2 -0
- package/dist/esm/utils/streaming_utils.js +307 -0
- package/dist/esm/utils/variant_utils.js +2 -0
- package/dist/esm/version.js +3 -1
- package/dist/types/a2a/a2a_remote_agent.d.ts +7 -3
- package/dist/types/agents/context.d.ts +1 -0
- package/dist/types/agents/invocation_context.d.ts +5 -0
- package/dist/types/agents/processors/tool_filter_request_processor.d.ts +14 -0
- package/dist/types/agents/routed_agent.d.ts +59 -0
- package/dist/types/auth/auth_credential.d.ts +17 -0
- package/dist/types/auth/auth_handler.d.ts +1 -0
- package/dist/types/auth/auth_preprocessor.d.ts +12 -0
- package/dist/types/auth/auth_provider_registry.d.ts +27 -0
- package/dist/types/auth/base_auth_provider.d.ts +20 -0
- package/dist/types/auth/credential_service/session_state_credential_service.d.ts +20 -0
- package/dist/types/auth/exchanger/base_credential_exchanger.d.ts +12 -5
- package/dist/types/auth/oauth2/oauth2_credential_exchanger.d.ts +26 -0
- package/dist/types/auth/oauth2/oauth2_credential_refresher.d.ts +29 -0
- package/dist/types/auth/oauth2/oauth2_discovery.d.ts +38 -0
- package/dist/types/auth/oauth2/oauth2_utils.d.ts +56 -0
- package/dist/types/auth/refresher/base_credential_refresher.d.ts +38 -0
- package/dist/types/auth/refresher/credential_refresher_registry.d.ts +27 -0
- package/dist/types/code_executors/base_code_executor.d.ts +4 -4
- package/dist/types/code_executors/code_execution_utils.d.ts +29 -1
- package/dist/types/code_executors/unsafe_local_code_executor.d.ts +48 -0
- package/dist/types/common.d.ts +26 -3
- package/dist/types/features/feature_registry.d.ts +66 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/memory/base_memory_service.d.ts +6 -0
- package/dist/types/memory/memory_entry.d.ts +11 -5
- package/dist/types/models/apigee_llm.d.ts +1 -1
- package/dist/types/models/base_llm.d.ts +1 -1
- package/dist/types/models/google_llm.d.ts +1 -1
- package/dist/types/models/llm_request.d.ts +4 -0
- package/dist/types/models/routed_llm.d.ts +38 -0
- package/dist/types/plugins/base_plugin.d.ts +49 -0
- package/dist/types/plugins/plugin_manager.d.ts +22 -1
- package/dist/types/runner/runner.d.ts +1 -0
- package/dist/types/skills/loader.d.ts +38 -0
- package/dist/types/skills/prompt.d.ts +13 -0
- package/dist/types/skills/skill.d.ts +48 -0
- package/dist/types/tools/skill/list_skills_tool.d.ts +14 -0
- package/dist/types/tools/skill/load_skill_resource_tool.d.ts +15 -0
- package/dist/types/tools/skill/load_skill_tool.d.ts +14 -0
- package/dist/types/tools/skill/run_skill_inline_script_tool.d.ts +14 -0
- package/dist/types/tools/skill/run_skill_script_tool.d.ts +17 -0
- package/dist/types/tools/skill/skill_toolset.d.ts +28 -0
- package/dist/types/utils/experimental.d.ts +11 -0
- package/dist/types/utils/failover_utils.d.ts +17 -0
- package/dist/types/utils/file_extension_utils.d.ts +21 -0
- package/dist/types/utils/file_utils.d.ts +11 -0
- package/dist/types/utils/streaming_utils.d.ts +40 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/web/a2a/a2a_event.js +2 -0
- package/dist/web/a2a/a2a_remote_agent.js +17 -24
- package/dist/web/a2a/a2a_remote_agent_run_processor.js +9 -0
- package/dist/web/a2a/a2a_remote_agent_utils.js +2 -0
- package/dist/web/a2a/agent_card.js +2 -0
- package/dist/web/a2a/agent_executor.js +2 -0
- package/dist/web/a2a/agent_to_a2a.js +2 -0
- package/dist/web/a2a/event_converter_utils.js +2 -0
- package/dist/web/a2a/event_processor_utils.js +2 -0
- package/dist/web/a2a/executor_context.js +2 -0
- package/dist/web/a2a/metadata_converter_utils.js +2 -0
- package/dist/web/a2a/part_converter_utils.js +2 -0
- package/dist/web/agents/active_streaming_tool.js +2 -0
- package/dist/web/agents/base_agent.js +13 -2
- package/dist/web/agents/context.js +3 -0
- package/dist/web/agents/functions.js +3 -0
- package/dist/web/agents/instructions.js +2 -0
- package/dist/web/agents/invocation_context.js +3 -0
- package/dist/web/agents/live_request_queue.js +2 -0
- package/dist/web/agents/llm_agent.js +72 -13
- package/dist/web/agents/loop_agent.js +6 -0
- package/dist/web/agents/parallel_agent.js +6 -0
- package/dist/web/agents/processors/agent_transfer_llm_request_processor.js +2 -0
- package/dist/web/agents/processors/base_llm_processor.js +2 -0
- package/dist/web/agents/processors/basic_llm_request_processor.js +2 -0
- package/dist/web/agents/processors/code_execution_request_processor.js +5 -0
- package/dist/web/agents/processors/content_processor_utils.js +2 -0
- package/dist/web/agents/processors/content_request_processor.js +2 -0
- package/dist/web/agents/processors/context_compactor_request_processor.js +11 -0
- package/dist/web/agents/processors/identity_llm_request_processor.js +2 -0
- package/dist/web/agents/processors/instructions_llm_request_processor.js +2 -0
- package/dist/web/agents/processors/request_confirmation_llm_request_processor.js +2 -0
- package/dist/web/agents/processors/tool_filter_request_processor.js +62 -0
- package/dist/web/agents/readonly_context.js +2 -0
- package/dist/web/agents/routed_agent.js +138 -0
- package/dist/web/agents/run_config.js +2 -0
- package/dist/web/agents/sequential_agent.js +2 -0
- package/dist/web/agents/transcription_entry.js +2 -0
- package/dist/web/artifacts/base_artifact_service.js +2 -0
- package/dist/web/artifacts/file_artifact_service.js +2 -0
- package/dist/web/artifacts/gcs_artifact_service.js +2 -0
- package/dist/web/artifacts/in_memory_artifact_service.js +2 -0
- package/dist/web/artifacts/registry.js +2 -0
- package/dist/web/auth/auth_credential.js +2 -0
- package/dist/web/auth/auth_handler.js +85 -1
- package/dist/web/auth/auth_preprocessor.js +173 -0
- package/dist/web/auth/auth_provider_registry.js +33 -0
- package/dist/web/auth/auth_schemes.js +2 -0
- package/dist/web/auth/auth_tool.js +2 -0
- package/dist/web/auth/base_auth_provider.js +7 -0
- package/dist/web/auth/credential_service/base_credential_service.js +2 -0
- package/dist/web/auth/credential_service/in_memory_credential_service.js +2 -0
- package/dist/web/auth/credential_service/session_state_credential_service.js +23 -0
- package/dist/web/auth/exchanger/base_credential_exchanger.js +2 -0
- package/dist/web/auth/exchanger/credential_exchanger_registry.js +2 -0
- package/dist/web/auth/oauth2/oauth2_credential_exchanger.js +188 -0
- package/dist/web/auth/oauth2/oauth2_credential_refresher.js +102 -0
- package/dist/web/auth/oauth2/oauth2_discovery.js +156 -0
- package/dist/web/auth/oauth2/oauth2_utils.js +87 -0
- package/dist/web/auth/refresher/base_credential_refresher.js +16 -0
- package/dist/web/auth/refresher/credential_refresher_registry.js +40 -0
- package/dist/web/code_executors/base_code_executor.js +11 -5
- package/dist/web/code_executors/built_in_code_executor.js +2 -0
- package/dist/web/code_executors/code_execution_utils.js +19 -0
- package/dist/web/code_executors/code_executor_context.js +2 -0
- package/dist/web/code_executors/unsafe_local_code_executor.js +203 -0
- package/dist/web/common.js +47 -3
- package/dist/web/context/base_context_compactor.js +2 -0
- package/dist/web/context/summarizers/base_summarizer.js +2 -0
- package/dist/web/context/summarizers/llm_summarizer.js +2 -0
- package/dist/web/context/token_based_context_compactor.js +2 -0
- package/dist/web/context/truncating_context_compactor.js +2 -0
- package/dist/web/events/compacted_event.js +2 -0
- package/dist/web/events/event.js +2 -0
- package/dist/web/events/event_actions.js +2 -0
- package/dist/web/events/structured_events.js +2 -0
- package/dist/web/examples/base_example_provider.js +2 -0
- package/dist/web/examples/example.js +2 -0
- package/dist/web/examples/example_util.js +2 -0
- package/dist/web/features/feature_registry.js +107 -0
- package/dist/web/index.js +3 -2
- package/dist/web/index.js.map +4 -4
- package/dist/web/index_web.js +2 -0
- package/dist/web/memory/base_memory_service.js +2 -0
- package/dist/web/memory/in_memory_memory_service.js +2 -0
- package/dist/web/memory/memory_entry.js +2 -0
- package/dist/web/models/apigee_llm.js +4 -2
- package/dist/web/models/base_llm.js +2 -0
- package/dist/web/models/base_llm_connection.js +2 -0
- package/dist/web/models/gemini_llm_connection.js +2 -0
- package/dist/web/models/google_llm.js +37 -59
- package/dist/web/models/llm_request.js +2 -0
- package/dist/web/models/llm_response.js +2 -0
- package/dist/web/models/registry.js +2 -0
- package/dist/web/models/routed_llm.js +122 -0
- package/dist/web/plugins/base_plugin.js +41 -1
- package/dist/web/plugins/logging_plugin.js +2 -0
- package/dist/web/plugins/plugin_manager.js +41 -0
- package/dist/web/plugins/security_plugin.js +2 -0
- package/dist/web/runner/in_memory_runner.js +2 -0
- package/dist/web/runner/runner.js +33 -3
- package/dist/web/sessions/base_session_service.js +2 -0
- package/dist/web/sessions/database_session_service.js +2 -0
- package/dist/web/sessions/db/operations.js +5 -10
- package/dist/web/sessions/db/schema.js +2 -0
- package/dist/web/sessions/in_memory_session_service.js +2 -0
- package/dist/web/sessions/registry.js +2 -0
- package/dist/web/sessions/session.js +2 -0
- package/dist/web/sessions/state.js +2 -0
- package/dist/web/skills/loader.js +262 -0
- package/dist/web/skills/prompt.js +30 -0
- package/dist/web/skills/skill.js +67 -0
- package/dist/web/telemetry/google_cloud.js +2 -0
- package/dist/web/telemetry/setup.js +2 -0
- package/dist/web/telemetry/tracing.js +2 -0
- package/dist/web/tools/agent_tool.js +12 -3
- package/dist/web/tools/base_tool.js +2 -0
- package/dist/web/tools/base_toolset.js +2 -0
- package/dist/web/tools/exit_loop_tool.js +2 -0
- package/dist/web/tools/forwarding_artifact_service.js +2 -0
- package/dist/web/tools/function_tool.js +2 -0
- package/dist/web/tools/google_search_tool.js +2 -0
- package/dist/web/tools/load_artifacts_tool.js +2 -0
- package/dist/web/tools/load_memory_tool.js +2 -0
- package/dist/web/tools/long_running_tool.js +2 -0
- package/dist/web/tools/mcp/mcp_session_manager.js +2 -0
- package/dist/web/tools/mcp/mcp_tool.js +6 -1
- package/dist/web/tools/mcp/mcp_toolset.js +2 -0
- package/dist/web/tools/preload_memory_tool.js +2 -0
- package/dist/web/tools/skill/list_skills_tool.js +50 -0
- package/dist/web/tools/skill/load_skill_resource_tool.js +191 -0
- package/dist/web/tools/skill/load_skill_tool.js +82 -0
- package/dist/web/tools/skill/run_skill_inline_script_tool.js +120 -0
- package/dist/web/tools/skill/run_skill_script_tool.js +190 -0
- package/dist/web/tools/skill/skill_toolset.js +123 -0
- package/dist/web/tools/tool_confirmation.js +2 -0
- package/dist/web/utils/client_labels.js +2 -0
- package/dist/web/utils/env_aware_utils.js +2 -0
- package/dist/web/utils/experimental.js +46 -0
- package/dist/web/utils/failover_utils.js +96 -0
- package/dist/web/utils/file_extension_utils.js +51 -0
- package/dist/web/utils/file_utils.js +74 -0
- package/dist/web/utils/gemini_schema_util.js +87 -12
- package/dist/web/utils/logger.js +2 -0
- package/dist/web/utils/model_name.js +2 -0
- package/dist/web/utils/object_notation_utils.js +2 -0
- package/dist/web/utils/simple_zod_to_json.js +2 -0
- package/dist/web/utils/streaming_utils.js +325 -0
- package/dist/web/utils/variant_utils.js +2 -0
- package/dist/web/version.js +3 -1
- package/package.json +20 -18
package/dist/esm/index.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
* Copyright 2026 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
var Gi=Object.create;var zt=Object.defineProperty;var Eo=Object.getOwnPropertyDescriptor;var qi=Object.getOwnPropertyNames;var Vi=Object.getPrototypeOf,ji=Object.prototype.hasOwnProperty;var Be=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var zi=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of qi(e))!ji.call(n,r)&&r!==t&&zt(n,r,{get:()=>e[r],enumerable:!(o=Eo(e,r))||o.enumerable});return n};var Fe=(n,e,t)=>(t=n!=null?Gi(Vi(n)):{},zi(e||!n||!n.__esModule?zt(t,"default",{value:n,enumerable:!0}):t,n));var S=(n,e,t,o)=>{for(var r=o>1?void 0:o?Eo(e,t):e,i=n.length-1,s;i>=0;i--)(s=n[i])&&(r=(o?s(e,t,r):s(r))||r);return o&&r&&zt(e,t,r),r};import{AGENT_CARD_PATH as Oa}from"@a2a-js/sdk";import{ClientFactory as Ma}from"@a2a-js/sdk/client";import{context as Bo,trace as Fo}from"@opentelemetry/api";function xo(n,e=[]){return pt(n,Hi,"",e)}function To(n,e=[]){return pt(n,Wi,"",e)}var Hi=n=>n.replace(/_([a-z])/g,(e,t)=>t.toUpperCase()),Wi=n=>n.replace(/[A-Z]/g,e=>"_"+e.toLowerCase());function pt(n,e,t="",o=[]){if(Array.isArray(n))return n.map(r=>pt(r,e,t,o));if(typeof n=="object"&&n!==null){let r=n,i={};for(let s of Object.keys(r)){let a=e(s),c=t!==""?t+"."+s:s;o.includes(c)?i[a]=r[s]:i[a]=pt(r[s],e,c,o)}return i}return n}function F(n={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...n}}function yo(n,e){let t=F();e&&Object.assign(t,e);for(let o of n)o&&(o.stateDelta&&Object.assign(t.stateDelta,o.stateDelta),o.artifactDelta&&Object.assign(t.artifactDelta,o.artifactDelta),o.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,o.requestedAuthConfigs),o.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,o.requestedToolConfirmations),o.skipSummarization!==void 0&&(t.skipSummarization=o.skipSummarization),o.transferToAgent!==void 0&&(t.transferToAgent=o.transferToAgent),o.escalate!==void 0&&(t.escalate=o.escalate));return t}function A(n={}){return{...n,id:n.id||Ht(),invocationId:n.invocationId||"",author:n.author,actions:n.actions||F(),longRunningToolIds:n.longRunningToolIds||[],branch:n.branch,timestamp:n.timestamp||Date.now()}}function ae(n){return n.actions.skipSummarization||n.longRunningToolIds&&n.longRunningToolIds.length>0?!0:I(n).length===0&&V(n).length===0&&!n.partial&&!Ro(n)}function I(n){let e=[];if(n.content&&n.content.parts)for(let t of n.content.parts)t.functionCall&&e.push(t.functionCall);return e}function V(n){let e=[];if(n.content&&n.content.parts)for(let t of n.content.parts)t.functionResponse&&e.push(t.functionResponse);return e}function Ro(n){var e;return n.content&&((e=n.content.parts)!=null&&e.length)?n.content.parts[n.content.parts.length-1].codeExecutionResult!==void 0:!1}function Ue(n){var e;return(e=n.content)!=null&&e.parts?n.content.parts.map(t=>{var o;return(o=t.text)!=null?o:""}).join(""):""}var So="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Ht(){let n="";for(let e=0;e<8;e++)n+=So[Math.floor(Math.random()*So.length)];return n}var Ki=["actions.stateDelta","actions.artifactDelta","actions.requestedAuthConfigs","actions.requestedToolConfirmations","actions.customMetadata","content.parts.functionCall.args","content.parts.functionResponse.response"],Xi=["actions.state_delta","actions.artifact_delta","actions.requested_auth_configs","actions.requested_tool_confirmations","actions.custom_metadata","content.parts.function_call.args","content.parts.function_response.response"];function Wt(n){return xo(n,Xi)}function Io(n){return To(n,Ki)}import{context as Kt,trace as Ve}from"@opentelemetry/api";var $e="0.6.0";var Yi="gen_ai.agent.description",Ji="gen_ai.agent.name",Qi="gen_ai.conversation.id",Xt="gen_ai.operation.name",wo="gen_ai.tool.call.id",bo="gen_ai.tool.description",ko="gen_ai.tool.name",Zi="gen_ai.tool.type",J=Ve.getTracer("gcp.vertex.agent",$e);function Ge(n){try{return JSON.stringify(n)}catch{return"<not serializable>"}}function Po({agent:n,invocationContext:e}){let t=Ve.getActiveSpan();t&&t.setAttributes({[Xt]:"invoke_agent",[Yi]:n.description,[Ji]:n.name,[Qi]:e.session.id})}function _o({tool:n,args:e,functionResponseEvent:t}){var s,a;let o=Ve.getActiveSpan();if(!o)return;o.setAttributes({[Xt]:"execute_tool",[bo]:n.description||"",[ko]:n.name,[Zi]:n.constructor.name,"gcp.vertex.agent.llm_request":"{}","gcp.vertex.agent.llm_response":"{}","gcp.vertex.agent.tool_call_args":qe()?Ge(e):"{}"});let r="<not specified>",i="<not specified>";if((s=t.content)!=null&&s.parts){let l=(a=t.content.parts[0])==null?void 0:a.functionResponse;l!=null&&l.id&&(r=l.id),l!=null&&l.response&&(i=l.response)}(typeof i!="object"||i===null)&&(i={result:i}),o.setAttributes({[wo]:r,"gcp.vertex.agent.event_id":t.id,"gcp.vertex.agent.tool_response":qe()?Ge(i):"{}"})}function Lo({responseEventId:n,functionResponseEvent:e}){let t=Ve.getActiveSpan();t&&(t.setAttributes({[Xt]:"execute_tool",[ko]:"(merged tools)",[bo]:"(merged tools)",[wo]:n,"gcp.vertex.agent.tool_call_args":"N/A","gcp.vertex.agent.event_id":n,"gcp.vertex.agent.llm_request":"{}","gcp.vertex.agent.llm_response":"{}"}),t.setAttribute("gcp.vertex.agent.tool_response",qe()?Ge(e):"{}"))}function Oo({invocationContext:n,eventId:e,llmRequest:t,llmResponse:o}){var i,s,a;let r=Ve.getActiveSpan();if(r&&(r.setAttributes({"gen_ai.system":"gcp.vertex.agent","gen_ai.request.model":t.model,"gcp.vertex.agent.invocation_id":n.invocationId,"gcp.vertex.agent.session_id":n.session.id,"gcp.vertex.agent.event_id":e,"gcp.vertex.agent.llm_request":qe()?Ge(es(t)):"{}"}),(i=t.config)!=null&&i.topP&&r.setAttribute("gen_ai.request.top_p",t.config.topP),((s=t.config)==null?void 0:s.maxOutputTokens)!==void 0&&r.setAttribute("gen_ai.request.max_tokens",t.config.maxOutputTokens),r.setAttribute("gcp.vertex.agent.llm_response",qe()?Ge(o):"{}"),o.usageMetadata&&r.setAttribute("gen_ai.usage.input_tokens",o.usageMetadata.promptTokenCount||0),(a=o.usageMetadata)!=null&&a.candidatesTokenCount&&r.setAttribute("gen_ai.usage.output_tokens",o.usageMetadata.candidatesTokenCount),o.finishReason)){let c=typeof o.finishReason=="string"?o.finishReason.toLowerCase():String(o.finishReason).toLowerCase();r.setAttribute("gen_ai.response.finish_reasons",[c])}}function es(n){let e={model:n.model,contents:[]};if(n.config){let{responseSchema:t,...o}=n.config;e.config=o}return e.contents=n.contents.map(t=>{var o;return{role:t.role,parts:((o=t.parts)==null?void 0:o.filter(r=>!r.inlineData))||[]}}),e}function Mo(n,e){return{next:Kt.bind(n,e.next.bind(e)),return:Kt.bind(n,e.return.bind(e)),throw:Kt.bind(n,e.throw.bind(e)),[Symbol.asyncIterator](){return Mo(n,e[Symbol.asyncIterator]())}}}function pe(n,e,t){let o=t.call(e);return Mo(n,o)}function qe(){let n=process.env.ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS||"true";return n==="true"||n==="1"}var je=class{constructor(e){this.authConfig=e}getAuthResponse(e){let t="temp:"+this.authConfig.credentialKey;return e.get(t)}generateAuthRequest(){var t,o;let e=this.authConfig.authScheme.type;if(!["oauth2","openIdConnect"].includes(e))return this.authConfig;if((o=(t=this.authConfig.exchangedAuthCredential)==null?void 0:t.oauth2)!=null&&o.authUri)return this.authConfig;if(!this.authConfig.rawAuthCredential)throw new Error(`Auth Scheme ${e} requires authCredential.`);if(!this.authConfig.rawAuthCredential.oauth2)throw new Error(`Auth Scheme ${e} requires oauth2 in authCredential.`);if(this.authConfig.rawAuthCredential.oauth2.authUri)return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.authConfig.rawAuthCredential};if(!this.authConfig.rawAuthCredential.oauth2.clientId||!this.authConfig.rawAuthCredential.oauth2.clientSecret)throw new Error(`Auth Scheme ${e} requires both clientId and clientSecret in authCredential.oauth2.`);return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.generateAuthUri()}}generateAuthUri(){return this.authConfig.rawAuthCredential}};var E=class{constructor(e={},t={}){this.value=e;this.delta=t}get(e,t){return e in this.delta?this.delta[e]:e in this.value?this.value[e]:t}set(e,t){this.value[e]=t,this.delta[e]=t}has(e){return e in this.value||e in this.delta}hasDelta(){return Object.keys(this.delta).length>0}update(e){Object.assign(this.delta,e),Object.assign(this.value,e)}toRecord(){return{...this.value,...this.delta}}};E.APP_PREFIX="app:",E.USER_PREFIX="user:",E.TEMP_PREFIX="temp:";var me=class{constructor({hint:e,confirmed:t,payload:o}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=o}};var w=class{constructor(e){this.invocationContext=e}get userContent(){return this.invocationContext.userContent}get invocationId(){return this.invocationContext.invocationId}get userId(){return this.invocationContext.userId}get sessionId(){return this.invocationContext.session.id}get agentName(){return this.invocationContext.agent.name}get state(){return new E(this.invocationContext.session.state,{})}};var N=class extends w{constructor(e){super(e.invocationContext),this.eventActions=e.eventActions||F(),this._state=new E(e.invocationContext.session.state,this.eventActions.stateDelta),this.functionCallId=e.functionCallId,this.toolConfirmation=e.toolConfirmation}get state(){return this._state}get actions(){return this.eventActions}loadArtifact(e,t){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.loadArtifact({appName:this.invocationContext.appName,userId:this.invocationContext.userId,sessionId:this.invocationContext.session.id,filename:e,version:t})}async saveArtifact(e,t){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");let o=await this.invocationContext.artifactService.saveArtifact({appName:this.invocationContext.appName,userId:this.invocationContext.userId,sessionId:this.invocationContext.session.id,filename:e,artifact:t});return this.eventActions.artifactDelta[e]=o,o}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new je(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new je(e).getAuthResponse(this.state)}listArtifacts(){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.listArtifactKeys({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,sessionId:this.invocationContext.session.id})}searchMemory(e){if(!this.invocationContext.memoryService)throw new Error("Memory service is not initialized.");return this.invocationContext.memoryService.searchMemory({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,query:e})}requestConfirmation({hint:e,payload:t}){if(!this.functionCallId)throw new Error("functionCallId is not set.");this.eventActions.requestedToolConfirmations[this.functionCallId]=new me({hint:e,confirmed:!1,payload:t})}};function W(){return typeof window<"u"}var mt="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function b(){let n="";for(let e=0;e<mt.length;e++){let t=Math.random()*16|0;mt[e]==="x"?n+=t.toString(16):mt[e]==="y"?n+=(t&3|8).toString(16):n+=mt[e]}return n}function No(n){return W()?window.atob(n):Buffer.from(n,"base64").toString()}function gt(n){if(!process.env)return!1;let e=(process.env[n]||"").toLowerCase();return["true","1"].includes(e)}var Yt=class{constructor(){this.numberOfLlmCalls=0}incrementAndEnforceLlmCallsLimit(e){if(this.numberOfLlmCalls++,e&&e.maxLlmCalls>0&&this.numberOfLlmCalls>e.maxLlmCalls)throw new Error(`Max number of llm calls limit of ${e.maxLlmCalls} exceeded`)}},j=class{constructor(e){this.invocationCostManager=new Yt;this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.invocationId=e.invocationId,this.branch=e.branch,this.agent=e.agent,this.userContent=e.userContent,this.session=e.session,this.endInvocation=e.endInvocation||!1,this.transcriptionCache=e.transcriptionCache,this.runConfig=e.runConfig,this.liveRequestQueue=e.liveRequestQueue,this.activeStreamingTools=e.activeStreamingTools,this.pluginManager=e.pluginManager}get appName(){return this.session.appName}get userId(){return this.session.userId}incrementLlmCallCount(){this.invocationCostManager.incrementAndEnforceLlmCallsLimit(this.runConfig)}};function Do(){return`e-${b()}`}var Jt=Symbol.for("google.adk.baseAgent");function ts(n){return typeof n=="object"&&n!==null&&Jt in n&&n[Jt]===!0}var $o;$o=Jt;var G=class{constructor(e){this[$o]=!0;this.name=ns(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.beforeAgentCallback=Uo(e.beforeAgentCallback),this.afterAgentCallback=Uo(e.afterAgentCallback),this.setParentAgentForSubAgents()}get rootAgent(){return rs(this)}async*runAsync(e){let t=J.startSpan(`invoke_agent ${this.name}`),o=Fo.setSpan(Bo.active(),t);try{yield*pe(o,this,async function*(){let r=this.createInvocationContext(e),i=await this.handleBeforeAgentCallback(r);if(i&&(yield i),r.endInvocation)return;Po({agent:this,invocationContext:r});for await(let a of this.runAsyncImpl(r))yield a;if(r.endInvocation)return;let s=await this.handleAfterAgentCallback(r);s&&(yield s)})}finally{t.end()}}async*runLive(e){let t=J.startSpan(`invoke_agent ${this.name}`),o=Fo.setSpan(Bo.active(),t);try{throw yield*pe(o,this,async function*(){}),new Error("Live mode is not implemented yet.")}finally{t.end()}}findAgent(e){return this.name===e?this:this.findSubAgent(e)}findSubAgent(e){for(let t of this.subAgents){let o=t.findAgent(e);if(o)return o}}createInvocationContext(e){return new j({...e,agent:this})}async handleBeforeAgentCallback(e){if(this.beforeAgentCallback.length===0)return;let t=new N({invocationContext:e});for(let o of this.beforeAgentCallback){let r=await o(t);if(r)return e.endInvocation=!0,A({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return A({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}async handleAfterAgentCallback(e){if(this.afterAgentCallback.length===0)return;let t=new N({invocationContext:e});for(let o of this.afterAgentCallback){let r=await o(t);if(r)return A({invocationId:e.invocationId,author:this.name,branch:e.branch,content:r,actions:t.eventActions})}if(t.state.hasDelta())return A({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}setParentAgentForSubAgents(){for(let e of this.subAgents){if(e.parentAgent)throw new Error(`Agent "${e.name}" already has a parent agent, current parent: "${e.parentAgent.name}", trying to add: "${this.name}"`);e.parentAgent=this}}};function ns(n){if(!os(n))throw new Error(`Found invalid agent name: "${n}". Agent name must be a valid identifier. It should start with a letter (a-z, A-Z) or an underscore (_), and can only contain letters, digits (0-9), underscores, and hyphens.`);if(n==="user")throw new Error("Agent name cannot be 'user'. 'user' is reserved for end-user's input.");return n}function os(n){return/^[\p{ID_Start}$_][\p{ID_Continue}$_-]*$/u.test(n)}function rs(n){for(;n.parentAgent;)n=n.parentAgent;return n}function Uo(n){return n?Array.isArray(n)?n:[n]:[]}import*as K from"winston";var Go=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(Go||{}),Qt=class{constructor(){this.logLevel=1;this.logger=K.createLogger({levels:{debug:0,info:1,warn:2,error:3},level:"error",format:K.format.combine(K.format.label({label:"ADK"}),K.format(e=>(e.level=e.level.toUpperCase(),e))(),K.format.colorize(),K.format.timestamp(),K.format.printf(e=>`${e.level}: [${e.label}] ${e.timestamp} ${e.message}`)),transports:[new K.transports.Console]})}setLogLevel(e){this.logLevel=e}log(e,...t){this.logLevel>e||this.logger.log(e.toString(),t.join(" "))}debug(...e){this.logLevel>0||this.logger.debug(e.join(" "))}info(...e){this.logLevel>1||this.logger.info(e.join(" "))}warn(...e){this.logLevel>2||this.logger.warn(e.join(" "))}error(...e){this.logLevel>3||this.logger.error(e.join(" "))}},Zt=class{setLogLevel(e){}log(e,...t){}debug(...e){}info(...e){}warn(...e){}error(...e){}},ce=new Qt;function is(n){ce=n!=null?n:new Zt}function en(){return ce}function ss(n){g.setLogLevel(n)}var g={setLogLevel(n){ce.setLogLevel(n)},log(n,...e){ce.log(n,...e)},debug(...n){ce.debug(...n)},info(...n){ce.info(...n)},warn(...n){ce.warn(...n)},error(...n){ce.error(...n)}};function le(n){return(n==null?void 0:n.kind)==="status-update"}function ze(n){return(n==null?void 0:n.kind)==="artifact-update"}function tn(n){return(n==null?void 0:n.kind)==="message"}function te(n){return(n==null?void 0:n.kind)==="task"}function ht(n){return ze(n)?n.artifact.metadata||{}:le(n)||te(n)||tn(n)?n.metadata||{}:{}}function Ct(n){return(le(n)||te(n))&&n.status.state==="failed"}function qo(n){return(le(n)||te(n))&&["completed","failed","canceled","rejected"].includes(n.status.state)}function vt(n){return(le(n)||te(n))&&n.status.state==="input-required"}function nn(n){var t;if(!Ct(n))return;let e=((t=n.status.message)==null?void 0:t.parts)||[];if(e.length!==0&&e[0].kind==="text")return e[0].text}function Vo({contextId:n,message:e,taskId:t,metadata:o}){return{kind:"task",id:t||b(),contextId:n,history:[e],status:{state:"submitted",timestamp:new Date().toISOString()},metadata:o}}function jo({taskId:n,contextId:e,message:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!1,status:{state:"working",message:t,timestamp:new Date().toISOString()},metadata:o}}function zo({taskId:n,contextId:e,metadata:t}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"completed",timestamp:new Date().toISOString()},metadata:t}}function Ho({taskId:n,contextId:e,artifactId:t,parts:o=[],metadata:r,append:i,lastChunk:s}){return{kind:"artifact-update",taskId:n,contextId:e,append:i,lastChunk:s,artifact:{artifactId:t||b(),parts:o},metadata:r}}function At({taskId:n,contextId:e,error:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"failed",message:{kind:"message",messageId:b(),role:"agent",taskId:n,contextId:e,parts:[{kind:"text",text:t.message}]},timestamp:new Date().toISOString()},metadata:o}}function Wo({taskId:n,contextId:e,parts:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"input-required",message:{kind:"message",messageId:b(),role:"agent",taskId:n,contextId:e,parts:t},timestamp:new Date().toISOString()},metadata:o}}function Ko({taskId:n,contextId:e,parts:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"input-required",message:{kind:"message",messageId:b(),role:"agent",taskId:n,contextId:e,parts:t},timestamp:new Date().toISOString()},metadata:o}}import{createModelContent as as}from"@google/genai";var k="adk_",Xo="a2a:",v=(R=>(R.APP_NAME=`${k}app_name`,R.USER_ID=`${k}user_id`,R.SESSION_ID=`${k}session_id`,R.INVOCATION_ID=`${k}invocation_id`,R.AUTHOR=`${k}author`,R.BRANCH=`${k}branch`,R.DATA_PART_TYPE=`${k}type`,R.PARTIAL=`${k}partial`,R.ESCALATE=`${k}escalate`,R.TRANSFER_TO_AGENT=`${k}transfer_to_agent`,R.IS_LONG_RUNNING=`${k}is_long_running`,R.THOUGHT=`${k}thought`,R.ERROR_CODE=`${k}error_code`,R.ERROR_MESSAGE=`${k}error_message`,R.CITATION_METADATA=`${k}citation_metadata`,R.GROUNDING_METADATA=`${k}grounding_metadata`,R.USAGE_METADATA=`${k}usage_metadata`,R.CUSTOM_METADATA=`${k}custom_metadata`,R.VIDEO_METADATA=`${k}video_metadata`,R))(v||{}),He=(t=>(t.TASK_ID=`${Xo}task_id`,t.CONTEXT_ID=`${Xo}context_id`,t))(He||{});function We(n,{appName:e,userId:t,sessionId:o}){return{...Ke(n.actions),...ue({appName:e,userId:t,sessionId:o}),[v.INVOCATION_ID]:n.invocationId,[v.AUTHOR]:n.author,[v.BRANCH]:n.branch,[v.ERROR_CODE]:n.errorMessage,[v.ERROR_MESSAGE]:n.errorMessage,[v.CITATION_METADATA]:n.citationMetadata,[v.GROUNDING_METADATA]:n.groundingMetadata,[v.USAGE_METADATA]:n.usageMetadata,[v.CUSTOM_METADATA]:n.customMetadata,[v.PARTIAL]:n.partial,[v.IS_LONG_RUNNING]:(n.longRunningToolIds||[]).length>0}}function ue({appName:n,userId:e,sessionId:t}){return{[v.APP_NAME]:n,[v.USER_ID]:e,[v.SESSION_ID]:t}}function Ke(n){return{[v.ESCALATE]:n.escalate,[v.TRANSFER_TO_AGENT]:n.transferToAgent}}var Et=class{constructor(e){this.request=e;this.aggregations=new Map;this.aggregationOrder=[]}aggregatePartial(e,t,o){if(ht(t)[v.PARTIAL])return[o];if(le(t)&&t.final){let a=[];for(let c of this.aggregationOrder){let l=this.aggregations.get(c);l&&a.push(this.buildNonPartialAggregation(e,l))}return this.aggregations.clear(),this.aggregationOrder=[],[...a,o]}if(te(t))return this.aggregations.clear(),this.aggregationOrder=[],[o];if(!ze(t))return[o];let i=t.artifact.artifactId;if(!t.append&&(this.removeAggregation(i),t.lastChunk))return o.partial=!1,[o];let s=this.aggregations.get(i);return s?(this.aggregationOrder=this.aggregationOrder.filter(a=>a!==i),this.aggregationOrder.push(i)):(s={aggregatedText:"",aggregatedThoughts:"",parts:[]},this.aggregations.set(i,s),this.aggregationOrder.push(i)),this.updateAggregation(s,o),t.lastChunk?(this.removeAggregation(i),[o,this.buildNonPartialAggregation(e,s)]):[o]}removeAggregation(e){this.aggregations.delete(e),this.aggregationOrder=this.aggregationOrder.filter(t=>t!==e)}updateAggregation(e,t){var r;let o=((r=t.content)==null?void 0:r.parts)||[];for(let i of o)i.text&&i.text!==""?i.thought?e.aggregatedThoughts+=i.text:e.aggregatedText+=i.text:(this.promoteTextBlocksToParts(e),e.parts.push(i));t.citationMetadata&&(e.citations||(e.citations={citations:[]}),e.citations.citations||(e.citations.citations=[]),e.citations.citations.push(...t.citationMetadata.citations||[])),t.customMetadata&&(e.customMeta||(e.customMeta={}),Object.assign(e.customMeta,t.customMetadata)),t.groundingMetadata&&(e.grounding=t.groundingMetadata),t.usageMetadata&&(e.usage=t.usageMetadata)}buildNonPartialAggregation(e,t){return this.promoteTextBlocksToParts(t),A({author:e.agent.name,invocationId:e.invocationId,content:t.parts.length>0?as([...t.parts]):void 0,customMetadata:t.customMeta,groundingMetadata:t.grounding,citationMetadata:t.citations,usageMetadata:t.usage,turnComplete:!1,partial:!1})}promoteTextBlocksToParts(e){e.aggregatedThoughts!==""&&(e.parts.push({thought:!0,text:e.aggregatedThoughts}),e.aggregatedThoughts=""),e.aggregatedText!==""&&(e.parts.push({text:e.aggregatedText}),e.aggregatedText="")}updateCustomMetadata(e,t){let o={};if(this.request&&e.turnComplete&&(o.request=this.request),t&&(o.response=t),Object.keys(o).length!==0){e.customMetadata||(e.customMetadata={});for(let[r,i]of Object.entries(o))i!=null&&(e.customMetadata[`a2a:${r}`]=i)}}};import{createModelContent as cs,createUserContent as ls}from"@google/genai";function ne(n=[],e=[]){return n.map(t=>us(t,e))}function us(n,e){return n.text!==void 0&&n.text!==null?fs(n):n.inlineData||n.fileData?ds(n):ps(n,e)}function fs(n){let e={kind:"text",text:n.text||""};return n.thought&&(e.metadata={[v.THOUGHT]:!0}),e}function ds(n){let e={};if(n.videoMetadata&&(e[v.VIDEO_METADATA]=n.videoMetadata),n.fileData)return{kind:"file",file:{uri:n.fileData.fileUri||"",mimeType:n.fileData.mimeType},metadata:e};if(n.inlineData)return{kind:"file",file:{bytes:n.inlineData.data||"",mimeType:n.inlineData.mimeType},metadata:e};throw new Error(`Not a file part: ${JSON.stringify(n)}`)}function ps(n,e=[]){let t,o;if(n.functionCall)t="function_call",o=n.functionCall;else if(n.functionResponse)t="function_response",o=n.functionResponse;else if(n.executableCode)t="executable_code",o=n.executableCode;else if(n.codeExecutionResult)t="code_execution_result",o=n.codeExecutionResult;else return{kind:"data",data:{},metadata:{}};let r={[v.DATA_PART_TYPE]:t};return n.functionCall&&n.functionCall.id&&e.includes(n.functionCall.id)&&(r[v.IS_LONG_RUNNING]=!0),n.functionResponse&&n.functionResponse.id&&e.includes(n.functionResponse.id)&&(r[v.IS_LONG_RUNNING]=!0),{kind:"data",data:o,metadata:r}}function Yo(n){let e=Q(n.parts);return n.role==="user"?ls(e):cs(e)}function Q(n){return n.map(e=>on(e))}function on(n){if(n.kind==="text")return ms(n);if(n.kind==="file")return gs(n);if(n.kind==="data")return hs(n);throw new Error(`Unknown part kind: ${JSON.stringify(n)}`)}function ms(n){var e;return{text:n.text,thought:!!((e=n.metadata)!=null&&e[v.THOUGHT])}}function gs(n){var t;let e={};if((t=n.metadata)!=null&&t[v.VIDEO_METADATA]&&(e.videoMetadata=n.metadata[v.VIDEO_METADATA]),"bytes"in n.file)return e.inlineData={data:n.file.bytes,mimeType:n.file.mimeType||""},e;if("uri"in n.file)return e.fileData={fileUri:n.file.uri,mimeType:n.file.mimeType||""},e;throw new Error(`Not a file part: ${JSON.stringify(n)}`)}function hs(n){var o;if(!n.data)throw new Error(`No data in part: ${JSON.stringify(n)}`);let e=n.data,t=(o=n.metadata)==null?void 0:o[v.DATA_PART_TYPE];return t==="function_call"?{functionCall:e}:t==="function_response"?{functionResponse:e}:t==="executable_code"?{executableCode:e}:t==="code_execution_result"?{codeExecutionResult:e}:{text:JSON.stringify(n.data)}}function Jo(n,e){let t=n.events;if(e<0||e>=t.length)return;let o=t[e];if(o.author!=="user")return;let r=vs(o);if(r)for(let i=e-1;i>=0;i--){let s=t[i];if(!Cs(s,r))continue;let a=s.customMetadata||{},c=a[He.TASK_ID]||"",l=a[He.CONTEXT_ID]||"";return{response:o,taskId:c,contextId:l}}}function Cs(n,e){return!n||!n.content||!n.content.parts?!1:n.content.parts.some(t=>t.functionCall&&t.functionCall.id===e)}function vs(n){var t;if(!n||!n.content||!n.content.parts)return;let e=n.content.parts.find(o=>o.functionResponse);return(t=e==null?void 0:e.functionResponse)==null?void 0:t.id}function Qo(n,e){let t=e.events,o,r=-1;for(let s=t.length-1;s>=0;s--){let a=t[s];if(a.author===n.agent.name){r=s,o=(a.customMetadata||{})[He.CONTEXT_ID];break}}let i=[];for(let s=r+1;s<t.length;s++){let a=t[s];if(a.author!=="user"&&a.author!==n.agent.name&&(a=As(n,a)),!a.content||!a.content.parts||a.content.parts.length===0)continue;let c=ne(a.content.parts,a.longRunningToolIds);i.push(...c)}return{parts:i,contextId:o}}function As(n,e){let t=A({author:"user",invocationId:n.invocationId});if(!e.content||!e.content.parts)return t;let o=[{text:"For context:"}];for(let r of e.content.parts)if(!r.thought)if(r.text)o.push({text:`[${e.author}] said: ${r.text}`});else if(r.functionCall){let i=r.functionCall;o.push({text:`[${e.author}] called tool ${i.name} with parameters: ${JSON.stringify(i.args)}`})}else if(r.functionResponse){let i=r.functionResponse;o.push({text:`[${e.author}] ${i.name} tool returned result: ${JSON.stringify(i.response)}`})}else o.push(r);return o.length>1&&(t.content={role:"user",parts:o}),t}import{DefaultAgentCardResolver as ma}from"@a2a-js/sdk/client";import*as oi from"fs/promises";import{context as ua,trace as fa}from"@opentelemetry/api";var Es="google-adk",xs="gl-typescript",Ts="remote_reasoning_engine",ys="GOOGLE_CLOUD_AGENT_ENGINE_ID";function Ss(){let n=`${Es}/${$e}`;!W()&&process.env[ys]&&(n=`${n}+${Ts}`);let e=`${xs}/${W()?window.navigator.userAgent:process.version}`;return[n,e]}function Zo(){return Ss()}var rn=Symbol.for("google.adk.baseModel");function sn(n){return typeof n=="object"&&n!==null&&rn in n&&n[rn]===!0}var er;er=rn;var Ie=class{constructor({model:e}){this[er]=!0;this.model=e}get trackingHeaders(){let t=Zo().join(" ");return{"x-goog-api-client":t,"user-agent":t}}maybeAppendUserContent(e){var t;e.contents.length===0&&e.contents.push({role:"user",parts:[{text:"Handle the requests as specified in the System Instruction."}]}),((t=e.contents[e.contents.length-1])==null?void 0:t.role)!=="user"&&e.contents.push({role:"user",parts:[{text:"Continue processing previous requests as instructed. Exit or provide a summary if no more outputs are needed."}]})}};Ie.supportedModels=[];import{createPartFromText as nr,FinishReason as Rs,GoogleGenAI as cn}from"@google/genai";var xt=(t=>(t.VERTEX_AI="VERTEX_AI",t.GEMINI_API="GEMINI_API",t))(xt||{});function tr(){return gt("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}var Tt=class{constructor(e){this.geminiSession=e}async sendHistory(e){let t=e.filter(o=>{var r;return o.parts&&((r=o.parts[0])==null?void 0:r.text)});t.length>0?this.geminiSession.sendClientContent({turns:t,turnComplete:t[t.length-1].role==="user"}):g.info("no content is sent")}async sendContent(e){if(!e.parts)throw new Error("Content must have parts.");if(e.parts[0].functionResponse){let t=e.parts.map(o=>o.functionResponse).filter(o=>!!o);g.debug("Sending LLM function response:",t),this.geminiSession.sendToolResponse({functionResponses:t})}else g.debug("Sending LLM new content",e),this.geminiSession.sendClientContent({turns:[e],turnComplete:!0})}async sendRealtime(e){g.debug("Sending LLM Blob:",e),this.geminiSession.sendRealtimeInput({media:e})}buildFullTextResponse(e){return{content:{role:"model",parts:[{text:e}]}}}async*receive(){throw new Error("Not Implemented.")}async close(){this.geminiSession.close()}};function an(n){var t;let e=n.usageMetadata;if(n.candidates&&n.candidates.length>0){let o=n.candidates[0];return(t=o.content)!=null&&t.parts&&o.content.parts.length>0?{content:o.content,groundingMetadata:o.groundingMetadata,citationMetadata:o.citationMetadata,usageMetadata:e,finishReason:o.finishReason}:{errorCode:o.finishReason,errorMessage:o.finishMessage,usageMetadata:e,citationMetadata:o.citationMetadata,finishReason:o.finishReason}}return n.promptFeedback?{errorCode:n.promptFeedback.blockReason,errorMessage:n.promptFeedback.blockReasonMessage,usageMetadata:e}:{errorCode:"UNKNOWN_ERROR",errorMessage:"Unknown error.",usageMetadata:e}}var fe=class extends Ie{constructor({model:e,apiKey:t,vertexai:o,project:r,location:i,headers:s}){e||(e="gemini-2.5-flash"),super({model:e});let a=yt({model:e,vertexai:o,project:r,location:i,apiKey:t});if(!a.vertexai&&!a.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.");this.project=a.project,this.location=a.location,this.apiKey=a.apiKey,this.headers=s,this.vertexai=!!a.vertexai}async*generateContentAsync(e,t=!1){var o,r,i,s,a,c,l;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),g.info(`Sending out request, model: ${e.model}, backend: ${this.apiBackend}, stream: ${t}`),(o=e.config)!=null&&o.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),t){let u=await this.apiClient.models.generateContentStream({model:(r=e.model)!=null?r:this.model,contents:e.contents,config:e.config}),f="",d="",p,m;for await(let h of u){m=h;let C=an(h);p=C.usageMetadata;let y=(s=(i=C.content)==null?void 0:i.parts)==null?void 0:s[0];if(y!=null&&y.text)"thought"in y&&y.thought?f+=y.text:d+=y.text,C.partial=!0;else if((f||d)&&(!y||!y.inlineData)){let $=[];f&&$.push({text:f,thought:!0}),d&&$.push(nr(d)),yield{content:{role:"model",parts:$},usageMetadata:C.usageMetadata},f="",d=""}yield C}if((d||f)&&((c=(a=m==null?void 0:m.candidates)==null?void 0:a[0])==null?void 0:c.finishReason)===Rs.STOP){let h=[];f&&h.push({text:f,thought:!0}),d&&h.push({text:d}),yield{content:{role:"model",parts:h},usageMetadata:p}}}else{let u=await this.apiClient.models.generateContent({model:(l=e.model)!=null?l:this.model,contents:e.contents,config:e.config});yield an(u)}}getHttpOptions(){return{headers:{...this.trackingHeaders,...this.headers}}}get apiClient(){return this._apiClient?this._apiClient:(this.vertexai?this._apiClient=new cn({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:this.getHttpOptions()}):this._apiClient=new cn({apiKey:this.apiKey,httpOptions:this.getHttpOptions()}),this._apiClient)}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}getLiveHttpOptions(){return{headers:this.trackingHeaders,apiVersion:this.liveApiVersion}}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new cn({apiKey:this.apiKey,httpOptions:this.getLiveHttpOptions()})),this._liveApiClient}async connect(e){var o,r,i,s;(o=e.liveConnectConfig)!=null&&o.httpOptions&&(e.liveConnectConfig.httpOptions.headers||(e.liveConnectConfig.httpOptions.headers={}),Object.assign(e.liveConnectConfig.httpOptions.headers,this.trackingHeaders),e.liveConnectConfig.httpOptions.apiVersion=this.liveApiVersion),(r=e.config)!=null&&r.systemInstruction&&(e.liveConnectConfig.systemInstruction={role:"system",parts:[nr(e.config.systemInstruction)]}),e.liveConnectConfig.tools=(i=e.config)==null?void 0:i.tools;let t=await this.liveApiClient.live.connect({model:(s=e.model)!=null?s:this.model,config:e.liveConnectConfig,callbacks:{onmessage:()=>{}}});return new Tt(t)}preprocessRequest(e){if(this.apiBackend==="GEMINI_API"&&(e.config&&(e.config.labels=void 0),e.contents)){for(let t of e.contents)if(t.parts)for(let o of t.parts)or(o.inlineData),or(o.fileData)}}};fe.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function or(n){n&&n.displayName&&(n.displayName=void 0)}function yt({model:n,vertexai:e,project:t,location:o,apiKey:r}){let i={model:n,vertexai:e,project:t,location:o,apiKey:r};if(i.vertexai=!!e,!i.vertexai&&!W()&&(i.vertexai=gt("GOOGLE_GENAI_USE_VERTEXAI")),i.vertexai){if(!W()&&!i.project&&(i.project=process.env.GOOGLE_CLOUD_PROJECT),!W()&&!i.location&&(i.location=process.env.GOOGLE_CLOUD_LOCATION),!i.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!i.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else!i.apiKey&&!W()&&(i.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY);return i}var rr="APIGEE_PROXY_URL",we=class extends fe{constructor({model:e,proxyUrl:t,apiKey:o,vertexai:r,location:i,project:s,headers:a}){var c;if(!sr(e))throw new Error(`Model ${e} is not a valid Apigee model, expected apigee/[<provider>/][<version>/]<model_id>`);if(super({...Is({model:e,vertexai:r,project:s,location:i,apiKey:o}),headers:a}),this.proxyUrl=t!=null?t:"",!W()&&!this.proxyUrl&&(this.proxyUrl=(c=process.env[rr])!=null?c:""),!this.proxyUrl)throw new Error(`Proxy URL must be provided via the constructor or ${rr} environment variable.`)}getHttpOptions(){let e=super.getHttpOptions();return e.baseUrl=this.proxyUrl,e}getLiveHttpOptions(){let e=super.getLiveHttpOptions();return e.baseUrl=this.proxyUrl,e}identifyApiVersion(){let t=(this.model.startsWith("apigee/")?this.model.substring(7):this.model).split("/");return t.length===3?t[1]:t.length===2&&t[0]!="vertex_ai"&&t[0]!="gemini"&&t[0].startsWith("v")?t[0]:this.vertexai?"v1beta1":"v1alpha"}get liveApiVersion(){return this._apigeeLiveApiVersion||(this._apigeeLiveApiVersion=this.identifyApiVersion()),this._apigeeLiveApiVersion}async*generateContentAsync(e,t=!1){var r;let o=(r=e.model)!=null?r:this.model;e.model=ir(o),yield*super.generateContentAsync(e,t)}async connect(e){var o;let t=(o=e.model)!=null?o:this.model;return e.model=ir(t),super.connect(e)}};we.supportedModels=[/apigee\/.*/];function Is({model:n,vertexai:e,project:t,location:o,apiKey:r}){var s;let i=yt({model:n,vertexai:e,project:t,location:o,apiKey:r});return i.vertexai=i.vertexai||((s=i.model)==null?void 0:s.startsWith("apigee/vertex_ai/")),i.vertexai||i.apiKey||(g.warn('No API key provided when using a Gemini model, using a fake key "-".'),i.apiKey="-"),i}function ir(n){if(!sr(n))throw new Error(`Model ${n} is not a valid Apigee model, expected apigee/[<provider>/][<version>/]<model_id>`);let e=n.split("/");return e[e.length-1]}function sr(n){let e=["vertex_ai","gemini"];if(!n.startsWith("apigee/"))return!1;let t=n.substring(7);if(t.length===0)return!1;let o=t.split("/",-1);return o[o.length-1].length===0?!1:o.length==1?!0:o.length==2?e.includes(o[0])?!0:o[0].startsWith("v"):o.length==3&&e.includes(o[0])?o[1].startsWith("v"):!1}var ln=class{constructor(e){this.maxSize=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.size>=this.maxSize&&!this.cache.has(e)){let o=this.cache.keys().next().value;o!==void 0&&this.cache.delete(o)}this.cache.set(e,t)}},z=class z{static newLlm(e){return new(z.resolve(e))({model:e})}static _register(e,t){z.llmRegistryDict.has(e)&&g.info(`Updating LLM class for ${e} from ${z.llmRegistryDict.get(e)} to ${t}`),z.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)z._register(t,e)}static resolve(e){let t=z.resolveCache.get(e);if(t)return t;for(let[o,r]of z.llmRegistryDict.entries())if(new RegExp(`^${o instanceof RegExp?o.source:o}$`,o instanceof RegExp?o.flags:void 0).test(e))return z.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};z.llmRegistryDict=new Map,z.resolveCache=new ln(32);var ge=z;ge.register(fe);ge.register(we);var un=Symbol.for("google.adk.baseTool");function Xe(n){return typeof n=="object"&&n!==null&&un in n&&n[un]===!0}var ar;ar=un;var P=class{constructor(e){this[ar]=!0;var t;this.name=e.name,this.description=e.description,this.isLongRunning=(t=e.isLongRunning)!=null?t:!1}_getDeclaration(){}async processLlmRequest({llmRequest:e}){let t=this._getDeclaration();if(!t)return;if(this.name in e.toolsDict)throw new Error(`Duplicate tool name: ${this.name}`);e.toolsDict[this.name]=this;let o=ws(e);o?(o.functionDeclarations||(o.functionDeclarations=[]),o.functionDeclarations.push(t)):(e.config=e.config||{},e.config.tools=e.config.tools||[],e.config.tools.push({functionDeclarations:[t]}))}get apiVariant(){return tr()}};function ws(n){var e;return(((e=n.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}import{Type as cr}from"@google/genai";import{zodToJsonSchema as bs}from"zod-to-json-schema";import{toJSONSchema as ks}from"zod/v4";function fn(n){return n!==null&&typeof n=="object"&&"parse"in n&&typeof n.parse=="function"&&"safeParse"in n&&typeof n.safeParse=="function"}function Ps(n){return fn(n)&&!("_zod"in n)}function _s(n){return fn(n)&&"_zod"in n}function Ls(n){var o,r;let e=n;if((o=e._def)!=null&&o.typeName)return e._def.typeName;let t=(r=e._def)==null?void 0:r.type;if(typeof t=="string"&&t)return"Zod"+t.charAt(0).toUpperCase()+t.slice(1)}function he(n){return fn(n)&&Ls(n)==="ZodObject"}function be(n){if(!he(n))throw new Error("Expected a Zod Object");if(_s(n))return ks(n,{target:"openapi-3.0",io:"input",override:e=>{var o;let{jsonSchema:t}=e;t.additionalProperties!==void 0&&delete t.additionalProperties,t.readOnly!==void 0&&delete t.readOnly,t.maxItems!==void 0&&(t.maxItems=t.maxItems.toString()),(t.format==="email"||t.format==="uuid")&&delete t.pattern,t.minItems!==void 0&&(t.minItems=t.minItems.toString()),t.minLength!==void 0&&(t.minLength=t.minLength.toString()),t.maxLength!==void 0&&(t.maxLength=t.maxLength.toString()),((o=t.enum)==null?void 0:o.length)===1&&t.enum[0]===null&&(t.type=cr.NULL,delete t.enum),t.type!==void 0&&(t.type=t.type.toUpperCase())}});if(Ps(n))return bs(n,{target:"openApi3",emailStrategy:"format:email",postProcess:e=>{var t,o,r,i,s,a,c;if(e)return e.additionalProperties!==void 0&&delete e.additionalProperties,e.maxItems!==void 0&&(e.maxItems=(t=e.maxItems)==null?void 0:t.toString()),e.minItems!==void 0&&(e.minItems=(o=e.minItems)==null?void 0:o.toString()),e.minLength!==void 0&&(e.minLength=(r=e.minLength)==null?void 0:r.toString()),e.maxLength!==void 0&&(e.maxLength=(i=e.maxLength)==null?void 0:i.toString()),((s=e.enum)==null?void 0:s.length)===1&&e.enum[0]==="null"&&(e.type=cr.NULL,delete e.enum),e.type==="integer"&&e.format!=="int64"&&((a=e.minimum)!=null||(e.minimum=Number.MIN_SAFE_INTEGER),(c=e.maximum)!=null||(e.maximum=Number.MAX_SAFE_INTEGER)),e.type!==void 0&&(e.type=e.type.toUpperCase()),e}});throw new Error("Unsupported Zod schema version.")}import{createUserContent as Os}from"@google/genai";import{isEmpty as lr}from"lodash-es";var dn="adk-",St="adk_request_credential",ke="adk_request_confirmation",Ms={handleFunctionCallList:Rt,generateAuthEvent:mn,generateRequestConfirmationEvent:gn};function pn(){return`${dn}${b()}`}function ur(n){let e=I(n);if(e)for(let t of e)t.id||(t.id=pn())}function fr(n){if(n&&n.parts)for(let e of n.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(dn)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(dn)&&(e.functionResponse.id=void 0)}function dr(n,e){let t=new Set;for(let o of n)o.name&&o.name in e&&e[o.name].isLongRunning&&o.id&&t.add(o.id);return t}function mn(n,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs)||lr(e.actions.requestedAuthConfigs))return;let t=[],o=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:St,args:{function_call_id:i,auth_config:s},id:pn()};o.add(a.id),t.push({functionCall:a})}return A({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(o)})}function gn({invocationContext:n,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations)||lr(t.actions.requestedToolConfirmations))return;let o=[],r=new Set,i=I(e);for(let[c,l]of Object.entries(t.actions.requestedToolConfirmations)){let u=(a=i.find(d=>d.id===c))!=null?a:void 0;if(!u)continue;let f={name:ke,args:{originalFunctionCall:u,toolConfirmation:l},id:pn()};r.add(f.id),o.push({functionCall:f})}return A({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:{parts:o,role:t.content.role},actions:t.actions,longRunningToolIds:Array.from(r)})}async function Ns(n,e,t){return J.startActiveSpan(`execute_tool ${n.name}`,async o=>{try{g.debug(`callToolAsync ${n.name}`);let r=await n.runAsync({args:e,toolContext:t});return _o({tool:n,args:e,functionResponseEvent:Ds(n,r,t,t.invocationContext)}),r}finally{o.end()}})}function Ds(n,e,t,o){let r;typeof e!="object"||e==null?r={result:e}:r=e;let s={role:"user",parts:[{functionResponse:{name:n.name,response:r,id:t.functionCallId}}]};return A({invocationId:o.invocationId,author:o.agent.name,content:s,actions:t.actions,branch:o.branch})}async function pr({invocationContext:n,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=I(e);return await Rt({invocationContext:n,functionCalls:a,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function Rt({invocationContext:n,functionCalls:e,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var u;let a=[],c=e.filter(f=>!i||f.id&&i.has(f.id));for(let f of c){let d;s&&f.id&&(d=s[f.id]);let{tool:p,toolContext:m}=Bs({invocationContext:n,functionCall:f,toolsDict:t,toolConfirmation:d});g.debug(`execute_tool ${p.name}`);let h=(u=f.args)!=null?u:{},C=null,y;if(C=await n.pluginManager.runBeforeToolCallback({tool:p,toolArgs:h,toolContext:m}),C==null){for(let se of o)if(C=await se({tool:p,args:h,context:m}),C)break}if(C==null)try{C=await Ns(p,h,m)}catch(se){if(se instanceof Error){let Ao=await n.pluginManager.runOnToolErrorCallback({tool:p,toolArgs:h,toolContext:m,error:se});Ao?C=Ao:y=se.message}else y=se}let $=await n.pluginManager.runAfterToolCallback({tool:p,toolArgs:h,toolContext:m,result:C});if($==null){for(let se of r)if($=await se({tool:p,args:h,context:m,response:C}),$)break}if($!=null&&(C=$),p.isLongRunning&&!C)continue;y?C={error:y}:(typeof C!="object"||C==null)&&(C={result:C});let R=A({invocationId:n.invocationId,author:n.agent.name,content:Os({functionResponse:{id:m.functionCallId,name:p.name,response:C}}),actions:m.actions,branch:n.branch});g.debug("traceToolCall",{tool:p.name,args:h,functionResponseEvent:R.id}),a.push(R)}if(!a.length)return null;let l=Fs(a);return a.length>1&&J.startActiveSpan("execute_tool (merged)",f=>{try{g.debug("execute_tool (merged)"),g.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id}),Lo({responseEventId:l.id,functionResponseEvent:l})}finally{f.end()}}),l}function Bs({invocationContext:n,functionCall:e,toolsDict:t,toolConfirmation:o}){if(!e.name||!(e.name in t))throw new Error(`Function ${e.name} is not found in the toolsDict.`);let r=new N({invocationContext:n,functionCallId:e.id||void 0,toolConfirmation:o});return{tool:t[e.name],toolContext:r}}function Fs(n){if(!n.length)throw new Error("No function response events provided.");if(n.length===1)return n[0];let e=[];for(let i of n)i.content&&i.content.parts&&e.push(...i.content.parts);let t=n[0],o=n.map(i=>i.actions||{}),r=yo(o);return A({author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}import{z as Cr}from"zod";function q(n,e){n.config||(n.config={});let t=e.join(`
|
|
6
|
+
import {createRequire as topLevelCreateRequire} from 'module';
|
|
7
|
+
const require = topLevelCreateRequire(import.meta.url);
|
|
8
|
+
var sa=Object.create;var _n=Object.defineProperty;var xr=Object.getOwnPropertyDescriptor;var aa=Object.getOwnPropertyNames;var ca=Object.getPrototypeOf,la=Object.prototype.hasOwnProperty;var ft=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var ua=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of aa(e))!la.call(n,r)&&r!==t&&_n(n,r,{get:()=>e[r],enumerable:!(o=xr(e,r))||o.enumerable});return n};var dt=(n,e,t)=>(t=n!=null?sa(ca(n)):{},ua(e||!n||!n.__esModule?_n(t,"default",{value:n,enumerable:!0}):t,n));var v=(n,e,t,o)=>{for(var r=o>1?void 0:o?xr(e,t):e,i=n.length-1,s;i>=0;i--)(s=n[i])&&(r=(o?s(e,t,r):s(r))||r);return o&&r&&_n(e,t,r),r};import{AGENT_CARD_PATH as nl}from"@a2a-js/sdk";import{ClientFactory as ol}from"@a2a-js/sdk/client";import{context as Gr,trace as jr}from"@opentelemetry/api";function Tr(n,e=[]){return Gt(n,fa,"",e)}function Sr(n,e=[]){return Gt(n,da,"",e)}var fa=n=>n.replace(/_([a-z])/g,(e,t)=>t.toUpperCase()),da=n=>n.replace(/[A-Z]/g,e=>"_"+e.toLowerCase());function Gt(n,e,t="",o=[]){if(Array.isArray(n))return n.map(r=>Gt(r,e,t,o));if(typeof n=="object"&&n!==null){let r=n,i={};for(let s of Object.keys(r)){let a=e(s),c=t!==""?t+"."+s:s;o.includes(c)?i[a]=r[s]:i[a]=Gt(r[s],e,c,o)}return i}return n}function V(n={}){return{stateDelta:{},artifactDelta:{},requestedAuthConfigs:{},requestedToolConfirmations:{},...n}}function Rr(n,e){let t=V();e&&Object.assign(t,e);for(let o of n)o&&(o.stateDelta&&Object.assign(t.stateDelta,o.stateDelta),o.artifactDelta&&Object.assign(t.artifactDelta,o.artifactDelta),o.requestedAuthConfigs&&Object.assign(t.requestedAuthConfigs,o.requestedAuthConfigs),o.requestedToolConfirmations&&Object.assign(t.requestedToolConfirmations,o.requestedToolConfirmations),o.skipSummarization!==void 0&&(t.skipSummarization=o.skipSummarization),o.transferToAgent!==void 0&&(t.transferToAgent=o.transferToAgent),o.escalate!==void 0&&(t.escalate=o.escalate));return t}function x(n={}){return{...n,id:n.id||Ln(),invocationId:n.invocationId||"",author:n.author,actions:n.actions||V(),longRunningToolIds:n.longRunningToolIds||[],branch:n.branch,timestamp:n.timestamp||Date.now()}}function Ce(n){return n.actions.skipSummarization||n.longRunningToolIds&&n.longRunningToolIds.length>0?!0:P(n).length===0&&K(n).length===0&&!n.partial&&!Ir(n)}function P(n){let e=[];if(n.content&&n.content.parts)for(let t of n.content.parts)t.functionCall&&e.push(t.functionCall);return e}function K(n){let e=[];if(n.content&&n.content.parts)for(let t of n.content.parts)t.functionResponse&&e.push(t.functionResponse);return e}function Ir(n){var e;return n.content&&((e=n.content.parts)!=null&&e.length)?n.content.parts[n.content.parts.length-1].codeExecutionResult!==void 0:!1}function pt(n){var e;return(e=n.content)!=null&&e.parts?n.content.parts.map(t=>{var o;return(o=t.text)!=null?o:""}).join(""):""}var wr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";function Ln(){let n="";for(let e=0;e<8;e++)n+=wr[Math.floor(Math.random()*wr.length)];return n}var pa=["actions.stateDelta","actions.artifactDelta","actions.requestedAuthConfigs","actions.requestedToolConfirmations","actions.customMetadata","content.parts.functionCall.args","content.parts.functionResponse.response"],ma=["actions.state_delta","actions.artifact_delta","actions.requested_auth_configs","actions.requested_tool_confirmations","actions.custom_metadata","content.parts.function_call.args","content.parts.function_response.response"];function On(n){return Tr(n,ma)}function br(n){return Sr(n,pa)}import{context as Mn,trace as Ct}from"@opentelemetry/api";var mt="1.0.0";var ga="gen_ai.agent.description",ha="gen_ai.agent.name",Ca="gen_ai.conversation.id",Nn="gen_ai.operation.name",kr="gen_ai.tool.call.id",Pr="gen_ai.tool.description",_r="gen_ai.tool.name",va="gen_ai.tool.type",ie=Ct.getTracer("gcp.vertex.agent",mt);function gt(n){try{return JSON.stringify(n)}catch{return"<not serializable>"}}function Lr({agent:n,invocationContext:e}){let t=Ct.getActiveSpan();t&&t.setAttributes({[Nn]:"invoke_agent",[ga]:n.description,[ha]:n.name,[Ca]:e.session.id})}function Or({tool:n,args:e,functionResponseEvent:t}){var s,a;let o=Ct.getActiveSpan();if(!o)return;o.setAttributes({[Nn]:"execute_tool",[Pr]:n.description||"",[_r]:n.name,[va]:n.constructor.name,"gcp.vertex.agent.llm_request":"{}","gcp.vertex.agent.llm_response":"{}","gcp.vertex.agent.tool_call_args":ht()?gt(e):"{}"});let r="<not specified>",i="<not specified>";if((s=t.content)!=null&&s.parts){let l=(a=t.content.parts[0])==null?void 0:a.functionResponse;l!=null&&l.id&&(r=l.id),l!=null&&l.response&&(i=l.response)}(typeof i!="object"||i===null)&&(i={result:i}),o.setAttributes({[kr]:r,"gcp.vertex.agent.event_id":t.id,"gcp.vertex.agent.tool_response":ht()?gt(i):"{}"})}function Mr({responseEventId:n,functionResponseEvent:e}){let t=Ct.getActiveSpan();t&&(t.setAttributes({[Nn]:"execute_tool",[_r]:"(merged tools)",[Pr]:"(merged tools)",[kr]:n,"gcp.vertex.agent.tool_call_args":"N/A","gcp.vertex.agent.event_id":n,"gcp.vertex.agent.llm_request":"{}","gcp.vertex.agent.llm_response":"{}"}),t.setAttribute("gcp.vertex.agent.tool_response",ht()?gt(e):"{}"))}function Nr({invocationContext:n,eventId:e,llmRequest:t,llmResponse:o}){var i,s,a;let r=Ct.getActiveSpan();if(r&&(r.setAttributes({"gen_ai.system":"gcp.vertex.agent","gen_ai.request.model":t.model,"gcp.vertex.agent.invocation_id":n.invocationId,"gcp.vertex.agent.session_id":n.session.id,"gcp.vertex.agent.event_id":e,"gcp.vertex.agent.llm_request":ht()?gt(Aa(t)):"{}"}),(i=t.config)!=null&&i.topP&&r.setAttribute("gen_ai.request.top_p",t.config.topP),((s=t.config)==null?void 0:s.maxOutputTokens)!==void 0&&r.setAttribute("gen_ai.request.max_tokens",t.config.maxOutputTokens),r.setAttribute("gcp.vertex.agent.llm_response",ht()?gt(o):"{}"),o.usageMetadata&&r.setAttribute("gen_ai.usage.input_tokens",o.usageMetadata.promptTokenCount||0),(a=o.usageMetadata)!=null&&a.candidatesTokenCount&&r.setAttribute("gen_ai.usage.output_tokens",o.usageMetadata.candidatesTokenCount),o.finishReason)){let c=typeof o.finishReason=="string"?o.finishReason.toLowerCase():String(o.finishReason).toLowerCase();r.setAttribute("gen_ai.response.finish_reasons",[c])}}function Aa(n){let e={model:n.model,contents:[]};if(n.config){let{responseSchema:t,...o}=n.config;e.config=o}return e.contents=n.contents.map(t=>{var o;return{role:t.role,parts:((o=t.parts)==null?void 0:o.filter(r=>!r.inlineData))||[]}}),e}function Fr(n,e){return{next:Mn.bind(n,e.next.bind(e)),return:Mn.bind(n,e.return.bind(e)),throw:Mn.bind(n,e.throw.bind(e)),[Symbol.asyncIterator](){return Fr(n,e[Symbol.asyncIterator]())}}}function be(n,e,t){let o=t.call(e);return Fr(n,o)}function ht(){let n=process.env.ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS||"true";return n==="true"||n==="1"}function Z(){return typeof window<"u"}var jt="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function I(){let n="";for(let e=0;e<jt.length;e++){let t=Math.random()*16|0;jt[e]==="x"?n+=t.toString(16):jt[e]==="y"?n+=(t&3|8).toString(16):n+=jt[e]}return n}function Br(n){return Z()?window.atob(n):Buffer.from(n,"base64").toString()}function ke(n){if(!process.env)return!1;let e=(process.env[n]||"").toLowerCase();return["true","1"].includes(e)}import*as ee from"winston";var Dr=(r=>(r[r.DEBUG=0]="DEBUG",r[r.INFO=1]="INFO",r[r.WARN=2]="WARN",r[r.ERROR=3]="ERROR",r))(Dr||{}),Fn=class{constructor(){this.logLevel=1;this.logger=ee.createLogger({levels:{debug:0,info:1,warn:2,error:3},level:"error",format:ee.format.combine(ee.format.label({label:"ADK"}),ee.format(e=>(e.level=e.level.toUpperCase(),e))(),ee.format.colorize(),ee.format.timestamp(),ee.format.printf(e=>`${e.level}: [${e.label}] ${e.timestamp} ${e.message}`)),transports:[new ee.transports.Console]})}setLogLevel(e){this.logLevel=e}log(e,...t){this.logLevel>e||this.logger.log(e.toString(),t.join(" "))}debug(...e){this.logLevel>0||this.logger.debug(e.join(" "))}info(...e){this.logLevel>1||this.logger.info(e.join(" "))}warn(...e){this.logLevel>2||this.logger.warn(e.join(" "))}error(...e){this.logLevel>3||this.logger.error(e.join(" "))}},Bn=class{setLogLevel(e){}log(e,...t){}debug(...e){}info(...e){}warn(...e){}error(...e){}},ve=new Fn;function Ea(n){ve=n!=null?n:new Bn}function Dn(){return ve}function ya(n){m.setLogLevel(n)}var m={setLogLevel(n){ve.setLogLevel(n)},log(n,...e){ve.log(n,...e)},debug(...n){ve.debug(...n)},info(...n){ve.info(...n)},warn(...n){ve.warn(...n)},error(...n){ve.error(...n)}};var Un=(r=>(r.CLIENT_CREDENTIALS="client_credentials",r.AUTHORIZATION_CODE="authorization_code",r.IMPLICIT="implicit",r.PASSWORD="password",r))(Un||{});function Ur(n){if(n.clientCredentials)return"client_credentials";if(n.authorizationCode)return"authorization_code";if(n.implicit)return"implicit";if(n.password)return"password"}var z=class extends Error{};function $n(n){if(n.type==="openIdConnect"&&n.tokenEndpoint)return n.tokenEndpoint;if(n.type==="oauth2"&&n.flows){let e=n.flows,t=e.authorizationCode||e.clientCredentials||e.password||e.implicit;if(t&&"tokenUrl"in t)return t.tokenUrl}}async function qn(n,e){try{let t=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:e.toString()});if(!t.ok)throw new Error(`Token request failed with status ${t.status}`);let o=await t.json();return{accessToken:o.access_token,refreshToken:o.refresh_token,idToken:o.id_token,expiresIn:o.expires_in,expiresAt:o.expires_in?Date.now()+o.expires_in*1e3:void 0}}catch(t){throw m.error(`Failed to fetch OAuth2 tokens: ${t}`),t}}function $r(n){try{return new URL(n).searchParams.get("code")||void 0}catch(e){m.warn(`Failed to parse authorization URI ${n}: ${e}`);return}}function Gn(n){let e=new URLSearchParams;return e.set("grant_type",n.grantType),e.set("client_id",n.clientId),e.set("client_secret",n.clientSecret),n.grantType==="authorization_code"?(e.set("code",n.code),n.redirectUri&&e.set("redirect_uri",n.redirectUri),n.codeVerifier&&e.set("code_verifier",n.codeVerifier)):n.grantType==="refresh_token"&&e.set("refresh_token",n.refreshToken),e}var vt=class{async exchange({authCredential:e,authScheme:t}){var r;if(!t)throw new z("authScheme is required for OAuth2 credential exchange");if((r=e.oauth2)!=null&&r.accessToken)return{credential:e,wasExchanged:!1};let o=xa(t);return o==="client_credentials"?Ta({authCredential:e,authScheme:t}):o==="authorization_code"?Sa({authCredential:e,authScheme:t}):(m.warn(`Unsupported OAuth2 grant type: ${o}`),{credential:e,wasExchanged:!1})}};function xa(n){var e;if("flows"in n&&n.flows)return Ur(n.flows);if(n.grantTypesSupported)return(e=n.grantTypesSupported)!=null&&e.includes("client_credentials")?"client_credentials":"authorization_code"}async function Ta({authCredential:n,authScheme:e}){var r,i;let t=$n(e);if(!t)throw new z("Token endpoint not found in auth scheme.");if(!((r=n.oauth2)!=null&&r.clientId)||!((i=n.oauth2)!=null&&i.clientSecret))throw new z("clientId and clientSecret are required for client credentials exchange.");let o=Gn({grantType:"client_credentials",clientId:n.oauth2.clientId,clientSecret:n.oauth2.clientSecret});try{let s=await qn(t,o);return{credential:{...n,oauth2:{...n.oauth2,...s}},wasExchanged:!0}}catch(s){throw new z(`Failed to exchange tokens: ${s instanceof Error?s.message:String(s)}`)}}async function Sa({authCredential:n,authScheme:e}){var i,s,a,c;let t=$n(e);if(!t)throw new z("Token endpoint not found in auth scheme.");if(!((i=n.oauth2)!=null&&i.clientId)||!((s=n.oauth2)!=null&&s.clientSecret)||!((a=n.oauth2)!=null&&a.authCode)&&!((c=n.oauth2)!=null&&c.authResponseUri))throw new z("clientId, clientSecret, and either authCode or authResponseUri are required for authorization code exchange.");let o=n.oauth2.authCode;if(!o&&n.oauth2.authResponseUri&&(o=$r(n.oauth2.authResponseUri)),n.oauth2.authResponseUri&&n.oauth2.state)try{let u=new URL(n.oauth2.authResponseUri).searchParams.get("state")||void 0;if(n.oauth2.state!==u)throw new z("State mismatch detected. Potential CSRF attack.")}catch(l){throw new z(`Failed to parse authResponseUri for state validation: ${l instanceof Error?l.message:String(l)}`)}if(!o)throw new z("Authorization code not found in auth response.");let r=Gn({grantType:"authorization_code",clientId:n.oauth2.clientId,clientSecret:n.oauth2.clientSecret,code:o,redirectUri:n.oauth2.redirectUri,codeVerifier:n.oauth2.codeVerifier});try{let l=await qn(t,r);return{credential:{...n,oauth2:{...n.oauth2,...l}},wasExchanged:!0}}catch(l){throw new z(`Failed to exchange tokens: ${l instanceof Error?l.message:String(l)}`)}}var Ke=class{constructor(e){this.authConfig=e}getAuthResponse(e){let t="temp:"+this.authConfig.credentialKey;return e.get(t)}async parseAndStoreAuthResponse(e){let t="temp:"+this.authConfig.credentialKey,o=this.authConfig.authScheme.type;if(!["oauth2","openIdConnect"].includes(o)){e.set(t,this.authConfig.exchangedAuthCredential);return}if(this.authConfig.exchangedAuthCredential){let i=await new vt().exchange({authCredential:this.authConfig.exchangedAuthCredential,authScheme:this.authConfig.authScheme});e.set(t,i.credential)}}generateAuthRequest(){var t,o;let e=this.authConfig.authScheme.type;if(!["oauth2","openIdConnect"].includes(e))return this.authConfig;if((o=(t=this.authConfig.exchangedAuthCredential)==null?void 0:t.oauth2)!=null&&o.authUri)return this.authConfig;if(!this.authConfig.rawAuthCredential)throw new Error(`Auth Scheme ${e} requires authCredential.`);if(!this.authConfig.rawAuthCredential.oauth2)throw new Error(`Auth Scheme ${e} requires oauth2 in authCredential.`);if(this.authConfig.rawAuthCredential.oauth2.authUri)return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.authConfig.rawAuthCredential};if(!this.authConfig.rawAuthCredential.oauth2.clientId||!this.authConfig.rawAuthCredential.oauth2.clientSecret)throw new Error(`Auth Scheme ${e} requires both clientId and clientSecret in authCredential.oauth2.`);return{credentialKey:this.authConfig.credentialKey,authScheme:this.authConfig.authScheme,rawAuthCredential:this.authConfig.rawAuthCredential,exchangedAuthCredential:this.generateAuthUri()}}generateAuthUri(){let e=this.authConfig.authScheme,t=this.authConfig.rawAuthCredential;if(!t||!t.oauth2)return t;let o="",r=[];if("authorizationEndpoint"in e)o=e.authorizationEndpoint,r=e.scopes||[];else if(e.type==="oauth2"&&e.flows){let c=e.flows,l=c.implicit||c.authorizationCode||c.clientCredentials||c.password;l&&("authorizationUrl"in l&&l.authorizationUrl?o=l.authorizationUrl:"tokenUrl"in l&&l.tokenUrl&&(o=l.tokenUrl),l.scopes&&(r=Object.keys(l.scopes)))}if(!o)throw new Error("Authorization endpoint not configured in auth scheme.");let i=I(),s=new URL(o);return s.searchParams.set("client_id",t.oauth2.clientId||""),s.searchParams.set("redirect_uri",t.oauth2.redirectUri||""),s.searchParams.set("response_type","code"),s.searchParams.set("scope",r.join(" ")),s.searchParams.set("state",i),s.searchParams.set("access_type","offline"),s.searchParams.set("prompt","consent"),{...t,oauth2:{...t.oauth2,authUri:s.toString(),state:i}}}};var T=class{constructor(e={},t={}){this.value=e;this.delta=t}get(e,t){return e in this.delta?this.delta[e]:e in this.value?this.value[e]:t}set(e,t){this.value[e]=t,this.delta[e]=t}has(e){return e in this.value||e in this.delta}hasDelta(){return Object.keys(this.delta).length>0}update(e){Object.assign(this.delta,e),Object.assign(this.value,e)}toRecord(){return{...this.value,...this.delta}}};T.APP_PREFIX="app:",T.USER_PREFIX="user:",T.TEMP_PREFIX="temp:";var Pe=class{constructor({hint:e,confirmed:t,payload:o}){this.hint=e!=null?e:"",this.confirmed=t,this.payload=o}};var b=class{constructor(e){this.invocationContext=e}get userContent(){return this.invocationContext.userContent}get invocationId(){return this.invocationContext.invocationId}get userId(){return this.invocationContext.userId}get sessionId(){return this.invocationContext.session.id}get agentName(){return this.invocationContext.agent.name}get state(){return new T(this.invocationContext.session.state,{})}};var N=class extends b{constructor(e){super(e.invocationContext),this.eventActions=e.eventActions||V(),this._state=new T(e.invocationContext.session.state,this.eventActions.stateDelta),this.functionCallId=e.functionCallId,this.toolConfirmation=e.toolConfirmation,this.abortSignal=e.invocationContext.abortSignal}get state(){return this._state}get actions(){return this.eventActions}loadArtifact(e,t){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.loadArtifact({appName:this.invocationContext.appName,userId:this.invocationContext.userId,sessionId:this.invocationContext.session.id,filename:e,version:t})}async saveArtifact(e,t){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");let o=await this.invocationContext.artifactService.saveArtifact({appName:this.invocationContext.appName,userId:this.invocationContext.userId,sessionId:this.invocationContext.session.id,filename:e,artifact:t});return this.eventActions.artifactDelta[e]=o,o}requestCredential(e){if(!this.functionCallId)throw new Error("functionCallId is not set.");let t=new Ke(e);this.eventActions.requestedAuthConfigs[this.functionCallId]=t.generateAuthRequest()}getAuthResponse(e){return new Ke(e).getAuthResponse(this.state)}listArtifacts(){if(!this.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.invocationContext.artifactService.listArtifactKeys({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,sessionId:this.invocationContext.session.id})}searchMemory(e){if(!this.invocationContext.memoryService)throw new Error("Memory service is not initialized.");return this.invocationContext.memoryService.searchMemory({appName:this.invocationContext.session.appName,userId:this.invocationContext.session.userId,query:e})}requestConfirmation({hint:e,payload:t}){if(!this.functionCallId)throw new Error("functionCallId is not set.");this.eventActions.requestedToolConfirmations[this.functionCallId]=new Pe({hint:e,confirmed:!1,payload:t})}};var jn=class{constructor(){this.numberOfLlmCalls=0}incrementAndEnforceLlmCallsLimit(e){if(this.numberOfLlmCalls++,e&&e.maxLlmCalls>0&&this.numberOfLlmCalls>e.maxLlmCalls)throw new Error(`Max number of llm calls limit of ${e.maxLlmCalls} exceeded`)}},Y=class{constructor(e){this.invocationCostManager=new jn;this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.invocationId=e.invocationId,this.branch=e.branch,this.agent=e.agent,this.userContent=e.userContent,this.session=e.session,this.endInvocation=e.endInvocation||!1,this.transcriptionCache=e.transcriptionCache,this.runConfig=e.runConfig,this.liveRequestQueue=e.liveRequestQueue,this.activeStreamingTools=e.activeStreamingTools,this.pluginManager=e.pluginManager,this.abortSignal=e.abortSignal}get appName(){return this.session.appName}get userId(){return this.session.userId}incrementLlmCallCount(){this.invocationCostManager.incrementAndEnforceLlmCallsLimit(this.runConfig)}};function qr(){return`e-${I()}`}var Vn=Symbol.for("google.adk.baseAgent");function Ra(n){return typeof n=="object"&&n!==null&&Vn in n&&n[Vn]===!0}var zr;zr=Vn;var $=class{constructor(e){this[zr]=!0;this.name=wa(e.name),this.description=e.description,this.parentAgent=e.parentAgent,this.subAgents=e.subAgents||[],this.beforeAgentCallback=Vr(e.beforeAgentCallback),this.afterAgentCallback=Vr(e.afterAgentCallback),this.setParentAgentForSubAgents()}get rootAgent(){return ba(this)}async*runAsync(e){let t=ie.startSpan(`invoke_agent ${this.name}`),o=jr.setSpan(Gr.active(),t);try{yield*be(o,this,async function*(){var a,c;let r=this.createInvocationContext(e),i=await this.handleBeforeAgentCallback(r);if(i&&(yield i),r.endInvocation||(a=e.abortSignal)!=null&&a.aborted)return;Lr({agent:this,invocationContext:r});for await(let l of this.runAsyncImpl(r))yield l;if(r.endInvocation||(c=e.abortSignal)!=null&&c.aborted)return;let s=await this.handleAfterAgentCallback(r);s&&(yield s)})}finally{t.end()}}async*runLive(e){let t=ie.startSpan(`invoke_agent ${this.name}`),o=jr.setSpan(Gr.active(),t);try{throw yield*be(o,this,async function*(){}),new Error("Live mode is not implemented yet.")}finally{t.end()}}findAgent(e){return this.name===e?this:this.findSubAgent(e)}findSubAgent(e){for(let t of this.subAgents){let o=t.findAgent(e);if(o)return o}}createInvocationContext(e){return new Y({...e,agent:this})}async handleBeforeAgentCallback(e){var o;if(this.beforeAgentCallback.length===0)return;let t=new N({invocationContext:e});for(let r of this.beforeAgentCallback){let i=await r(t);if((o=e.abortSignal)!=null&&o.aborted)return;if(i)return e.endInvocation=!0,x({invocationId:e.invocationId,author:this.name,branch:e.branch,content:i,actions:t.eventActions})}if(t.state.hasDelta())return x({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}async handleAfterAgentCallback(e){var o;if(this.afterAgentCallback.length===0)return;let t=new N({invocationContext:e});for(let r of this.afterAgentCallback){let i=await r(t);if((o=e.abortSignal)!=null&&o.aborted)return;if(i)return x({invocationId:e.invocationId,author:this.name,branch:e.branch,content:i,actions:t.eventActions})}if(t.state.hasDelta())return x({invocationId:e.invocationId,author:this.name,branch:e.branch,actions:t.eventActions})}setParentAgentForSubAgents(){for(let e of this.subAgents){if(e.parentAgent)throw new Error(`Agent "${e.name}" already has a parent agent, current parent: "${e.parentAgent.name}", trying to add: "${this.name}"`);e.parentAgent=this}}};function wa(n){if(!Ia(n))throw new Error(`Found invalid agent name: "${n}". Agent name must be a valid identifier. It should start with a letter (a-z, A-Z) or an underscore (_), and can only contain letters, digits (0-9), underscores, and hyphens.`);if(n==="user")throw new Error("Agent name cannot be 'user'. 'user' is reserved for end-user's input.");return n}function Ia(n){return/^[\p{ID_Start}$_][\p{ID_Continue}$_-]*$/u.test(n)}function ba(n){for(;n.parentAgent;)n=n.parentAgent;return n}function Vr(n){return n?Array.isArray(n)?n:[n]:[]}function Ae(n){return(n==null?void 0:n.kind)==="status-update"}function At(n){return(n==null?void 0:n.kind)==="artifact-update"}function zn(n){return(n==null?void 0:n.kind)==="message"}function se(n){return(n==null?void 0:n.kind)==="task"}function Vt(n){return At(n)?n.artifact.metadata||{}:Ae(n)||se(n)||zn(n)?n.metadata||{}:{}}function zt(n){return(Ae(n)||se(n))&&n.status.state==="failed"}function Wr(n){return(Ae(n)||se(n))&&["completed","failed","canceled","rejected"].includes(n.status.state)}function Wt(n){return(Ae(n)||se(n))&&n.status.state==="input-required"}function Wn(n){var t;if(!zt(n))return;let e=((t=n.status.message)==null?void 0:t.parts)||[];if(e.length!==0&&e[0].kind==="text")return e[0].text}function Hr({contextId:n,message:e,taskId:t,metadata:o}){return{kind:"task",id:t||I(),contextId:n,history:[e],status:{state:"submitted",timestamp:new Date().toISOString()},metadata:o}}function Kr({taskId:n,contextId:e,message:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!1,status:{state:"working",message:t,timestamp:new Date().toISOString()},metadata:o}}function Yr({taskId:n,contextId:e,metadata:t}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"completed",timestamp:new Date().toISOString()},metadata:t}}function Jr({taskId:n,contextId:e,artifactId:t,parts:o=[],metadata:r,append:i,lastChunk:s}){return{kind:"artifact-update",taskId:n,contextId:e,append:i,lastChunk:s,artifact:{artifactId:t||I(),parts:o},metadata:r}}function Ht({taskId:n,contextId:e,error:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"failed",message:{kind:"message",messageId:I(),role:"agent",taskId:n,contextId:e,parts:[{kind:"text",text:t.message}]},timestamp:new Date().toISOString()},metadata:o}}function Xr({taskId:n,contextId:e,parts:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"input-required",message:{kind:"message",messageId:I(),role:"agent",taskId:n,contextId:e,parts:t},timestamp:new Date().toISOString()},metadata:o}}function Qr({taskId:n,contextId:e,parts:t,metadata:o}){return{kind:"status-update",taskId:n,contextId:e,final:!0,status:{state:"input-required",message:{kind:"message",messageId:I(),role:"agent",taskId:n,contextId:e,parts:t},timestamp:new Date().toISOString()},metadata:o}}import{createModelContent as ka}from"@google/genai";var _="adk_",Zr="a2a:",E=(w=>(w.APP_NAME=`${_}app_name`,w.USER_ID=`${_}user_id`,w.SESSION_ID=`${_}session_id`,w.INVOCATION_ID=`${_}invocation_id`,w.AUTHOR=`${_}author`,w.BRANCH=`${_}branch`,w.DATA_PART_TYPE=`${_}type`,w.PARTIAL=`${_}partial`,w.ESCALATE=`${_}escalate`,w.TRANSFER_TO_AGENT=`${_}transfer_to_agent`,w.IS_LONG_RUNNING=`${_}is_long_running`,w.THOUGHT=`${_}thought`,w.ERROR_CODE=`${_}error_code`,w.ERROR_MESSAGE=`${_}error_message`,w.CITATION_METADATA=`${_}citation_metadata`,w.GROUNDING_METADATA=`${_}grounding_metadata`,w.USAGE_METADATA=`${_}usage_metadata`,w.CUSTOM_METADATA=`${_}custom_metadata`,w.VIDEO_METADATA=`${_}video_metadata`,w))(E||{}),Et=(t=>(t.TASK_ID=`${Zr}task_id`,t.CONTEXT_ID=`${Zr}context_id`,t))(Et||{});function yt(n,{appName:e,userId:t,sessionId:o}){return{...xt(n.actions),...Ee({appName:e,userId:t,sessionId:o}),[E.INVOCATION_ID]:n.invocationId,[E.AUTHOR]:n.author,[E.BRANCH]:n.branch,[E.ERROR_CODE]:n.errorMessage,[E.ERROR_MESSAGE]:n.errorMessage,[E.CITATION_METADATA]:n.citationMetadata,[E.GROUNDING_METADATA]:n.groundingMetadata,[E.USAGE_METADATA]:n.usageMetadata,[E.CUSTOM_METADATA]:n.customMetadata,[E.PARTIAL]:n.partial,[E.IS_LONG_RUNNING]:(n.longRunningToolIds||[]).length>0}}function Ee({appName:n,userId:e,sessionId:t}){return{[E.APP_NAME]:n,[E.USER_ID]:e,[E.SESSION_ID]:t}}function xt(n){return{[E.ESCALATE]:n.escalate,[E.TRANSFER_TO_AGENT]:n.transferToAgent}}var Kt=class{constructor(e){this.request=e;this.aggregations=new Map;this.aggregationOrder=[]}aggregatePartial(e,t,o){if(Vt(t)[E.PARTIAL])return[o];if(Ae(t)&&t.final){let a=[];for(let c of this.aggregationOrder){let l=this.aggregations.get(c);l&&a.push(this.buildNonPartialAggregation(e,l))}return this.aggregations.clear(),this.aggregationOrder=[],[...a,o]}if(se(t))return this.aggregations.clear(),this.aggregationOrder=[],[o];if(!At(t))return[o];let i=t.artifact.artifactId;if(!t.append&&(this.removeAggregation(i),t.lastChunk))return o.partial=!1,[o];let s=this.aggregations.get(i);return s?(this.aggregationOrder=this.aggregationOrder.filter(a=>a!==i),this.aggregationOrder.push(i)):(s={aggregatedText:"",aggregatedThoughts:"",parts:[]},this.aggregations.set(i,s),this.aggregationOrder.push(i)),this.updateAggregation(s,o),t.lastChunk?(this.removeAggregation(i),[o,this.buildNonPartialAggregation(e,s)]):[o]}removeAggregation(e){this.aggregations.delete(e),this.aggregationOrder=this.aggregationOrder.filter(t=>t!==e)}updateAggregation(e,t){var r;let o=((r=t.content)==null?void 0:r.parts)||[];for(let i of o)i.text&&i.text!==""?i.thought?e.aggregatedThoughts+=i.text:e.aggregatedText+=i.text:(this.promoteTextBlocksToParts(e),e.parts.push(i));t.citationMetadata&&(e.citations||(e.citations={citations:[]}),e.citations.citations||(e.citations.citations=[]),e.citations.citations.push(...t.citationMetadata.citations||[])),t.customMetadata&&(e.customMeta||(e.customMeta={}),Object.assign(e.customMeta,t.customMetadata)),t.groundingMetadata&&(e.grounding=t.groundingMetadata),t.usageMetadata&&(e.usage=t.usageMetadata)}buildNonPartialAggregation(e,t){return this.promoteTextBlocksToParts(t),x({author:e.agent.name,invocationId:e.invocationId,content:t.parts.length>0?ka([...t.parts]):void 0,customMetadata:t.customMeta,groundingMetadata:t.grounding,citationMetadata:t.citations,usageMetadata:t.usage,turnComplete:!1,partial:!1})}promoteTextBlocksToParts(e){e.aggregatedThoughts!==""&&(e.parts.push({thought:!0,text:e.aggregatedThoughts}),e.aggregatedThoughts=""),e.aggregatedText!==""&&(e.parts.push({text:e.aggregatedText}),e.aggregatedText="")}updateCustomMetadata(e,t){let o={};if(this.request&&e.turnComplete&&(o.request=this.request),t&&(o.response=t,se(t)?(t.id&&(o.task_id=t.id),t.contextId&&(o.context_id=t.contextId)):t.taskId&&(o.task_id=t.taskId,t.contextId&&(o.context_id=t.contextId))),Object.keys(o).length!==0){e.customMetadata||(e.customMetadata={});for(let[r,i]of Object.entries(o))i!=null&&(e.customMetadata[`a2a:${r}`]=i)}}};import{createModelContent as Pa,createUserContent as _a}from"@google/genai";function de(n=[],e=[]){return n.map(t=>La(t,e))}function La(n,e){return n.text!==void 0&&n.text!==null?Oa(n):n.inlineData||n.fileData?Ma(n):Na(n,e)}function Oa(n){let e={kind:"text",text:n.text||""};return n.thought&&(e.metadata={[E.THOUGHT]:!0}),e}function Ma(n){let e={};if(n.videoMetadata&&(e[E.VIDEO_METADATA]=n.videoMetadata),n.fileData)return{kind:"file",file:{uri:n.fileData.fileUri||"",mimeType:n.fileData.mimeType},metadata:e};if(n.inlineData)return{kind:"file",file:{bytes:n.inlineData.data||"",mimeType:n.inlineData.mimeType},metadata:e};throw new Error(`Not a file part: ${JSON.stringify(n)}`)}function Na(n,e=[]){let t,o;if(n.functionCall)t="function_call",o=n.functionCall;else if(n.functionResponse)t="function_response",o=n.functionResponse;else if(n.executableCode)t="executable_code",o=n.executableCode;else if(n.codeExecutionResult)t="code_execution_result",o=n.codeExecutionResult;else return{kind:"data",data:{},metadata:{}};let r={[E.DATA_PART_TYPE]:t};return n.functionCall&&n.functionCall.id&&e.includes(n.functionCall.id)&&(r[E.IS_LONG_RUNNING]=!0),n.functionResponse&&n.functionResponse.id&&e.includes(n.functionResponse.id)&&(r[E.IS_LONG_RUNNING]=!0),{kind:"data",data:o,metadata:r}}function ei(n){let e=ae(n.parts);return n.role==="user"?_a(e):Pa(e)}function ae(n){return n.map(e=>Hn(e))}function Hn(n){if(n.kind==="text")return Fa(n);if(n.kind==="file")return Ba(n);if(n.kind==="data")return Da(n);throw new Error(`Unknown part kind: ${JSON.stringify(n)}`)}function Fa(n){var e;return{text:n.text,thought:!!((e=n.metadata)!=null&&e[E.THOUGHT])}}function Ba(n){var t;let e={};if((t=n.metadata)!=null&&t[E.VIDEO_METADATA]&&(e.videoMetadata=n.metadata[E.VIDEO_METADATA]),"bytes"in n.file)return e.inlineData={data:n.file.bytes,mimeType:n.file.mimeType||""},e;if("uri"in n.file)return e.fileData={fileUri:n.file.uri,mimeType:n.file.mimeType||""},e;throw new Error(`Not a file part: ${JSON.stringify(n)}`)}function Da(n){var o;if(!n.data)throw new Error(`No data in part: ${JSON.stringify(n)}`);let e=n.data,t=(o=n.metadata)==null?void 0:o[E.DATA_PART_TYPE];return t==="function_call"?{functionCall:e}:t==="function_response"?{functionResponse:e}:t==="executable_code"?{executableCode:e}:t==="code_execution_result"?{codeExecutionResult:e}:{text:JSON.stringify(n.data)}}function ti(n,e){let t=n.events;if(e<0||e>=t.length)return;let o=t[e];if(o.author!=="user")return;let r=$a(o);if(r)for(let i=e-1;i>=0;i--){let s=t[i];if(!Ua(s,r))continue;let a=s.customMetadata||{},c=a[Et.TASK_ID]||"",l=a[Et.CONTEXT_ID]||"";return{response:o,taskId:c,contextId:l}}}function Ua(n,e){return!n||!n.content||!n.content.parts?!1:n.content.parts.some(t=>t.functionCall&&t.functionCall.id===e)}function $a(n){var t;if(!n||!n.content||!n.content.parts)return;let e=n.content.parts.find(o=>o.functionResponse);return(t=e==null?void 0:e.functionResponse)==null?void 0:t.id}function ni(n,e){let t=e.events,o,r=-1;for(let s=t.length-1;s>=0;s--){let a=t[s];if(a.author===n.agent.name){r=s,o=(a.customMetadata||{})[Et.CONTEXT_ID];break}}let i=[];for(let s=r+1;s<t.length;s++){let a=t[s];if(a.author!=="user"&&a.author!==n.agent.name&&(a=qa(n,a)),!a.content||!a.content.parts||a.content.parts.length===0)continue;let c=de(a.content.parts,a.longRunningToolIds);i.push(...c)}return{parts:i,contextId:o}}function qa(n,e){let t=x({author:"user",invocationId:n.invocationId});if(!e.content||!e.content.parts)return t;let o=[{text:"For context:"}];for(let r of e.content.parts)if(!r.thought)if(r.text)o.push({text:`[${e.author}] said: ${r.text}`});else if(r.functionCall){let i=r.functionCall;o.push({text:`[${e.author}] called tool ${i.name} with parameters: ${JSON.stringify(i.args)}`})}else if(r.functionResponse){let i=r.functionResponse;o.push({text:`[${e.author}] ${i.name} tool returned result: ${JSON.stringify(i.response)}`})}else o.push(r);return o.length>1&&(t.content={role:"user",parts:o}),t}import{DefaultAgentCardResolver as Bc}from"@a2a-js/sdk/client";import*as ds from"fs/promises";import{context as Oc,trace as Mc}from"@opentelemetry/api";var Ga="google-adk",ja="gl-typescript",Va="remote_reasoning_engine",za="GOOGLE_CLOUD_AGENT_ENGINE_ID";function Wa(){let n=`${Ga}/${mt}`;!Z()&&process.env[za]&&(n=`${n}+${Va}`);let e=`${ja}/${Z()?window.navigator.userAgent:process.version}`;return[n,e]}function oi(){return Wa()}var Kn=Symbol.for("google.adk.baseModel");function Yn(n){return typeof n=="object"&&n!==null&&Kn in n&&n[Kn]===!0}var ri;ri=Kn;var ye=class{constructor({model:e}){this[ri]=!0;this.model=e}get trackingHeaders(){let t=oi().join(" ");return{"x-goog-api-client":t,"user-agent":t}}maybeAppendUserContent(e){var t;e.contents.length===0&&e.contents.push({role:"user",parts:[{text:"Handle the requests as specified in the System Instruction."}]}),((t=e.contents[e.contents.length-1])==null?void 0:t.role)!=="user"&&e.contents.push({role:"user",parts:[{text:"Continue processing previous requests as instructed. Exit or provide a summary if no more outputs are needed."}]})}};ye.supportedModels=[];import{createPartFromText as ec,GoogleGenAI as to}from"@google/genai";var Yt=(t=>(t.VERTEX_AI="VERTEX_AI",t.GEMINI_API="GEMINI_API",t))(Yt||{});function ii(){return ke("GOOGLE_GENAI_USE_VERTEXAI")?"VERTEX_AI":"GEMINI_API"}import{FinishReason as Zt}from"@google/genai";import{JSONPath as gi}from"jsonpath-plus";import{createUserContent as Ha}from"@google/genai";import{isEmpty as si}from"lodash-es";var Jn="adk-",Jt="adk_request_credential",Ye="adk_request_confirmation",Ka={handleFunctionCallList:Xt,generateAuthEvent:Xn,generateRequestConfirmationEvent:Qn};function _e(){return`${Jn}${I()}`}function ai(n){let e=P(n);if(e)for(let t of e)t.id||(t.id=_e())}function ci(n){if(n&&n.parts)for(let e of n.parts)e.functionCall&&e.functionCall.id&&e.functionCall.id.startsWith(Jn)&&(e.functionCall.id=void 0),e.functionResponse&&e.functionResponse.id&&e.functionResponse.id.startsWith(Jn)&&(e.functionResponse.id=void 0)}function li(n,e){let t=new Set;for(let o of n)o.name&&o.name in e&&e[o.name].isLongRunning&&o.id&&t.add(o.id);return t}function Xn(n,e){var r;if(!((r=e.actions)!=null&&r.requestedAuthConfigs)||si(e.actions.requestedAuthConfigs))return;let t=[],o=new Set;for(let[i,s]of Object.entries(e.actions.requestedAuthConfigs)){let a={name:Jt,args:{function_call_id:i,auth_config:s},id:_e()};o.add(a.id),t.push({functionCall:a})}return x({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:{parts:t,role:e.content.role},longRunningToolIds:Array.from(o)})}function Qn({invocationContext:n,functionCallEvent:e,functionResponseEvent:t}){var s,a;if(!((s=t.actions)!=null&&s.requestedToolConfirmations)||si(t.actions.requestedToolConfirmations))return;let o=[],r=new Set,i=P(e);for(let[c,l]of Object.entries(t.actions.requestedToolConfirmations)){let u=(a=i.find(d=>d.id===c))!=null?a:void 0;if(!u)continue;let f={name:Ye,args:{originalFunctionCall:u,toolConfirmation:l},id:_e()};r.add(f.id),o.push({functionCall:f})}return x({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:{parts:o,role:t.content.role},actions:t.actions,longRunningToolIds:Array.from(r)})}async function Ya(n,e,t){return ie.startActiveSpan(`execute_tool ${n.name}`,async o=>{try{m.debug(`callToolAsync ${n.name}`);let r=await n.runAsync({args:e,toolContext:t});return Or({tool:n,args:e,functionResponseEvent:Ja(n,r,t,t.invocationContext)}),r}finally{o.end()}})}function Ja(n,e,t,o){let r;typeof e!="object"||e==null?r={result:e}:r=e;let s={role:"user",parts:[{functionResponse:{name:n.name,response:r,id:t.functionCallId}}]};return x({invocationId:o.invocationId,author:o.agent.name,content:s,actions:t.actions,branch:o.branch})}async function ui({invocationContext:n,functionCallEvent:e,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){let a=P(e);return await Xt({invocationContext:n,functionCalls:a,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s})}async function Xt({invocationContext:n,functionCalls:e,toolsDict:t,beforeToolCallbacks:o,afterToolCallbacks:r,filters:i,toolConfirmationDict:s}){var u;let a=[],c=e.filter(f=>!i||f.id&&i.has(f.id));for(let f of c){let d;s&&f.id&&(d=s[f.id]);let{tool:p,toolContext:g}=Xa({invocationContext:n,functionCall:f,toolsDict:t,toolConfirmation:d});m.debug(`execute_tool ${p.name}`);let C=(u=f.args)!=null?u:{},h=null,A;if(h=await n.pluginManager.runBeforeToolCallback({tool:p,toolArgs:C,toolContext:g}),h==null){for(let H of o)if(h=await H({tool:p,args:C,context:g}),h)break}if(h==null)try{h=await Ya(p,C,g)}catch(H){if(H instanceof Error){let lt=await n.pluginManager.runOnToolErrorCallback({tool:p,toolArgs:C,toolContext:g,error:H});lt?h=lt:A=H.message}else A=H}let j=await n.pluginManager.runAfterToolCallback({tool:p,toolArgs:C,toolContext:g,result:h});if(j==null){for(let H of r)if(j=await H({tool:p,args:C,context:g,response:h}),j)break}if(j!=null&&(h=j),p.isLongRunning&&!h)continue;A?h={error:A}:(typeof h!="object"||h==null)&&(h={result:h});let w=x({invocationId:n.invocationId,author:n.agent.name,content:Ha({functionResponse:{id:g.functionCallId,name:p.name,response:h}}),actions:g.actions,branch:n.branch});m.debug("traceToolCall",{tool:p.name,args:C,functionResponseEvent:w.id}),a.push(w)}if(!a.length)return null;let l=Qa(a);return a.length>1&&ie.startActiveSpan("execute_tool (merged)",f=>{try{m.debug("execute_tool (merged)"),m.debug("traceMergedToolCalls",{responseEventId:l.id,functionResponseEvent:l.id}),Mr({responseEventId:l.id,functionResponseEvent:l})}finally{f.end()}}),l}function Xa({invocationContext:n,functionCall:e,toolsDict:t,toolConfirmation:o}){if(!e.name||!(e.name in t))throw new Error(`Function ${e.name} is not found in the toolsDict.`);let r=new N({invocationContext:n,functionCallId:e.id||void 0,toolConfirmation:o});return{tool:t[e.name],toolContext:r}}function Qa(n){if(!n.length)throw new Error("No function response events provided.");if(n.length===1)return n[0];let e=[];for(let i of n)i.content&&i.content.parts&&e.push(...i.content.parts);let t=n[0],o=n.map(i=>i.actions||{}),r=Rr(o);return x({invocationId:t.invocationId,author:t.author,branch:t.branch,content:{role:"user",parts:e},actions:r,timestamp:t.timestamp})}var di=(e=>(e.PROGRESSIVE_SSE_STREAMING="PROGRESSIVE_SSE_STREAMING",e))(di||{}),Za=(o=>(o.WIP="wip",o.EXPERIMENTAL="experimental",o.STABLE="stable",o))(Za||{}),pi={PROGRESSIVE_SSE_STREAMING:{stage:"experimental",defaultOn:!1}},fi=new Set,pe={};function eo(n){return pi[n]}function Jd(n,e){pi[n]=e}function Xd(n,e){if(!eo(n))throw new Error(`Feature ${n} is not registered.`);e===void 0?delete pe[n]:pe[n]=e}function mi(n){let e=eo(n);if(!e)throw new Error(`Feature ${n} is not registered.`);if(n in pe){let r=pe[n];return r&&e.stage!=="stable"&&Zn(n,e.stage),r}let t=`ADK_ENABLE_${n}`,o=`ADK_DISABLE_${n}`;return ke(t)?(e.stage!=="stable"&&Zn(n,e.stage),!0):ke(o)?!1:(e.stage!=="stable"&&e.defaultOn&&Zn(n,e.stage),e.defaultOn)}function Zn(n,e){fi.has(n)||(fi.add(n),m.warn(`[${e.toUpperCase()}] feature ${n} is enabled.`))}async function Qd(n,e,t){if(!eo(n))throw new Error(`Feature ${n} is not registered.`);let r=n in pe,i=pe[n];pe[n]=e;try{return await t()}finally{r?pe[n]=i:delete pe[n]}}function Qt(n){var t;let e=n.usageMetadata;if(n.candidates&&n.candidates.length>0){let o=n.candidates[0];return(t=o.content)!=null&&t.parts&&o.content.parts.length>0?{content:o.content,groundingMetadata:o.groundingMetadata,citationMetadata:o.citationMetadata,usageMetadata:e,finishReason:o.finishReason}:{errorCode:o.finishReason,errorMessage:o.finishMessage,usageMetadata:e,citationMetadata:o.citationMetadata,finishReason:o.finishReason}}return n.promptFeedback?{errorCode:n.promptFeedback.blockReason,errorMessage:n.promptFeedback.blockReasonMessage,usageMetadata:e}:{errorCode:"UNKNOWN_ERROR",errorMessage:"Unknown error.",usageMetadata:e}}var en=class{constructor(e=mi("PROGRESSIVE_SSE_STREAMING")){this.isProgressiveMode=e;this.text="";this.thoughtText="";this.partsSequence=[];this.currentTextBuffer="";this.currentFcArgs={}}flushTextBufferToSequence(){this.currentTextBuffer&&(this.currentTextIsThought?this.partsSequence.push({text:this.currentTextBuffer,thought:!0}):this.partsSequence.push({text:this.currentTextBuffer}),this.currentTextBuffer="",this.currentTextIsThought=void 0)}getValueFromPartialArg(e,t){let o=null,r=!1,i=e.stringValue,s=e.numberValue,a=e.boolValue,c=e.nullValue;if(i!==void 0){let l=i;r=!0;let u=gi.toPathArray(t).filter(d=>d!=="$"&&d!=="$["),f=this.currentFcArgs;for(let d of u)if(f&&typeof f=="object"&&d in f)f=f[d];else{f=void 0;break}typeof f=="string"?o=f+l:o=l}else s!==void 0?(o=s,r=!0):a!==void 0?(o=a,r=!0):c!==void 0&&(o=null,r=!0);return[o,r]}setValueByJsonPath(e,t){let o=gi.toPathArray(e).filter(i=>i!=="$"&&i!=="$["),r=this.currentFcArgs;for(let i=0;i<o.length-1;i++){let s=o[i];s in r||(r[s]={}),r=r[s]}o.length>0&&(r[o[o.length-1]]=t)}flushFunctionCallToSequence(){var e;if(this.currentFcName){let t={functionCall:{name:this.currentFcName,args:JSON.parse(JSON.stringify(this.currentFcArgs)),id:(e=this.currentFcId)!=null?e:_e()}};this.currentThoughtSignature&&(t.thoughtSignature=this.currentThoughtSignature.toString()),this.partsSequence.push(t),this.currentFcName=void 0,this.currentFcArgs={},this.currentFcId=void 0,this.currentThoughtSignature=void 0}}processStreamingFunctionCall(e){e.name&&(this.currentFcName=e.name),e.id&&(this.currentFcId=e.id);for(let t of e.partialArgs||[]){let o=t.jsonPath;if(!o)continue;let[r,i]=this.getValueFromPartialArg(t,o);i&&this.setValueByJsonPath(o,r)}e.willContinue||(this.flushTextBufferToSequence(),this.flushFunctionCallToSequence())}processFunctionCallPart(e){let t=e.functionCall;t&&(e.thoughtSignature?this.lastThoughtSignature=e.thoughtSignature:this.lastThoughtSignature&&(e.thoughtSignature=this.lastThoughtSignature.toString()),t.partialArgs||t.willContinue?(!t.id&&!this.currentFcId&&(t.id=_e()),e.thoughtSignature&&!this.currentThoughtSignature&&(this.currentThoughtSignature=e.thoughtSignature),this.processStreamingFunctionCall(t)):t.name&&(t.id||(t.id=_e()),this.flushTextBufferToSequence(),this.partsSequence.push(e)))}async*processResponse(e){var o,r,i;this.response=e;let t=Qt(e);if(this.usageMetadata=t.usageMetadata,t.groundingMetadata&&(this.groundingMetadata=t.groundingMetadata),t.citationMetadata&&(this.citationMetadata=t.citationMetadata),t.finishReason&&(this.finishReason=t.finishReason),t.content&&t.content.parts)for(let s of t.content.parts)s.thoughtSignature?this.lastThoughtSignature=s.thoughtSignature:s.functionCall&&this.lastThoughtSignature&&(s.thoughtSignature=this.lastThoughtSignature.toString());if(this.isProgressiveMode){if(t.content&&t.content.parts)for(let s of t.content.parts)if(s.text){let a=(o=s.thought)!=null?o:!1;this.currentTextBuffer&&a!==this.currentTextIsThought&&this.flushTextBufferToSequence(),this.currentTextBuffer||(this.currentTextIsThought=a),this.currentTextBuffer+=s.text}else s.functionCall?this.processFunctionCallPart(s):(this.flushTextBufferToSequence(),this.partsSequence.push(s));t.partial=!0,yield t;return}if(t.content&&t.content.parts&&typeof((r=t.content.parts[0])==null?void 0:r.text)=="string"){let s=t.content.parts[0],a=s.text||"";s.thought?this.thoughtText+=a:this.text+=a,t.partial=!0}else if((this.thoughtText||this.text)&&(!t.content||!t.content.parts||!((i=t.content.parts[0])!=null&&i.inlineData))){let s=[];this.thoughtText&&s.push({text:this.thoughtText,thought:!0}),this.text&&s.push({text:this.text}),yield{content:{role:"model",parts:s},usageMetadata:t.usageMetadata,partial:!1},this.thoughtText="",this.text=""}yield t}close(){var e,t;if(!(!((e=this.response)!=null&&e.candidates)||this.response.candidates.length===0)){if(this.isProgressiveMode){this.flushTextBufferToSequence(),this.flushFunctionCallToSequence();let o=this.partsSequence;if(o.length===0)return;let r=this.response.candidates[0],i=(t=this.finishReason)!=null?t:r.finishReason;return{content:{role:"model",parts:o},groundingMetadata:this.groundingMetadata,citationMetadata:this.citationMetadata,errorCode:i===Zt.STOP?void 0:i,errorMessage:i===Zt.STOP?void 0:r.finishMessage,usageMetadata:this.usageMetadata,finishReason:i,partial:!1}}if((this.text||this.thoughtText)&&this.response.candidates&&this.response.candidates.length>0){let o=[];this.thoughtText&&o.push({text:this.thoughtText,thought:!0}),this.text&&o.push({text:this.text});let r=this.response.candidates[0],i=r.finishReason;return{content:{role:"model",parts:o},groundingMetadata:this.groundingMetadata,citationMetadata:this.citationMetadata,errorCode:i===Zt.STOP?void 0:i,errorMessage:i===Zt.STOP?void 0:r.finishMessage,usageMetadata:this.usageMetadata,finishReason:i,partial:!1}}}}};var tn=class{constructor(e){this.geminiSession=e}async sendHistory(e){let t=e.filter(o=>{var r;return o.parts&&((r=o.parts[0])==null?void 0:r.text)});t.length>0?this.geminiSession.sendClientContent({turns:t,turnComplete:t[t.length-1].role==="user"}):m.info("no content is sent")}async sendContent(e){if(!e.parts)throw new Error("Content must have parts.");if(e.parts[0].functionResponse){let t=e.parts.map(o=>o.functionResponse).filter(o=>!!o);m.debug("Sending LLM function response:",t),this.geminiSession.sendToolResponse({functionResponses:t})}else m.debug("Sending LLM new content",e),this.geminiSession.sendClientContent({turns:[e],turnComplete:!0})}async sendRealtime(e){m.debug("Sending LLM Blob:",e),this.geminiSession.sendRealtimeInput({media:e})}buildFullTextResponse(e){return{content:{role:"model",parts:[{text:e}]}}}async*receive(){throw new Error("Not Implemented.")}async close(){this.geminiSession.close()}};var xe=class extends ye{constructor({model:e,apiKey:t,vertexai:o,project:r,location:i,headers:s}){e||(e="gemini-2.5-flash"),super({model:e});let a=nn({model:e,vertexai:o,project:r,location:i,apiKey:t});if(!a.vertexai&&!a.apiKey)throw new Error("API key must be provided via constructor or GOOGLE_GENAI_API_KEY or GEMINI_API_KEY environment variable.");this.project=a.project,this.location=a.location,this.apiKey=a.apiKey,this.headers=s,this.vertexai=!!a.vertexai}async*generateContentAsync(e,t=!1,o){var r,i,s;if(this.preprocessRequest(e),this.maybeAppendUserContent(e),m.info(`Sending out request, model: ${(r=e.model)!=null?r:this.model}, backend: ${this.apiBackend}, stream: ${t}`),e.config||(e.config={}),e.config.httpOptions&&(e.config.httpOptions.headers={...e.config.httpOptions.headers,...this.trackingHeaders}),o&&(e.config.abortSignal=o),t){let a=await this.apiClient.models.generateContentStream({model:(i=e.model)!=null?i:this.model,contents:e.contents,config:e.config}),c=new en;for await(let u of a)for await(let f of c.processResponse(u))yield f;let l=c.close();l&&(yield l)}else{let a=await this.apiClient.models.generateContent({model:(s=e.model)!=null?s:this.model,contents:e.contents,config:e.config});yield Qt(a)}}getHttpOptions(){return{headers:{...this.trackingHeaders,...this.headers}}}get apiClient(){return this._apiClient?this._apiClient:(this.vertexai?this._apiClient=new to({vertexai:this.vertexai,project:this.project,location:this.location,httpOptions:this.getHttpOptions()}):this._apiClient=new to({apiKey:this.apiKey,httpOptions:this.getHttpOptions()}),this._apiClient)}get apiBackend(){return this._apiBackend||(this._apiBackend=this.apiClient.vertexai?"VERTEX_AI":"GEMINI_API"),this._apiBackend}get liveApiVersion(){return this._liveApiVersion||(this._liveApiVersion=this.apiBackend==="VERTEX_AI"?"v1beta1":"v1alpha"),this._liveApiVersion}getLiveHttpOptions(){return{headers:this.trackingHeaders,apiVersion:this.liveApiVersion}}get liveApiClient(){return this._liveApiClient||(this._liveApiClient=new to({apiKey:this.apiKey,httpOptions:this.getLiveHttpOptions()})),this._liveApiClient}async connect(e){var o,r,i,s;(o=e.liveConnectConfig)!=null&&o.httpOptions&&(e.liveConnectConfig.httpOptions.headers||(e.liveConnectConfig.httpOptions.headers={}),Object.assign(e.liveConnectConfig.httpOptions.headers,this.trackingHeaders),e.liveConnectConfig.httpOptions.apiVersion=this.liveApiVersion),(r=e.config)!=null&&r.systemInstruction&&(e.liveConnectConfig.systemInstruction={role:"system",parts:[ec(e.config.systemInstruction)]}),e.liveConnectConfig.tools=(i=e.config)==null?void 0:i.tools;let t=await this.liveApiClient.live.connect({model:(s=e.model)!=null?s:this.model,config:e.liveConnectConfig,callbacks:{onmessage:()=>{}}});return new tn(t)}preprocessRequest(e){if(this.apiBackend==="GEMINI_API"&&(e.config&&(e.config.labels=void 0),e.contents)){for(let t of e.contents)if(t.parts)for(let o of t.parts)hi(o.inlineData),hi(o.fileData)}}};xe.supportedModels=[/gemini-.*/,/projects\/.+\/locations\/.+\/endpoints\/.+/,/projects\/.+\/locations\/.+\/publishers\/google\/models\/gemini.+/];function hi(n){n&&n.displayName&&(n.displayName=void 0)}function nn({model:n,vertexai:e,project:t,location:o,apiKey:r}){let i={model:n,vertexai:e,project:t,location:o,apiKey:r};if(i.vertexai=!!e,!i.vertexai&&!Z()&&(i.vertexai=ke("GOOGLE_GENAI_USE_VERTEXAI")),i.vertexai){if(!Z()&&!i.project&&(i.project=process.env.GOOGLE_CLOUD_PROJECT),!Z()&&!i.location&&(i.location=process.env.GOOGLE_CLOUD_LOCATION),!i.project)throw new Error("VertexAI project must be provided via constructor or GOOGLE_CLOUD_PROJECT environment variable.");if(!i.location)throw new Error("VertexAI location must be provided via constructor or GOOGLE_CLOUD_LOCATION environment variable.")}else!i.apiKey&&!Z()&&(i.apiKey=process.env.GOOGLE_GENAI_API_KEY||process.env.GEMINI_API_KEY);return i}var Ci="APIGEE_PROXY_URL",Je=class extends xe{constructor({model:e,proxyUrl:t,apiKey:o,vertexai:r,location:i,project:s,headers:a}){var c;if(!Ai(e))throw new Error(`Model ${e} is not a valid Apigee model, expected apigee/[<provider>/][<version>/]<model_id>`);if(super({...tc({model:e,vertexai:r,project:s,location:i,apiKey:o}),headers:a}),this.proxyUrl=t!=null?t:"",!Z()&&!this.proxyUrl&&(this.proxyUrl=(c=process.env[Ci])!=null?c:""),!this.proxyUrl)throw new Error(`Proxy URL must be provided via the constructor or ${Ci} environment variable.`)}getHttpOptions(){let e=super.getHttpOptions();return e.baseUrl=this.proxyUrl,e}getLiveHttpOptions(){let e=super.getLiveHttpOptions();return e.baseUrl=this.proxyUrl,e}identifyApiVersion(){let t=(this.model.startsWith("apigee/")?this.model.substring(7):this.model).split("/");return t.length===3?t[1]:t.length===2&&t[0]!="vertex_ai"&&t[0]!="gemini"&&t[0].startsWith("v")?t[0]:this.vertexai?"v1beta1":"v1alpha"}get liveApiVersion(){return this._apigeeLiveApiVersion||(this._apigeeLiveApiVersion=this.identifyApiVersion()),this._apigeeLiveApiVersion}async*generateContentAsync(e,t=!1,o){var i;let r=(i=e.model)!=null?i:this.model;e.model=vi(r),yield*super.generateContentAsync(e,t,o)}async connect(e){var o;let t=(o=e.model)!=null?o:this.model;return e.model=vi(t),super.connect(e)}};Je.supportedModels=[/apigee\/.*/];function tc({model:n,vertexai:e,project:t,location:o,apiKey:r}){var s;let i=nn({model:n,vertexai:e,project:t,location:o,apiKey:r});return i.vertexai=i.vertexai||((s=i.model)==null?void 0:s.startsWith("apigee/vertex_ai/")),i.vertexai||i.apiKey||(m.warn('No API key provided when using a Gemini model, using a fake key "-".'),i.apiKey="-"),i}function vi(n){if(!Ai(n))throw new Error(`Model ${n} is not a valid Apigee model, expected apigee/[<provider>/][<version>/]<model_id>`);let e=n.split("/");return e[e.length-1]}function Ai(n){let e=["vertex_ai","gemini"];if(!n.startsWith("apigee/"))return!1;let t=n.substring(7);if(t.length===0)return!1;let o=t.split("/",-1);return o[o.length-1].length===0?!1:o.length==1?!0:o.length==2?e.includes(o[0])?!0:o[0].startsWith("v"):o.length==3&&e.includes(o[0])?o[1].startsWith("v"):!1}var no=class{constructor(e){this.maxSize=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.size>=this.maxSize&&!this.cache.has(e)){let o=this.cache.keys().next().value;o!==void 0&&this.cache.delete(o)}this.cache.set(e,t)}},J=class J{static newLlm(e){return new(J.resolve(e))({model:e})}static _register(e,t){J.llmRegistryDict.has(e)&&m.info(`Updating LLM class for ${e} from ${J.llmRegistryDict.get(e)} to ${t}`),J.llmRegistryDict.set(e,t)}static register(e){for(let t of e.supportedModels)J._register(t,e)}static resolve(e){let t=J.resolveCache.get(e);if(t)return t;for(let[o,r]of J.llmRegistryDict.entries())if(new RegExp(`^${o instanceof RegExp?o.source:o}$`,o instanceof RegExp?o.flags:void 0).test(e))return J.resolveCache.set(e,r),r;throw new Error(`Model ${e} not found.`)}};J.llmRegistryDict=new Map,J.resolveCache=new no(32);var Le=J;Le.register(xe);Le.register(Je);var oo=Symbol.for("google.adk.baseTool");function Tt(n){return typeof n=="object"&&n!==null&&oo in n&&n[oo]===!0}var Ei;Ei=oo;var R=class{constructor(e){this[Ei]=!0;var t;this.name=e.name,this.description=e.description,this.isLongRunning=(t=e.isLongRunning)!=null?t:!1}_getDeclaration(){}async processLlmRequest({llmRequest:e}){let t=this._getDeclaration();if(!t)return;if(this.name in e.toolsDict)throw new Error(`Duplicate tool name: ${this.name}`);e.toolsDict[this.name]=this;let o=nc(e);o?(o.functionDeclarations||(o.functionDeclarations=[]),o.functionDeclarations.push(t)):(e.config=e.config||{},e.config.tools=e.config.tools||[],e.config.tools.push({functionDeclarations:[t]}))}get apiVariant(){return ii()}};function nc(n){var e;return(((e=n.config)==null?void 0:e.tools)||[]).find(t=>"functionDeclarations"in t)}import{Type as yi}from"@google/genai";import{zodToJsonSchema as oc}from"zod-to-json-schema";import{toJSONSchema as rc}from"zod/v4";function ro(n){return n!==null&&typeof n=="object"&&"parse"in n&&typeof n.parse=="function"&&"safeParse"in n&&typeof n.safeParse=="function"}function ic(n){return ro(n)&&!("_zod"in n)}function sc(n){return ro(n)&&"_zod"in n}function ac(n){var o,r;let e=n;if((o=e._def)!=null&&o.typeName)return e._def.typeName;let t=(r=e._def)==null?void 0:r.type;if(typeof t=="string"&&t)return"Zod"+t.charAt(0).toUpperCase()+t.slice(1)}function Oe(n){return ro(n)&&ac(n)==="ZodObject"}function Xe(n){if(!Oe(n))throw new Error("Expected a Zod Object");if(sc(n))return rc(n,{target:"openapi-3.0",io:"input",override:e=>{var o;let{jsonSchema:t}=e;t.additionalProperties!==void 0&&delete t.additionalProperties,t.readOnly!==void 0&&delete t.readOnly,t.maxItems!==void 0&&(t.maxItems=t.maxItems.toString()),(t.format==="email"||t.format==="uuid")&&delete t.pattern,t.minItems!==void 0&&(t.minItems=t.minItems.toString()),t.minLength!==void 0&&(t.minLength=t.minLength.toString()),t.maxLength!==void 0&&(t.maxLength=t.maxLength.toString()),((o=t.enum)==null?void 0:o.length)===1&&t.enum[0]===null&&(t.type=yi.NULL,delete t.enum),t.type!==void 0&&(t.type=t.type.toUpperCase())}});if(ic(n))return oc(n,{target:"openApi3",emailStrategy:"format:email",postProcess:e=>{var t,o,r,i,s,a,c;if(e)return e.additionalProperties!==void 0&&delete e.additionalProperties,e.maxItems!==void 0&&(e.maxItems=(t=e.maxItems)==null?void 0:t.toString()),e.minItems!==void 0&&(e.minItems=(o=e.minItems)==null?void 0:o.toString()),e.minLength!==void 0&&(e.minLength=(r=e.minLength)==null?void 0:r.toString()),e.maxLength!==void 0&&(e.maxLength=(i=e.maxLength)==null?void 0:i.toString()),((s=e.enum)==null?void 0:s.length)===1&&e.enum[0]==="null"&&(e.type=yi.NULL,delete e.enum),e.type==="integer"&&e.format!=="int64"&&((a=e.minimum)!=null||(e.minimum=Number.MIN_SAFE_INTEGER),(c=e.maximum)!=null||(e.maximum=Number.MAX_SAFE_INTEGER)),e.type!==void 0&&(e.type=e.type.toUpperCase()),e}});throw new Error("Unsupported Zod schema version.")}import{z as Ri}from"zod";function q(n,e){n.config||(n.config={});let t=e.join(`
|
|
8
9
|
|
|
9
10
|
`);n.config.systemInstruction?n.config.systemInstruction+=`
|
|
10
11
|
|
|
11
|
-
`+t:n.config.systemInstruction=t}function
|
|
12
|
+
`+t:n.config.systemInstruction=t}function xi(n,e){n.config||(n.config={}),n.config.responseSchema=e,n.config.responseMimeType="application/json"}import{Type as cc}from"@google/genai";function lc(n){return n===void 0?{type:cc.OBJECT,properties:{}}:Oe(n)?Xe(n):n}var io=Symbol.for("google.adk.functionTool");function uc(n){return typeof n=="object"&&n!==null&&io in n&&n[io]===!0}var Ti,Si,me=class extends(Si=R,Ti=io,Si){constructor(t){var r;let o=(r=t.name)!=null?r:t.execute.name;if(!o)throw new Error("Tool name cannot be empty. Either name the `execute` function or provide a `name`.");super({name:o,description:t.description,isLongRunning:t.isLongRunning});this[Ti]=!0;this.execute=t.execute,this.parameters=t.parameters}_getDeclaration(){return{name:this.name,description:this.description,parameters:lc(this.parameters)}}async runAsync(t){try{let o=t.args;return Oe(this.parameters)&&(o=this.parameters.parse(t.args)),await this.execute(o,t.toolContext)}catch(o){let r=o instanceof Error?o.message:String(o);throw new Error(`Error in tool '${this.name}': ${r}`)}}};var F=class{},so=class{};var on=class extends F{constructor(){super(...arguments);this.toolName="transfer_to_agent";this.tool=new me({name:this.toolName,description:"Transfer the question to another agent. This tool hands off control to another agent when it is more suitable to answer the user question according to the agent description.",parameters:Ri.object({agentName:Ri.string().describe("the agent name to transfer to.")}),execute:function(t,o){if(!o)throw new Error("toolContext is required.");return o.actions.transferToAgent=t.agentName,"Transfer queued"}})}async*runAsync(t,o){if(!y(t.agent))return;let r=this.getTransferTargets(t.agent);if(!r.length)return;q(o,[this.buildTargetAgentsInstructions(t.agent,r)]);let i=new N({invocationContext:t});await this.tool.processLlmRequest({toolContext:i,llmRequest:o})}buildTargetAgentsInfo(t){return`
|
|
12
13
|
Agent name: ${t.name}
|
|
13
14
|
Agent description: ${t.description}
|
|
14
15
|
`}buildTargetAgentsInstructions(t,o){let r=`
|
|
@@ -28,13 +29,13 @@ the function call.
|
|
|
28
29
|
Your parent agent is ${t.parentAgent.name}. If neither the other agents nor
|
|
29
30
|
you are best for answering the question according to the descriptions, transfer
|
|
30
31
|
to your parent agent.
|
|
31
|
-
`),r}getTransferTargets(t){let o=[];return o.push(...t.subAgents),!t.parentAgent||!
|
|
32
|
-
`),i=e.map(f=>f[0]).join("|"),s=e.map(f=>f[1]).join("|"),a=new RegExp(`?<prefix>.*?)(${i})(?<codeStr>.*?)(${s})(?<suffix>.*?)$`,"s").exec(r),{prefix:c,codeStr:l}=(a==null?void 0:a.groups)||{};return l?(n.parts=[],c&&(o.text=c,n.parts.push(o)),n.parts.push(
|
|
32
|
+
`),r}getTransferTargets(t){let o=[];return o.push(...t.subAgents),!t.parentAgent||!y(t.parentAgent)||(t.disallowTransferToParent||o.push(t.parentAgent),t.disallowTransferToPeers||o.push(...t.parentAgent.subAgents.filter(r=>r.name!==t.name))),o}},wi=new on;var ao=class extends F{async*runAsync(e,t){var r;let o=e.agent;y(o)&&(t.model=o.canonicalModel.model,t.config={...(r=o.generateContentConfig)!=null?r:{}},o.outputSchema&&xi(t,o.outputSchema),e.runConfig&&(t.liveConnectConfig.responseModalities=e.runConfig.responseModalities,t.liveConnectConfig.speechConfig=e.runConfig.speechConfig,t.liveConnectConfig.outputAudioTranscription=e.runConfig.outputAudioTranscription,t.liveConnectConfig.inputAudioTranscription=e.runConfig.inputAudioTranscription,t.liveConnectConfig.realtimeInputConfig=e.runConfig.realtimeInputConfig,t.liveConnectConfig.enableAffectiveDialog=e.runConfig.enableAffectiveDialog,t.liveConnectConfig.proactivity=e.runConfig.proactivity))}},Ii=new ao;import{cloneDeep as Bi}from"lodash-es";var co=Symbol.for("google.adk.baseCodeExecutor");function rn(n){return typeof n=="object"&&n!==null&&co in n&&n[co]===!0}var bi;bi=co;var Me=class{constructor(){this[bi]=!0;this.optimizeDataFile=!1;this.stateful=!1;this.errorRetryAttempts=2;this.codeBlockDelimiters=[["```tool_code\n","\n```"],["```python\n","\n```"],["```javascript\n","\n```"],["```typescript\n","\n```"],["```bash\n","\n```"],["```sh\n","\n```"]];this.executionResultDelimiters=["```tool_output\n","\n```"]}};var fc="^projects/[^/]+/locations/[^/]+/publishers/[^/]+/models/(.+)$";function lo(n){let e=n.match(fc);return e?e[1]:n}function ki(n){return lo(n).startsWith("gemini-")}function dc(n){if(!/^\d+(\.\d+)*$/.test(n))return{valid:!1,major:0,minor:0,patch:0};let e=n.split(".").map(t=>parseInt(t,10));return{valid:!0,major:e[0],minor:e.length>1?e[1]:0,patch:e.length>2?e[2]:0}}function Pi(n){return lo(n).startsWith("gemini-1")}function St(n){if(!n)return!1;let e=lo(n);if(!e.startsWith("gemini-"))return!1;let t=e.slice(7).split("-",1)[0],o=dc(t);return o.valid&&o.major>=2}var uo=Symbol.for("google.adk.builtInCodeExecutor");function wt(n){return typeof n=="object"&&n!==null&&uo in n&&n[uo]===!0}var _i,Li,Rt=class extends(Li=Me,_i=uo,Li){constructor(){super(...arguments);this[_i]=!0}executeCode(t){return Promise.resolve({stdout:"",stderr:"",outputFiles:[]})}processLlmRequest(t){if(t.model&&St(t.model)){t.config=t.config||{},t.config.tools=t.config.tools||[],t.config.tools.push({codeExecution:{}});return}throw new Error(`Gemini code execution tool is not supported for model ${t.model}`)}};import{Language as pc,Outcome as Oi}from"@google/genai";import{cloneDeep as mc}from"lodash-es";var fo=(t=>(t.UTF8="utf-8",t.BASE64="base64",t))(fo||{}),Te=(a=>(a.UNSPECIFIED="unspecified",a.PYTHON="python",a.JAVASCRIPT="javascript",a.TYPESCRIPT="typescript",a.SHELL="shell",a.POWERSHELL="powershell",a.WINDOWS_CMD="cmd",a))(Te||{});function Mi(n,e){var u;if(!((u=n.parts)!=null&&u.length))return"";for(let f=0;f<n.parts.length;f++){let d=n.parts[f];if(d.executableCode&&(f===n.parts.length-1||!n.parts[f+1].codeExecutionResult))return n.parts=n.parts.slice(0,f+1),d.executableCode.code}let t=n.parts.filter(f=>f.text);if(!t.length)return"";let o=mc(t[0]),r=t.map(f=>f.text).join(`
|
|
33
|
+
`),i=e.map(f=>f[0]).join("|"),s=e.map(f=>f[1]).join("|"),a=new RegExp(`?<prefix>.*?)(${i})(?<codeStr>.*?)(${s})(?<suffix>.*?)$`,"s").exec(r),{prefix:c,codeStr:l}=(a==null?void 0:a.groups)||{};return l?(n.parts=[],c&&(o.text=c,n.parts.push(o)),n.parts.push(po(l)),l):""}function po(n){return{text:n,executableCode:{code:n,language:pc.PYTHON}}}function Ni(n){if(n.stderr)return{text:n.stderr,codeExecutionResult:{outcome:Oi.OUTCOME_FAILED}};let e=[];return(n.stdout||!n.outputFiles)&&e.push(`Code execution result:
|
|
33
34
|
${n.stdout}
|
|
34
35
|
`),n.outputFiles&&e.push(`Saved artifacts:
|
|
35
36
|
`+n.outputFiles.map(t=>t.name).join(", ")),{text:e.join(`
|
|
36
37
|
|
|
37
|
-
`),codeExecutionResult:{outcome:
|
|
38
|
+
`),codeExecutionResult:{outcome:Oi.OUTCOME_OK}}}function Fi(n,e,t){var r;if(!((r=n.parts)!=null&&r.length))return;let o=n.parts[n.parts.length-1];o.executableCode?n.parts[n.parts.length-1]={text:e[0]+o.executableCode.code+e[1]}:n.parts.length==1&&o.codeExecutionResult&&(n.parts[n.parts.length-1]={text:t[0]+o.codeExecutionResult.output+t[1]},n.role="user")}import{cloneDeep as gc}from"lodash-es";var mo="_code_execution_context",go="execution_session_id",Ne="processed_input_files",Fe="_code_executor_input_files",Be="_code_executor_error_counts",ho="_code_execution_results",It=class{constructor(e){this.sessionState=e;var t;this.context=(t=e.get(mo))!=null?t:{},this.sessionState=e}getStateDelta(){return{[mo]:gc(this.context)}}getExecutionId(){if(go in this.context)return this.context[go]}setExecutionId(e){this.context[go]=e}getProcessedFileNames(){return Ne in this.context?this.context[Ne]:[]}addProcessedFileNames(e){Ne in this.context||(this.context[Ne]=[]),this.context[Ne].push(...e)}getInputFiles(){return Fe in this.sessionState?this.sessionState.get(Fe):[]}addInputFiles(e){Fe in this.sessionState||this.sessionState.set(Fe,[]),this.sessionState.get(Fe).push(...e)}clearInputFiles(){Fe in this.sessionState&&this.sessionState.set(Fe,[]),Ne in this.context&&(this.context[Ne]=[])}getErrorCount(e){return Be in this.sessionState&&this.sessionState.get(Be)[e]||0}incrementErrorCount(e){Be in this.sessionState||this.sessionState.set(Be,{}),this.sessionState.get(Be)[e]=this.getErrorCount(e)+1}resetErrorCount(e){if(!(Be in this.sessionState))return;let t=this.sessionState.get(Be);e in t&&delete t[e]}updateCodeExecutionResult({invocationId:e,code:t,resultStdout:o,resultStderr:r}){ho in this.sessionState||this.sessionState.set(ho,{});let i=this.sessionState.get(ho);e in i||(i[e]=[]),i[e].push({code:t,resultStdout:o,resultStderr:r,timestamp:Date.now()})}getCodeExecutionContext(){return this.sessionState.get(mo)||{}}};var Co=class extends F{async*runAsync(e,t){if(y(e.agent)&&e.agent.codeExecutor){for await(let o of Cc(e,t))yield o;if(rn(e.agent.codeExecutor))for(let o of t.contents){let r=e.agent.codeExecutor.codeBlockDelimiters.length?e.agent.codeExecutor.codeBlockDelimiters[0]:["",""];Fi(o,r,e.agent.codeExecutor.executionResultDelimiters)}}}},sn={"text/csv":{extension:".csv",loaderCodeTemplate:"pd.read_csv('{filename}')"}},hc=`
|
|
38
39
|
import pandas as pd
|
|
39
40
|
|
|
40
41
|
def explore_df(df: pd.DataFrame) -> None:
|
|
@@ -71,46 +72,58 @@ def explore_df(df: pd.DataFrame) -> None:
|
|
|
71
72
|
Total columns: {df.shape[1]}
|
|
72
73
|
|
|
73
74
|
{df_info}""")
|
|
74
|
-
`,
|
|
75
|
+
`,vo=class{async*runAsync(e,t){if(!t.partial)for await(let o of vc(e,t))yield o}},Zm=new vo;async function*Cc(n,e){let t=n.agent;if(!y(t))return;let o=t.codeExecutor;if(!o||!rn(o))return;if(wt(o)){o.processLlmRequest(e);return}if(!o.optimizeDataFile)return;let r=new It(new T(n.session.state));if(r.getErrorCount(n.invocationId)>=o.errorRetryAttempts)return;let i=Ac(r,e),s=new Set(r.getProcessedFileNames()),a=i.filter(c=>!s.has(c.name));for(let c of a){let l=Ec(c);if(!l)return;let u={role:"model",parts:[{text:`Processing input file: \`${c.name}\``},po(l)]};e.contents.push(Bi(u)),yield x({invocationId:n.invocationId,author:t.name,branch:n.branch,content:u});let f=Di(n,r),d=await o.executeCode({invocationContext:n,codeExecutionInput:{code:l,language:"python",inputFiles:[c],executionId:f}});r.updateCodeExecutionResult({invocationId:n.invocationId,code:l,resultStdout:d.stdout,resultStderr:d.stderr}),r.addProcessedFileNames([c.name]);let p=await Ui(n,r,d);yield p,e.contents.push(Bi(p.content))}}async function*vc(n,e){let t=n.agent;if(!y(t))return;let o=t.codeExecutor;if(!o||!rn(o)||!e||!e.content||wt(o))return;let r=new It(new T(n.session.state));if(r.getErrorCount(n.invocationId)>=o.errorRetryAttempts)return;let i=e.content,s=Mi(i,o.codeBlockDelimiters);if(!s)return;yield x({invocationId:n.invocationId,author:t.name,branch:n.branch,content:i});let a=Di(n,r),c=await o.executeCode({invocationContext:n,codeExecutionInput:{code:s,language:"python",inputFiles:r.getInputFiles(),executionId:a}});r.updateCodeExecutionResult({invocationId:n.invocationId,code:s,resultStdout:c.stdout,resultStderr:c.stderr}),yield await Ui(n,r,c),e.content=void 0}function Ac(n,e){var r;let t=n.getInputFiles(),o=new Set(t.map(i=>i.name));for(let i=0;i<e.contents.length;i++){let s=e.contents[i];if(!(s.role!=="user"||!s.parts))for(let a=0;a<s.parts.length;a++){let c=s.parts[a],l=(r=c.inlineData)==null?void 0:r.mimeType;if(!l||!c.inlineData||!sn[l])continue;let u=`data_${i+1}_${a+1}${sn[l].extension}`;c.text=`
|
|
75
76
|
Available file: \`${u}\`
|
|
76
|
-
`;let f={name:u,content:
|
|
77
|
-
${
|
|
77
|
+
`;let f={name:u,content:Br(c.inlineData.data),mimeType:l};o.has(u)||(n.addInputFiles([f]),t.push(f))}}return t}function Di(n,e){var r;let t=n.agent;if(!y(t)||!((r=t.codeExecutor)!=null&&r.stateful))return;let o=e.getExecutionId();return o||(o=n.session.id,e.setExecutionId(o)),o}async function Ui(n,e,t){if(!n.artifactService)throw new Error("Artifact service is not initialized.");let o={role:"model",parts:[Ni(t)]},r=V({stateDelta:e.getStateDelta()});t.stderr?e.incrementErrorCount(n.invocationId):e.resetErrorCount(n.invocationId);for(let i of t.outputFiles){let s=await n.artifactService.saveArtifact({appName:n.appName||"",userId:n.userId||"",sessionId:n.session.id,filename:i.name,artifact:{inlineData:{data:i.content,mimeType:i.mimeType}}});r.artifactDelta[i.name]=s}return x({invocationId:n.invocationId,author:n.agent.name,branch:n.branch,content:o,actions:r})}function Ec(n){function e(r){let[i]=r.split("."),s=i.replace(/[^a-zA-Z0-9_]/g,"_");return/^\d/.test(s)&&(s="_"+s),s}if(!sn[n.mimeType])return;let t=e(n.name),o=sn[n.mimeType].loaderCodeTemplate.replace("{filename}",n.name);return`
|
|
78
|
+
${hc}
|
|
78
79
|
|
|
79
80
|
# Load the dataframe.
|
|
80
81
|
${t} = ${o}
|
|
81
82
|
|
|
82
83
|
# Use \`explore_df\` to guide my analysis.
|
|
83
84
|
explore_df(${t})
|
|
84
|
-
`}var
|
|
85
|
-
${n.compactedContent}`);return A({invocationId:n.invocationId,author:"user",content:e,branch:n.branch,timestamp:n.timestamp})}var bt=class{async*runAsync(e,t){let o=e.agent;if(!o||!T(o))return;let r=e.session.events,i=r.filter(H),s=i.length>0?i.reduce((a,c)=>c.endTime>a.endTime?c:a):void 0;if(s){let a=r.filter(c=>!(c===s||H(c)||c.timestamp<=s.endTime));r=[s,...a]}o.includeContents==="default"?t.contents=kn(r,o.name,e.branch):t.contents=Nr(r,o.name,e.branch)}},kt=new bt;var Pe=class{constructor(e){this.compactors=e}async*runAsync(e,t){for(let o of this.compactors)if(await Promise.resolve(o.shouldCompact(e))){let i=new Set(e.session.events);await Promise.resolve(o.compact(e));let s=e.session.events.filter(a=>!i.has(a));for(let a of s)yield a;return}}};var Pn=class extends D{async*runAsync(e,t){let o=e.agent,r=[`You are an agent. Your internal name is "${o.name}".`];o.description&&r.push(`The description about you is "${o.description}"`),q(t,r)}},Fr=new Pn;async function _n(n,e){let t=e.invocationContext;async function o(c){let l=c[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),u=l.endsWith("?");if(u&&(l=l.slice(0,-1)),l.startsWith("artifact.")){let f=l.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let d=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:f});if(!d)throw new Error(`Artifact ${f} not found.`);return String(d)}if(!ca(l))return c[0];if(l in t.session.state)return String(t.session.state[l]);if(u)return"";throw new Error(`Context variable not found: \`${l}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=n.matchAll(r);for(let c of a){i.push(n.slice(s,c.index));let l=await o(c);i.push(l),s=c.index+c[0].length}return i.push(n.slice(s)),i.join("")}var sa=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function Ur(n){return n===""||n===void 0?!1:sa.test(n)}var aa=[E.APP_PREFIX,E.USER_PREFIX,E.TEMP_PREFIX];function ca(n){let e=n.split(":");return e.length===0||e.length>2?!1:e.length===1?Ur(n):aa.includes(e[0]+":")?Ur(e[1]):!1}var Ln=class extends D{async*runAsync(e,t){let o=e.agent;if(!T(o))return;let r=o.rootAgent;if(T(r)&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new w(e)),a=i;s&&(a=await _n(i,new w(e))),q(t,[a])}if(o.instruction){let{instruction:i,requireStateInjection:s}=await o.canonicalInstruction(new w(e)),a=i;s&&(a=await _n(i,new w(e))),q(t,[a])}}},$r=new Ln;var On=class extends D{async*runAsync(e){let t=e.agent;if(!T(t))return;let o=e.session.events;if(!o||o.length===0)return;let r={},i=-1;for(let s=o.length-1;s>=0;s--){let a=o[s];if(a.author!=="user")continue;let c=V(a);if(!c)continue;let l=!1;for(let u of c){if(u.name!==ke)continue;l=!0;let f=null;u.response&&Object.keys(u.response).length===1&&"response"in u.response?f=JSON.parse(u.response.response):u.response&&(f=new me({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&f&&(r[u.id]=f)}if(l){i=s;break}}if(Object.keys(r).length!==0)for(let s=i-1;s>=0;s--){let a=o[s],c=I(a);if(!c)continue;let l={},u={};for(let m of c){if(!m.id||!(m.id in r))continue;let h=m.args;if(!h||!("originalFunctionCall"in h))continue;let C=h.originalFunctionCall;C.id&&(l[C.id]=r[m.id],u[C.id]=C)}if(Object.keys(l).length===0)continue;for(let m=o.length-1;m>i;m--){let h=o[m],C=V(h);if(C){for(let y of C)y.id&&y.id in l&&(delete l[y.id],delete u[y.id]);if(Object.keys(l).length===0)break}}if(Object.keys(l).length===0)continue;let f=await t.canonicalTools(new w(e)),d=Object.fromEntries(f.map(m=>[m.name,m])),p=await Rt({invocationContext:e,functionCalls:Object.values(u),toolsDict:d,beforeToolCallbacks:t.canonicalBeforeToolCallbacks,afterToolCallbacks:t.canonicalAfterToolCallbacks,filters:new Set(Object.keys(l)),toolConfirmationDict:l});p&&(yield p);return}}},Gr=new On;var Pt=(o=>(o.NONE="none",o.SSE="sse",o.BIDI="bidi",o))(Pt||{});function qr(n={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:la(n.maxLlmCalls||500),pauseOnToolCalls:!1,...n}}function la(n){if(n>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return n<=0&&g.warn("maxLlmCalls is less than or equal to 0. This will result in no enforcement on total number of llm calls that will be made for a run. This may not be ideal, as this could result in a never ending communication between the model and the agent in certain cases."),n}var Vr="adk_agent_name";async function jr(n,e){return Xe(n)?[n]:await n.getTools(e)}var Mn=Symbol.for("google.adk.llmAgent");function T(n){return typeof n=="object"&&n!==null&&Mn in n&&n[Mn]===!0}var zr,Hr,Nn=class n extends(Hr=G,zr=Mn,Hr){constructor(t){var r,i,s,a,c,l,u,f,d;super(t);this[zr]=!0;if(this.model=t.model,this.instruction=(r=t.instruction)!=null?r:"",this.globalInstruction=(i=t.globalInstruction)!=null?i:"",this.tools=(s=t.tools)!=null?s:[],this.generateContentConfig=t.generateContentConfig,this.disallowTransferToParent=(a=t.disallowTransferToParent)!=null?a:!1,this.disallowTransferToPeers=(c=t.disallowTransferToPeers)!=null?c:!1,this.includeContents=(l=t.includeContents)!=null?l:"default",this.inputSchema=he(t.inputSchema)?be(t.inputSchema):t.inputSchema,this.outputSchema=he(t.outputSchema)?be(t.outputSchema):t.outputSchema,this.outputKey=t.outputKey,this.beforeModelCallback=t.beforeModelCallback,this.afterModelCallback=t.afterModelCallback,this.beforeToolCallback=t.beforeToolCallback,this.afterToolCallback=t.afterToolCallback,this.codeExecutor=t.codeExecutor,this.requestProcessors=(u=t.requestProcessors)!=null?u:[Ar,Fr,$r,Gr,kt,Lr],!t.requestProcessors&&t.contextCompactors&&t.contextCompactors.length>0){let p=this.requestProcessors.indexOf(kt);p!==-1?this.requestProcessors.splice(p,0,new Pe(t.contextCompactors)):this.requestProcessors.push(new Pe(t.contextCompactors))}if(this.responseProcessors=(f=t.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((d=this.subAgents)!=null&&d.length)||this.requestProcessors.push(vr),t.generateContentConfig){if(t.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(t.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(t.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};this.outputSchema&&(!this.disallowTransferToParent||!this.disallowTransferToPeers)&&(g.warn(`Invalid config for agent ${this.name}: outputSchema cannot co-exist with agent transfer configurations. Setting disallowTransferToParent=true, disallowTransferToPeers=true`),this.disallowTransferToParent=!0,this.disallowTransferToPeers=!0)}get canonicalModel(){if(sn(this.model))return this.model;if(typeof this.model=="string"&&this.model)return ge.newLlm(this.model);let t=this.parentAgent;for(;t;){if(T(t))return t.canonicalModel;t=t.parentAgent}throw new Error(`No model found for ${this.name}.`)}async canonicalInstruction(t){return typeof this.instruction=="string"?{instruction:this.instruction,requireStateInjection:!0}:{instruction:await this.instruction(t),requireStateInjection:!1}}async canonicalGlobalInstruction(t){return typeof this.globalInstruction=="string"?{instruction:this.globalInstruction,requireStateInjection:!0}:{instruction:await this.globalInstruction(t),requireStateInjection:!1}}async canonicalTools(t){let o=[];for(let r of this.tools){let i=await jr(r,t);o.push(...i)}return o}static normalizeCallbackArray(t){return t?Array.isArray(t)?t:[t]:[]}get canonicalBeforeModelCallbacks(){return n.normalizeCallbackArray(this.beforeModelCallback)}get canonicalAfterModelCallbacks(){return n.normalizeCallbackArray(this.afterModelCallback)}get canonicalBeforeToolCallbacks(){return n.normalizeCallbackArray(this.beforeToolCallback)}get canonicalAfterToolCallbacks(){return n.normalizeCallbackArray(this.afterToolCallback)}maybeSaveOutputToState(t){var i,s;if(t.author!==this.name){g.debug(`Skipping output save for agent ${this.name}: event authored by ${t.author}`);return}if(!this.outputKey){g.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!ae(t)){g.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((s=(i=t.content)==null?void 0:i.parts)!=null&&s.length)){g.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let o=t.content.parts.map(a=>a.text?a.text:"").join(""),r=o;if(this.outputSchema){if(!o.trim())return;try{r=JSON.parse(o)}catch(a){g.error(`Error parsing output for agent ${this.name}`,a)}}t.actions.stateDelta[this.outputKey]=r}async*runAsyncImpl(t){for(;;){let o;for await(let r of this.runOneStepAsync(t))o=r,this.maybeSaveOutputToState(r),yield r;if(!o||ae(o))break;if(o.partial){g.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(t){for await(let o of this.runLiveFlow(t))this.maybeSaveOutputToState(o),yield o;t.endInvocation}async*runLiveFlow(t){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(t){let o={contents:[],toolsDict:{},liveConnectConfig:{}};for(let a of this.requestProcessors)for await(let c of a.runAsync(t,o))yield c;for(let a of this.tools){let c=new N({invocationContext:t}),l=await jr(a,new w(t));for(let u of l)await u.processLlmRequest({toolContext:c,llmRequest:o})}if(t.endInvocation)return;let r=A({invocationId:t.invocationId,author:this.name,branch:t.branch}),i=J.startSpan("call_llm"),s=fa.setSpan(ua.active(),i);yield*pe(s,this,async function*(){let a=async function*(){for await(let c of this.callLlmAsync(t,o,r))for await(let l of this.postprocess(t,o,c,r))r.id=Ht(),r.timestamp=new Date().getTime(),yield l};yield*this.runAndHandleError(a.call(this),t,o,r)}),i.end()}async*postprocess(t,o,r,i){var f,d;for(let p of this.responseProcessors)for await(let m of p.runAsync(t,r))yield m;if(!r.content&&!r.errorCode&&!r.interrupted)return;let s=A({...i,...r});if(s.content){let p=I(s);p!=null&&p.length&&(ur(s),s.longRunningToolIds=Array.from(dr(p,o.toolsDict)))}if(yield s,!((f=I(s))!=null&&f.length))return;if((d=t.runConfig)!=null&&d.pauseOnToolCalls){t.endInvocation=!0;return}let a=await pr({invocationContext:t,functionCallEvent:s,toolsDict:o.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!a)return;let c=mn(t,a);c&&(yield c);let l=gn({invocationContext:t,functionCallEvent:s,functionResponseEvent:a});if(l){yield l,t.endInvocation=!0;return}yield a;let u=a.actions.transferToAgent;if(u){let p=this.getAgentByName(t,u);for await(let m of p.runAsync(t))yield m}}getAgentByName(t,o){let i=t.agent.rootAgent.findAgent(o);if(!i)throw new Error(`Agent ${o} not found in the agent tree.`);return i}async*callLlmAsync(t,o,r){var a,c,l,u,f;let i=await this.handleBeforeModelCallback(t,o,r);if(i){yield i;return}(a=o.config)!=null||(o.config={}),(l=(c=o.config).labels)!=null||(c.labels={}),o.config.labels[Vr]||(o.config.labels[Vr]=this.name);let s=this.canonicalModel;if((u=t.runConfig)!=null&&u.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{t.incrementLlmCallCount();let d=s.generateContentAsync(o,((f=t.runConfig)==null?void 0:f.streamingMode)==="sse");for await(let p of d){Oo({invocationContext:t,eventId:r.id,llmRequest:o,llmResponse:p});let m=await this.handleAfterModelCallback(t,p,r);yield m!=null?m:p}}}async handleBeforeModelCallback(t,o,r){let i=new N({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runBeforeModelCallback({callbackContext:i,llmRequest:o});if(s)return s;for(let a of this.canonicalBeforeModelCallbacks){let c=await a({context:i,request:o});if(c)return c}}async handleAfterModelCallback(t,o,r){let i=new N({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runAfterModelCallback({callbackContext:i,llmResponse:o});if(s)return s;for(let a of this.canonicalAfterModelCallbacks){let c=await a({context:i,response:o});if(c)return c}}async*runAndHandleError(t,o,r,i){try{for await(let s of t)yield s}catch(s){let a=new N({invocationContext:o,eventActions:i.actions});if(s instanceof Error){let c=await o.pluginManager.runOnModelErrorCallback({callbackContext:a,llmRequest:r,error:s});if(c)yield c;else{let l="UNKNOWN_ERROR",u=s.message;try{let f=JSON.parse(s.message);f!=null&&f.error&&(l=String(f.error.code||"UNKNOWN_ERROR"),u=f.error.message||u)}catch{}i.actions?yield A({invocationId:o.invocationId,author:this.name,errorCode:l,errorMessage:u}):yield{errorCode:l,errorMessage:u}}}else throw g.error("Unknown error during response generation",s),s}}};var Dn=Symbol.for("google.adk.loopAgent");function _e(n){return typeof n=="object"&&n!==null&&Dn in n&&n[Dn]===!0}var Wr,Kr,Bn=class extends(Kr=G,Wr=Dn,Kr){constructor(t){var o;super(t);this[Wr]=!0;this.maxIterations=(o=t.maxIterations)!=null?o:Number.MAX_SAFE_INTEGER}async*runAsyncImpl(t){let o=0;for(;o<this.maxIterations;){for(let r of this.subAgents){let i=!1;for await(let s of r.runAsync(t))yield s,s.actions.escalate&&(i=!0);if(i)return}o++}}async*runLiveImpl(t){throw new Error("This is not supported yet for LoopAgent.")}};var Fn=Symbol.for("google.adk.parallelAgent");function Le(n){return typeof n=="object"&&n!==null&&Fn in n&&n[Fn]===!0}var Xr,Yr,Un=class extends(Yr=G,Xr=Fn,Yr){constructor(){super(...arguments);this[Xr]=!0}async*runAsyncImpl(t){let o=this.subAgents.map(r=>r.runAsync(da(this,r,t)));for await(let r of pa(o))yield r}async*runLiveImpl(t){throw new Error("This is not supported yet for ParallelAgent.")}};function da(n,e,t){let o=new j(t),r=`${n.name}.${e.name}`;return o.branch=o.branch?`${o.branch}.${r}`:r,o}async function*pa(n){let e=new Map;for(let[t,o]of n.entries()){let r=o.next().then(i=>({result:i,index:t}));e.set(t,r)}for(;e.size>0;){let{result:t,index:o}=await Promise.race(e.values());if(t.done){e.delete(o);continue}yield t.value;let r=n[o].next().then(i=>({result:i,index:o}));e.set(o,r)}}var $n="task_completed",Gn=Symbol.for("google.adk.sequentialAgent");function Oe(n){return typeof n=="object"&&n!==null&&Gn in n&&n[Gn]===!0}var Jr,Qr,qn=class extends(Qr=G,Jr=Gn,Qr){constructor(){super(...arguments);this[Jr]=!0}async*runAsyncImpl(t){for(let o of this.subAgents)for await(let r of o.runAsync(t))yield r}async*runLiveImpl(t){for(let o of this.subAgents)T(o)&&((await o.canonicalTools(new w(t))).some(s=>s.name===$n)||(o.tools.push(new oe({name:$n,description:"Signals that the model has successfully completed the user's question or task.",execute:()=>"Task completion signaled."})),o.instruction+=`If you finished the user's request according to its description, call the ${$n} function to exit so the next agents can take over. When calling this function, do not generate any text other than the function call.`));for(let o of this.subAgents)for await(let r of o.runLive(t))yield r}};var Vn=Symbol.for("google.adk.baseToolset");function jn(n){return typeof n=="object"&&n!==null&&Vn in n&&n[Vn]===!0}var Zr;Zr=Vn;var tt=class{constructor(e,t){this.toolFilter=e;this.prefix=t;this[Zr]=!0}isToolSelected(e,t){return this.toolFilter?typeof this.toolFilter=="function"?this.toolFilter(e,t):Array.isArray(this.toolFilter)?this.toolFilter.includes(e.name):!1:!0}async processLlmRequest(e,t){}};async function _t(n){if(typeof n=="object")return n;let e=n;if(e.startsWith("http://")||e.startsWith("https://"))return await new ma().resolve(e);try{let t=await oi.readFile(e,"utf-8");return JSON.parse(t)}catch(t){throw new Error(`Failed to read agent card from file ${e}: ${t.message}`)}}async function zn(n,e){return{name:n.name,description:n.description||"",protocolVersion:"0.3.0",version:"1.0.0",skills:await ga(n),url:e[0].url,preferredTransport:e[0].transport,capabilities:{extensions:[],stateTransitionHistory:!1,pushNotifications:!1,streaming:!0},defaultInputModes:["text"],defaultOutputModes:["text"],additionalInterfaces:e}}async function ga(n){let[e,t]=await Promise.all([ri(n),ha(n)]);return[...e,...t]}async function ri(n){return T(n)?Ca(n):va(n)}async function ha(n){let e=n.subAgents,t=[];for(let o of e){let r=await ri(o);for(let i of r){let s={id:`${o.name}_${i.id}`,name:`${o.name}: ${i.name}`,description:i.description,tags:[`sub_agent:${o.name}`,...i.tags]};t.push(s)}}return t}async function Ca(n){let e=[{id:n.name,name:"model",description:await ya(n),tags:["llm"]}];if(n.tools&&n.tools.length>0){for(let t of n.tools)if(Xe(t))e.push(ei(n.name,t));else if(jn(t)){let o=await t.getTools();for(let r of o)e.push(ei(n.name,r))}}return e}function ei(n,e){let t=e.description;return t||(t=`Tool: ${e.name}`),{id:`${n}-${e.name}`,name:e.name,description:t,tags:["llm","tools"]}}function va(n){let e=[{id:n.name,name:Sa(n),description:Aa(n),tags:[ni(n)]}],t=n.subAgents;if(t.length>0){let o=t.map(r=>r.description||"No description");e.push({id:`${n.name}-sub-agents`,name:"sub-agents",description:`Orchestrates: ${o.join("; ")}`,tags:[ni(n),"orchestration"]})}return e}function Aa(n){let e=[];return n.description&&e.push(n.description),n.subAgents.length>0&&(_e(n)?e.push(Ta(n)):Le(n)?e.push(xa(n)):Oe(n)&&e.push(Ea(n))),e.length>0?e.join(" "):ii(n)}function Ea(n){let e=n.subAgents,t=[];return e.forEach((o,r)=>{let i=o.description;i||(i=`execute the ${o.name} agent`),r===0?t.push(`First, this agent will ${i}.`):r===e.length-1?t.push(`Finally, this agent will ${i}.`):t.push(`Then, this agent will ${i}.`)}),t.join(" ")}function xa(n){let e=n.subAgents,t=[];return e.forEach((o,r)=>{let i=o.description;i||(i=`execute the ${o.name} agent`),r===0?t.push(`This agent will ${i}`):r===e.length-1?t.push(`and ${i}`):t.push(`, ${i}`)}),`${t.join(" ")} simultaneously.`}function Ta(n){let e=n.maxIterations,t="unlimited";typeof e=="number"&&e<Number.MAX_SAFE_INTEGER&&(t=e.toString());let o=n.subAgents,r=[];return o.forEach((i,s)=>{let a=i.description;a||(a=`execute the ${i.name} agent`),s===0?r.push(`This agent will ${a}`):s===o.length-1?r.push(`and ${a}`):r.push(`, ${a}`)}),`${r.join(" ")} in a loop (max ${t} iterations).`}async function ya(n){let e=[];if(n.description&&e.push(n.description),n.instruction){let o;if(typeof n.instruction=="function"){let r=new w(new j({agent:n}));try{o=await n.instruction(r)}catch(i){g.warn("Failed to resolve dynamic instruction for AgentCard",i),o=""}}else o=n.instruction;o&&e.push(ti(o))}let t=n.rootAgent;if(T(t)&&t.globalInstruction){let o;if(typeof t.globalInstruction=="function"){let r=new w(new j({agent:n}));try{o=await t.globalInstruction(r)}catch(i){g.warn("Failed to resolve dynamic global instruction for AgentCard",i),o=""}}else o=t.globalInstruction;o&&e.push(ti(o))}return e.length>0?e.join(" "):ii(n)}function ti(n){let e=[{original:"you were",target:"I was"},{original:"you are",target:"I am"},{original:"you're",target:"I am"},{original:"you've",target:"I have"},{original:"yours",target:"mine"},{original:"your",target:"my"},{original:"you",target:"I"}],t=n;for(let o of e){let r=new RegExp(`\\b${o.original}\\b`,"gi");t=t.replace(r,o.target)}return t}function ii(n){return _e(n)?"A loop workflow agent":Oe(n)?"A sequential workflow agent":Le(n)?"A parallel workflow agent":T(n)?"An LLM-based agent":"A custom agent"}function ni(n){return _e(n)?"loop_workflow":Oe(n)?"sequential_workflow":Le(n)?"parallel_workflow":T(n)?"llm_agent":"custom_agent"}function Sa(n){return T(n)?"model":Ra(n)?"workflow":"custom"}function Ra(n){return _e(n)||Oe(n)||Le(n)}import{createModelContent as nt,createUserContent as wa}from"@google/genai";function Hn(n,e,t){if(tn(n))return ba(n,e,t);if(te(n))return La(n,e,t);if(ze(n))return ka(n,e,t);if(le(n))return n.final?Pa(n,e,t):_a(n,e,t)}function ba(n,e,t,o){let r=Q(n.parts);return{...ot(o||n),invocationId:e,author:n.role==="user"?"user":t,content:n.role==="user"?wa(r):nt(r),turnComplete:!0,partial:!1}}function ka(n,e,t){var i;let o=((i=n.artifact)==null?void 0:i.parts)||[];if(o.length===0)return;let r=!!ht(n)[v.PARTIAL]||n.append||!n.lastChunk;return{...ot(n),invocationId:e,author:t,content:nt(Q(o)),longRunningToolIds:Lt(o),partial:r}}function Pa(n,e,t){var a;let o=((a=n.status.message)==null?void 0:a.parts)||[];if(o.length===0)return;let r=Q(o),i=Ct(n),s=!i&&r.length>0;return{...ot(n),invocationId:e,author:t,errorMessage:i?nn(n):void 0,content:s?nt(r):void 0,longRunningToolIds:Lt(o),turnComplete:!0}}function _a(n,e,t){let o=n.status.message;if(!o)return;let r=Q(o.parts);return{...ot(n),invocationId:e,author:t,content:nt(r),turnComplete:!1,partial:!0}}function La(n,e,t){var a,c;let o=[],r=[];if(n.artifacts){for(let l of n.artifacts)if(((a=l.parts)==null?void 0:a.length)>0){let u=Q(l.parts);o.push(...u),r.push(...Lt(l.parts))}}if((c=n.status)!=null&&c.message){let l=n.status.message.parts,u=Q(l);o.push(...u),r.push(...Lt(l))}let i=qo(n)||vt(n),s=Ct(n);if(!(o.length===0&&!i))return{...ot(n),invocationId:e,author:t,content:s?void 0:nt(o),errorMessage:s?nn(n):void 0,longRunningToolIds:r,turnComplete:i}}function ot(n){let e=n.metadata||{};return A({branch:e[v.BRANCH],author:e[v.AUTHOR],partial:e[v.PARTIAL],errorCode:e[v.ERROR_CODE],errorMessage:e[v.ERROR_MESSAGE],citationMetadata:e[v.CITATION_METADATA],groundingMetadata:e[v.GROUNDING_METADATA],usageMetadata:e[v.USAGE_METADATA],customMetadata:e[v.CUSTOM_METADATA],actions:F({escalate:!!e[v.ESCALATE],transferToAgent:e[v.TRANSFER_TO_AGENT]})})}function Lt(n){let e=[];for(let t of n)if(t.metadata&&t.metadata[v.IS_LONG_RUNNING]){let o=on(t);o.functionCall&&o.functionCall.id&&e.push(o.functionCall.id)}return e}var Wn=class extends G{constructor(t){super(t);this.a2aConfig=t;this.isInitialized=!1;if(!t.agentCard)throw new Error("AgentCard must be provided")}async init(){if(this.isInitialized)return;this.card=await _t(this.a2aConfig.agentCard);let t=this.a2aConfig.clientFactory||new Ma;this.client=await t.createFromAgentCard(this.card),this.isInitialized=!0}async*runAsyncImpl(t){var o,r;await this.init();try{let i=t.session.events;if(i.length===0)throw new Error("No events in session to send");let s=Jo(t.session,i.length-1),a,c,l;if(s){let m=s.response;a=ne(((o=m.content)==null?void 0:o.parts)||[],m.longRunningToolIds),c=s.taskId,l=s.contextId}else{let m=Qo(t,t.session);a=m.parts,l=m.contextId}let u={kind:"message",messageId:b(),role:"user",parts:a,metadata:{...ue({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id})}};c&&(u.taskId=c),l&&(u.contextId=l);let f={message:u,configuration:this.a2aConfig.messageSendConfig},d=new Et(f);if(this.a2aConfig.beforeRequestCallbacks)for(let m of this.a2aConfig.beforeRequestCallbacks)await m(t,f);if(((r=this.card.capabilities)==null?void 0:r.streaming)!==!1)for await(let m of this.client.sendMessageStream(f)){if(this.a2aConfig.afterRequestCallbacks)for(let y of this.a2aConfig.afterRequestCallbacks)await y(t,m);let h=Hn(m,t.invocationId,this.name);if(!h)continue;d.updateCustomMetadata(h,m);let C=d.aggregatePartial(t,m,h);for(let y of C)yield y}else{let m=await this.client.sendMessage(f);if(this.a2aConfig.afterRequestCallbacks)for(let C of this.a2aConfig.afterRequestCallbacks)await C(t,m);let h=Hn(m,t.invocationId,this.name);h&&(d.updateCustomMetadata(h,m),yield h)}}catch(i){let s=i;g.error(`A2ARemoteAgent ${this.name} failed:`,s),yield A({author:this.name,invocationId:t.invocationId,errorMessage:s.message,turnComplete:!0})}}runLiveImpl(t){throw new Error("Live mode is not supported in A2ARemoteAgent yet.")}};import{createPartFromText as Na}from"@google/genai";import{context as Da,trace as Ba}from"@opentelemetry/api";var rt=class{constructor(e){this.plugins=new Set;if(e)for(let t of e)this.registerPlugin(t)}registerPlugin(e){if(this.plugins.has(e))throw new Error(`Plugin '${e.name}' already registered.`);if(Array.from(this.plugins).some(t=>t.name===e.name))throw new Error(`Plugin with name '${e.name}' already registered.`);this.plugins.add(e),g.info(`Plugin '${e.name}' registered.`)}getPlugin(e){return Array.from(this.plugins).find(t=>t.name===e)}async runCallbacks(e,t,o){for(let r of e)try{let i=await t(r);if(i!==void 0)return g.debug(`Plugin '${r.name}' returned a value for callback '${o}', exiting early.`),i}catch(i){let s=`Error in plugin '${r.name}' during '${o}' callback: ${i}`;throw g.error(s),new Error(s)}}async runOnUserMessageCallback({userMessage:e,invocationContext:t}){return await this.runCallbacks(this.plugins,o=>o.onUserMessageCallback({userMessage:e,invocationContext:t}),"onUserMessageCallback")}async runBeforeRunCallback({invocationContext:e}){return await this.runCallbacks(this.plugins,t=>t.beforeRunCallback({invocationContext:e}),"beforeRunCallback")}async runAfterRunCallback({invocationContext:e}){await this.runCallbacks(this.plugins,t=>t.afterRunCallback({invocationContext:e}),"afterRunCallback")}async runOnEventCallback({invocationContext:e,event:t}){return await this.runCallbacks(this.plugins,o=>o.onEventCallback({invocationContext:e,event:t}),"onEventCallback")}async runBeforeAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,o=>o.beforeAgentCallback({agent:e,callbackContext:t}),"beforeAgentCallback")}async runAfterAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,o=>o.afterAgentCallback({agent:e,callbackContext:t}),"afterAgentCallback")}async runBeforeToolCallback({tool:e,toolArgs:t,toolContext:o}){return await this.runCallbacks(this.plugins,r=>r.beforeToolCallback({tool:e,toolArgs:t,toolContext:o}),"beforeToolCallback")}async runAfterToolCallback({tool:e,toolArgs:t,toolContext:o,result:r}){return await this.runCallbacks(this.plugins,i=>i.afterToolCallback({tool:e,toolArgs:t,toolContext:o,result:r}),"afterToolCallback")}async runOnModelErrorCallback({callbackContext:e,llmRequest:t,error:o}){return await this.runCallbacks(this.plugins,r=>r.onModelErrorCallback({callbackContext:e,llmRequest:t,error:o}),"onModelErrorCallback")}async runBeforeModelCallback({callbackContext:e,llmRequest:t}){return await this.runCallbacks(this.plugins,o=>o.beforeModelCallback({callbackContext:e,llmRequest:t}),"beforeModelCallback")}async runAfterModelCallback({callbackContext:e,llmResponse:t}){return await this.runCallbacks(this.plugins,o=>o.afterModelCallback({callbackContext:e,llmResponse:t}),"afterModelCallback")}async runOnToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}){return await this.runCallbacks(this.plugins,i=>i.onToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}),"onToolErrorCallback")}};var Kn=Symbol.for("google.adk.runner");function Xn(n){return typeof n=="object"&&n!==null&&Kn in n&&n[Kn]===!0}var si;si=Kn;var re=class{constructor(e){this[si]=!0;var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new rt((t=e.plugins)!=null?t:[]),this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.credentialService=e.credentialService}async*runEphemeral(e){let o=(await this.sessionService.createSession({appName:this.appName,userId:e.userId})).id;try{yield*this.runAsync({userId:e.userId,sessionId:o,newMessage:e.newMessage,stateDelta:e.stateDelta,runConfig:e.runConfig})}finally{await this.sessionService.deleteSession({appName:this.appName,userId:e.userId,sessionId:o})}}async*runAsync(e){let{userId:t,sessionId:o,stateDelta:r}=e,i=qr(e.runConfig),s=e.newMessage,a=J.startSpan("invocation"),c=Ba.setSpan(Da.active(),a);try{yield*pe(c,this,async function*(){var d;let l=await this.sessionService.getSession({appName:this.appName,userId:t,sessionId:o});if(!l)throw this.appName?new Error(`Session not found: ${o}`):new Error("Session lookup failed: appName must be provided in runner constructor");if(i.supportCfc&&T(this.agent)){let p=this.agent.canonicalModel.model;if(!Je(p))throw new Error(`CFC is not supported for model: ${p} in agent: ${this.agent.name}`);Ze(this.agent.codeExecutor)||(this.agent.codeExecutor=new Qe)}let u=new j({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:Do(),agent:this.agent,session:l,userContent:s,runConfig:i,pluginManager:this.pluginManager}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:s,invocationContext:u});if(f&&(s=f),s){if(!((d=s.parts)!=null&&d.length))throw new Error("No parts in the newMessage.");i.saveInputBlobsAsArtifacts&&await this.saveArtifacts(u.invocationId,l.userId,l.id,s),await this.sessionService.appendEvent({session:l,event:A({invocationId:u.invocationId,author:"user",actions:r?F({stateDelta:r}):void 0,content:s})})}if(u.agent=this.determineAgentForResumption(l,this.agent),s){let p=await this.pluginManager.runBeforeRunCallback({invocationContext:u});if(p){let m=A({invocationId:u.invocationId,author:"model",content:p});await this.sessionService.appendEvent({session:l,event:m}),yield m}else{for await(let m of u.agent.runAsync(u)){m.partial||await this.sessionService.appendEvent({session:l,event:m});let h=await this.pluginManager.runOnEventCallback({invocationContext:u,event:m});h?yield h:yield m}await this.pluginManager.runAfterRunCallback({invocationContext:u})}}})}finally{a.end()}}async saveArtifacts(e,t,o,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let c=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:o,filename:c,artifact:a}),r.parts[s]=Na(`Uploaded file: ${c}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let o=Fa(e.events);if(o&&o.author)return t.findAgent(o.author)||t;for(let r=e.events.length-1;r>=0;r--){g.info("event:",JSON.stringify(e.events[r]));let i=e.events[r];if(i.author==="user"||!i.author)continue;if(i.author===t.name)return t;let s=t.findSubAgent(i.author);if(!s){g.warn(`Event from an unknown agent: ${i.author}, event id: ${i.id}`);continue}if(this.isRoutableLlmAgent(s))return s}return t}isRoutableLlmAgent(e){let t=e;for(;t;){if(!T(t)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function Fa(n){var o,r,i,s;if(!n.length)return null;let t=(s=(i=(r=(o=n[n.length-1].content)==null?void 0:o.parts)==null?void 0:r.find(a=>a.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let a=n.length-2;a>=0;a--){let c=n[a],l=I(c);if(l){for(let u of l)if(u.id===t)return c}}return null}function ai(n,e){var r,i;let t=F();for(let s of n){if(s.errorCode||s.errorMessage)return At({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,error:new Error(s.errorMessage||s.errorCode),metadata:{...We(s,e),...Ke(t)}});t.escalate=t.escalate||((r=s.actions)==null?void 0:r.escalate),(i=s.actions)!=null&&i.transferToAgent&&(t.transferToAgent=s.actions.transferToAgent)}let o=Ua(n,e);return o?{...o,metadata:{...o.metadata,...Ke(t)}}:zo({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,metadata:{...ue(e),...Ke(t)}})}function Ua(n,e){var r,i;let t=[],o=new Set;for(let s of n)if((i=(r=s.content)==null?void 0:r.parts)!=null&&i.length)for(let a of s.content.parts){let c=$a(a,s.longRunningToolIds,t);!c||o.has(c)||(t.push(a),o.add(c))}if(t.length>0)return Wo({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,parts:ne(t,[...o]),metadata:ue(e)})}function $a(n,e=[],t=[]){var i,s,a;let o=(i=n.functionCall)==null?void 0:i.id,r=(s=n.functionResponse)==null?void 0:s.id;if(!(!o&&!r)){if(o&&e.includes(o))return o;if(r&&e.includes(r))return r;for(let c of t)if(((a=c.functionCall)==null?void 0:a.id)===r)return r}}function ci(n,e){var r;if(!n||!vt(n)||!n.status.message)return;let t=n.status.message,o=Q(t.parts);for(let i of o){let s=(r=i.functionCall)==null?void 0:r.id;if(!s)continue;if(!((e==null?void 0:e.parts)||[]).some(c=>{var l;return((l=c.functionResponse)==null?void 0:l.id)===s}))return Ko({taskId:n.id,contextId:n.contextId,parts:[...t.parts.filter(c=>{var l;return!((l=c.metadata)!=null&&l.validation_error)}),{kind:"text",text:`No input provided for function call id ${s}`,metadata:{validation_error:!0}}]})}}function li({session:n,userContent:e,requestContext:t}){return{userId:n.userId,sessionId:n.id,appName:n.appName,readonlyState:n.state,events:n.events,userContent:e,requestContext:t}}var it=class{constructor(e){this.config=e;this.agentPartialArtifactIdsMap={}}async execute(e,t){var u,f;let o=e.userMessage;if(!o)throw new Error("message not provided");let r=`A2A_USER_${e.contextId}`,i=e.contextId,s=Yo(o),a=await ui(this.config.runner),c=await Ga(r,i,a.sessionService,a.appName),l=li({session:c,userContent:s,requestContext:e});try{if(this.config.beforeExecuteCallback&&await this.config.beforeExecuteCallback(e),e.task){let p=ci(e.task,s);if(p){await this.publishFinalTaskStatus({executorContext:l,eventBus:t,event:p});return}}e.task||t.publish(Vo({taskId:e.taskId,contextId:e.contextId,message:o})),t.publish(jo({taskId:e.taskId,contextId:e.contextId}));let d=[];for await(let p of a.runAsync({userId:r,sessionId:i,newMessage:s,runConfig:this.config.runConfig})){d.push(p);let m=this.convertAdkEventToA2AEvent(p,l);m&&(await((f=(u=this.config).afterEventCallback)==null?void 0:f.call(u,l,p,m)),t.publish(m))}await this.publishFinalTaskStatus({executorContext:l,eventBus:t,event:ai(d,l)})}catch(d){let p=d;await this.publishFinalTaskStatus({executorContext:l,eventBus:t,error:p,event:At({taskId:e.taskId,contextId:e.contextId,error:new Error(`Agent run failed: ${p.message}`),metadata:ue(l)})})}}async cancelTask(e){throw new Error("Task cancellation is not supported yet.")}convertAdkEventToA2AEvent(e,t){var s;let o=ne((s=e.content)==null?void 0:s.parts,e.longRunningToolIds);if(o.length===0)return;let r=this.agentPartialArtifactIdsMap[e.author]||b(),i=Ho({taskId:t.requestContext.taskId,contextId:t.requestContext.contextId,artifactId:r,parts:o,metadata:We(e,t),append:e.partial,lastChunk:!e.partial});return e.partial?this.agentPartialArtifactIdsMap[e.author]=r:delete this.agentPartialArtifactIdsMap[e.author],i}async publishFinalTaskStatus({executorContext:e,eventBus:t,event:o,error:r}){var i,s;try{await((s=(i=this.config).afterExecuteCallback)==null?void 0:s.call(i,e,o,r))}catch(a){g.error("Error in afterExecuteCallback:",a)}t.publish(o)}};async function Ga(n,e,t,o){let r=await t.getSession({appName:o,userId:n,sessionId:e});return r||t.createSession({appName:o,userId:n,sessionId:e})}async function ui(n){if(typeof n=="function"){let e=await n();return ui(e)}return Xn(n)?n:new re(n)}import{AGENT_CARD_PATH as Va}from"@a2a-js/sdk";import{DefaultRequestHandler as ja,InMemoryTaskStore as za}from"@a2a-js/sdk/server";import{agentCardHandler as Ha,jsonRpcHandler as Wa,restHandler as Ka,UserBuilder as pi}from"@a2a-js/sdk/server/express";import Jn from"express";import{cloneDeep as fi}from"lodash-es";import{cloneDeep as qa}from"lodash-es";var Ee=class{async getOrCreateSession(e){if(!e.sessionId)return this.createSession(e);let t=await this.getSession({appName:e.appName,userId:e.userId,sessionId:e.sessionId});return t||this.createSession(e)}async appendEvent({session:e,event:t}){return t.partial||(t=Yn(t),this.updateSessionState({session:e,event:t}),e.events.push(t)),t}updateSessionState({session:e,event:t}){if(!(!t.actions||!t.actions.stateDelta))for(let[o,r]of Object.entries(t.actions.stateDelta))o.startsWith(E.TEMP_PREFIX)||(e.state[o]=r)}};function Yn(n){if(!n.actions||!n.actions.stateDelta)return n;let e=n.actions.stateDelta,t={};for(let[o,r]of Object.entries(e))o.startsWith(E.TEMP_PREFIX)||(t[o]=r);return n.actions.stateDelta=t,n}function ie(n={},e={},t={}){let o=qa(t);for(let[r,i]of Object.entries(n))o[E.APP_PREFIX+r]=i;for(let[r,i]of Object.entries(e))o[E.USER_PREFIX+r]=i;return o}function de(n){return{id:n.id,appName:n.appName,userId:n.userId||"",state:n.state||{},events:n.events||[],lastUpdateTime:n.lastUpdateTime||0}}function di(n){return n==="memory://"}var X=class extends Ee{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}async createSession({appName:t,userId:o,state:r,sessionId:i}){var c;let s=de({id:i||b(),appName:t,userId:o,state:r,events:[],lastUpdateTime:Date.now()});this.sessions[t]||(this.sessions[t]={}),this.sessions[t][o]||(this.sessions[t][o]={}),this.sessions[t][o][s.id]=s;let a=fi(s);return a.state=ie(this.appState[t],(c=this.userState[t])==null?void 0:c[o],a.state),a}async getSession({appName:t,userId:o,sessionId:r,config:i}){var c;if(!this.sessions[t]||!this.sessions[t][o]||!this.sessions[t][o][r])return Promise.resolve(void 0);let s=this.sessions[t][o][r],a=fi(s);if(i&&(i.numRecentEvents&&(a.events=a.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let l=a.events.length-1;for(;l>=0&&!(a.events[l].timestamp<i.afterTimestamp);)l--;l>=0&&(a.events=a.events.slice(l+1))}return a.state=ie(this.appState[t],(c=this.userState[t])==null?void 0:c[o],a.state),a}listSessions({appName:t,userId:o}){if(!this.sessions[t]||!this.sessions[t][o])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][o]))r.push(de({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:o,sessionId:r}){await this.getSession({appName:t,userId:o,sessionId:r})&&delete this.sessions[t][o][r]}async appendEvent({session:t,event:o}){await super.appendEvent({session:t,event:o}),t.lastUpdateTime=o.timestamp;let r=t.appName,i=t.userId,s=t.id,a=l=>{g.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),o;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),o;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),o;if(o.actions&&o.actions.stateDelta)for(let l of Object.keys(o.actions.stateDelta))l.startsWith(E.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][l.replace(E.APP_PREFIX,"")]=o.actions.stateDelta[l]),l.startsWith(E.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][l.replace(E.USER_PREFIX,"")]=o.actions.stateDelta[l]);let c=this.sessions[r][i][s];return await super.appendEvent({session:c,event:o}),c.lastUpdateTime=o.timestamp,o}};async function Xa(n,e={}){var f,d,p,m;let t=(f=e.host)!=null?f:"localhost",o=(d=e.port)!=null?d:8e3,r=(p=e.protocol)!=null?p:"http",i=e.basePath||"",s=`${r}://${t}:${o}${i}`,a=e.agentCard?await _t(e.agentCard):await zn(n,[{url:`${s}/jsonrpc`,transport:"JSONRPC"},{url:`${s}/rest`,transport:"HTTP+JSON"}]),c=new it({runner:e.runner||{agent:n,appName:n.name,sessionService:e.sessionService||new X,memoryService:e.memoryService,artifactService:e.artifactService},runConfig:{streamingMode:"sse"}}),l=new ja(a,new za,c),u=(m=e.app)!=null?m:Jn();return e.app||(u.use(Jn.urlencoded({limit:"50mb",extended:!0})),u.use(Jn.json({limit:"50mb"}))),u.use(`${i}/${Va}`,Ha({agentCardProvider:l})),u.use(`${i}/rest`,Ka({requestHandler:l,userBuilder:pi.noAuthentication})),u.use(`${i}/jsonrpc`,Wa({requestHandler:l,userBuilder:pi.noAuthentication})),u}import*as _ from"fs/promises";import*as x from"path";import{fileURLToPath as hi,pathToFileURL as Ya}from"url";var Mt="user:",st=class{constructor(e){try{let t=e.startsWith("file://")?hi(e):e;this.rootDir=x.resolve(t)}catch(t){throw new Error(`Invalid root directory: ${e}`,{cause:t})}}async saveArtifact({userId:e,sessionId:t,filename:o,artifact:r,customMetadata:i}){if(!r.inlineData&&!r.text)throw new Error("Artifact must have either inlineData or text content.");let s=xe(this.rootDir,e,t,o);await _.mkdir(s,{recursive:!0});let a=await Me(s),c=a.length>0?a[a.length-1]+1:0,l=Te(s),u=x.join(l,c.toString());await _.mkdir(u,{recursive:!0});let f=x.basename(s),d=x.join(u,f),p;if(r.inlineData){let C=r.inlineData.data||"";await _.writeFile(d,Buffer.from(C,"base64")),p=r.inlineData.mimeType||"application/octet-stream"}else r.text!==void 0&&await _.writeFile(d,r.text,"utf-8");let m=await Za(this.rootDir,e,t,o,c),h={fileName:o,mimeType:p,version:c,canonicalUri:m,customMetadata:i};return await ec(x.join(u,"metadata.json"),h),c}async loadArtifact({userId:e,sessionId:t,filename:o,version:r}){try{let i=xe(this.rootDir,e,t,o);try{await _.access(i)}catch(p){g.warn(`[FileArtifactService] loadArtifact: Artifact ${o} not found`,p);return}let s=await Me(i);if(s.length===0)return;let a;if(r===void 0)a=s[s.length-1];else{if(!s.includes(r)){g.warn(`[FileArtifactService] loadArtifact: Artifact ${o} version ${r} not found`);return}a=r}let c=x.join(Te(i),a.toString()),l=x.join(c,"metadata.json"),u=await Ot(l),f=x.basename(i),d=x.join(c,f);if(u.canonicalUri){let p=tc(u.canonicalUri);if(p)try{await _.access(p),d=p}catch{g.warn(`[FileArtifactService] loadArtifact: Artifact ${o} missing at ${p}, falling back to content path ${d}`)}}if(u.mimeType)try{let p=await _.readFile(d);return{inlineData:{mimeType:u.mimeType,data:p.toString("base64")}}}catch{g.warn(`[FileArtifactService] loadArtifact: Artifact ${o} missing at ${d}`);return}try{return{text:await _.readFile(d,"utf-8")}}catch{g.warn(`[FileArtifactService] loadArtifact: Text artifact ${o} missing at ${d}`);return}}catch(i){g.error(`[FileArtifactService] loadArtifact: Error loading artifact ${o}`,i);return}}async listArtifactKeys({userId:e,sessionId:t}){let o=new Set,r=Ai(this.rootDir,e),i=xi(r,t);for await(let a of Qn(i)){let c=await mi(a);if(c!=null&&c.fileName)o.add(c.fileName);else{let l=x.relative(i,a);o.add(gi(l))}}let s=Ei(r);for await(let a of Qn(s)){let c=await mi(a);if(c!=null&&c.fileName)o.add(c.fileName);else{let l=x.relative(s,a);o.add(`${Mt}${gi(l)}`)}}return Array.from(o).sort()}async deleteArtifact({userId:e,sessionId:t,filename:o}){try{let r=xe(this.rootDir,e,t,o);await _.rm(r,{recursive:!0,force:!0})}catch(r){g.warn(`[FileArtifactService] deleteArtifact: Failed to delete artifact ${o}`,r)}}async listVersions({userId:e,sessionId:t,filename:o}){try{let r=xe(this.rootDir,e,t,o);return await Me(r)}catch(r){return g.warn(`[FileArtifactService] listVersions: Failed to list versions for artifact ${o}`,r),[]}}async listArtifactVersions({userId:e,sessionId:t,filename:o}){try{let r=xe(this.rootDir,e,t,o),i=await Me(r),s=[];for(let a of i){let c=x.join(Te(r),a.toString(),"metadata.json");try{let l=await Ot(c);s.push(l)}catch(l){g.warn(`[FileArtifactService] listArtifactVersions: Failed to read artifact version ${a} at ${r}`,l)}}return s}catch(r){return g.warn(`[FileArtifactService] listArtifactVersions: Failed to list artifact versions for userId: ${e} sessionId: ${t} filename: ${o}`,r),[]}}async getArtifactVersion({userId:e,sessionId:t,filename:o,version:r}){try{let i=xe(this.rootDir,e,t,o),s=await Me(i);if(s.length===0)return;let a;if(r===void 0)a=s[s.length-1];else{if(!s.includes(r))return;a=r}let c=x.join(Te(i),a.toString(),"metadata.json");return await Ot(c)}catch(i){g.warn(`[FileArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${e} sessionId: ${t} filename: ${o} version: ${r}`,i);return}}},Ja=/^[a-zA-Z0-9_@-][a-zA-Z0-9_.@-]{0,255}$/;function Ci(n,e){if(!n||!Ja.test(n))throw new Error(`[FileArtifactService] Invalid ${e}: value contains disallowed characters.`)}function vi(n,e,t){let o=x.resolve(e),r=x.resolve(n);if(!r.startsWith(o+x.sep)&&r!==o)throw new Error(`[FileArtifactService] ${t} escapes storage root. Resolved: ${r}, Root: ${o}`)}function Ai(n,e){Ci(e,"userId");let t=x.join(n,"users",e);return vi(t,n,"userRoot"),t}function Qa(n,e){return!n||e.startsWith(Mt)}function Ei(n){return x.join(n,"artifacts")}function xi(n,e){Ci(e,"sessionId");let t=x.join(n,"sessions",e,"artifacts");return vi(t,n,"sessionArtifactsDir"),t}function Te(n){return x.join(n,"versions")}function xe(n,e,t,o){let r=Ai(n,e),i;if(Qa(t,o))i=Ei(r);else{if(!t)throw new Error("Session ID must be provided for session-scoped artifacts.");i=xi(r,t)}let s=o;if(s.startsWith(Mt)&&(s=s.substring(Mt.length)),s=s.trim(),x.isAbsolute(s))throw new Error(`Absolute artifact filename ${o} is not permitted.`);let a=x.resolve(i,s),c=x.relative(i,a);if(c.startsWith("..")||x.isAbsolute(c))throw new Error(`Artifact filename ${o} escapes storage directory.`);return c===""||c==="."?x.join(i,"artifact"):a}async function Me(n){let e=Te(n);try{return(await _.readdir(e,{withFileTypes:!0})).filter(r=>r.isDirectory()).map(r=>parseInt(r.name,10)).filter(r=>!isNaN(r)).sort((r,i)=>r-i)}catch(t){return g.warn(`[FileArtifactService] getArtifactVersionsFromDir: Failed to list artifact versions from ${n}`,t),[]}}async function Za(n,e,t,o,r){let i=await xe(n,e,t,o),s=x.basename(i),a=Te(i),c=x.join(a,r.toString(),s);return Ya(c).toString()}async function ec(n,e){await _.writeFile(n,JSON.stringify(e,null,2),"utf-8")}async function Ot(n){let e=await _.readFile(n,"utf-8");return JSON.parse(e)}async function mi(n){let e=await Me(n);if(e.length===0)return;let t=e[e.length-1],o=x.join(Te(n),t.toString(),"metadata.json");try{return await Ot(o)}catch(r){g.warn(`[FileArtifactService] getLatestMetadata: Failed to read metadata from ${o}`,r);return}}async function*Qn(n){try{let e=await _.readdir(n,{withFileTypes:!0});if(e.some(o=>o.isDirectory()&&o.name==="versions")){yield n;return}for(let o of e)if(o.isDirectory()){let r=x.join(n,o.name);for await(let i of Qn(r))yield i}}catch{}}function tc(n){try{return hi(n)}catch(e){g.warn(`[FileArtifactService] fileUriToPath: Failed to convert file URI to path: ${n}`,e);return}}function gi(n){return n.split(x.sep).join("/")}import{Storage as nc}from"@google-cloud/storage";import{createPartFromBase64 as oc,createPartFromText as rc}from"@google/genai";var ct=class{constructor(e){this.bucket=new nc().bucket(e)}async saveArtifact(e){if(!e.artifact.inlineData&&!e.artifact.text)throw new Error("Artifact must have either inlineData or text content.");let t=await this.listVersions(e),o=t.length>0?Math.max(...t)+1:0,r=this.bucket.file(at({...e,version:o})),i=e.customMetadata||{};return e.artifact.inlineData?(await r.save(Buffer.from(e.artifact.inlineData.data||"","base64"),{contentType:e.artifact.inlineData.mimeType,metadata:i}),o):(await r.save(e.artifact.text,{contentType:"text/plain",metadata:i}),o)}async loadArtifact(e){try{let t=e.version;if(t===void 0){let s=await this.listVersions(e);if(s.length===0)return;t=Math.max(...s)}let o=this.bucket.file(at({...e,version:t})),[[r],[i]]=await Promise.all([o.getMetadata(),o.download()]);return r.contentType==="text/plain"?rc(i.toString("utf-8")):oc(i.toString("base64"),r.contentType)}catch(t){g.warn(`[GcsArtifactService] loadArtifact: Failed to load artifact ${e.filename}`,t);return}}async listArtifactKeys(e){let t=`${e.appName}/${e.userId}/${e.sessionId}/`,o=`${e.appName}/${e.userId}/user/`,[[r],[i]]=await Promise.all([this.bucket.getFiles({prefix:t}),this.bucket.getFiles({prefix:o})]);return[...Ti(r,t),...Ti(i,o,"user:")].sort((s,a)=>s.localeCompare(a))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(o=>this.bucket.file(at({...e,version:o})).delete()))}async listVersions(e){let o=at(e)+"/",[r]=await this.bucket.getFiles({prefix:o}),i=[];for(let s of r){let a=s.name.split("/").pop(),c=parseInt(a,10);isNaN(c)||i.push(c)}return i.sort((s,a)=>s-a)}async listArtifactVersions(e){let t=await this.listVersions(e),o=[];for(let r of t){let i=await this.getArtifactVersion({...e,version:r});i&&o.push(i)}return o}async getArtifactVersion(e){try{let t=e.version;if(t===void 0){let i=await this.listVersions(e);if(i.length===0)return;t=Math.max(...i)}let o=this.bucket.file(at({...e,version:t})),[r]=await o.getMetadata();return{version:t,mimeType:r.contentType,customMetadata:r.metadata,canonicalUri:o.publicUrl()}}catch(t){g.warn(`[GcsArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${e.userId} sessionId: ${e.sessionId} filename: ${e.filename} version: ${e.version}`,t);return}}};function at({appName:n,userId:e,sessionId:t,filename:o,version:r}){let i=o.startsWith("user:"),s=i?o.substring(5):o,a=i?`${n}/${e}/user/${s}`:`${n}/${e}/${t}/${s}`;return r!==void 0?`${a}/${r}`:a}function Ti(n,e,t=""){let o=new Set;for(let r of n){if(!r.name.startsWith(e))continue;let i=r.name.substring(e.length),s=ic(i);o.add(`${t}${s}`)}return[...o]}function ic(n){let e=n.split("/");return e.length<2?n:e.slice(0,-1).join("/")}function yi(n){return n==="memory://"}var ye=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:o,filename:r,artifact:i,customMetadata:s}){if(!i.inlineData&&!i.text)return Promise.reject(new Error("Artifact must have either inlineData or text content."));let a=Ne(e,t,o,r);this.artifacts[a]||(this.artifacts[a]=[]);let c=this.artifacts[a].length,l={version:c,customMetadata:s};return this.artifacts[a].push({part:i,metadata:l}),Promise.resolve(c)}loadArtifact({appName:e,userId:t,sessionId:o,filename:r,version:i}){let s=Ne(e,t,o,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i].part)):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:o}){let r=`${e}/${t}/${o}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let c=a.replace(r,"");s.push(c)}else if(a.startsWith(i)){let c=a.replace(i,"");s.push(c)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:o,filename:r}){let i=Ne(e,t,o,r);return this.artifacts[i]&&delete this.artifacts[i],Promise.resolve()}listVersions({appName:e,userId:t,sessionId:o,filename:r}){let i=Ne(e,t,o,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let c=0;c<s.length;c++)a.push(c);return Promise.resolve(a)}listArtifactVersions({appName:e,userId:t,sessionId:o,filename:r}){let i=Ne(e,t,o,r),s=this.artifacts[i];return s?Promise.resolve(s.map(a=>a.metadata)):Promise.resolve([])}getArtifactVersion({appName:e,userId:t,sessionId:o,filename:r,version:i}){let s=Ne(e,t,o,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),a[i]?Promise.resolve(a[i].metadata):Promise.resolve(void 0)):Promise.resolve(void 0)}};function Ne(n,e,t,o){return sc(o)?`${n}/${e}/user/${o}`:`${n}/${e}/${t}/${o}`}function sc(n){return n.startsWith("user:")}function ac(n){if(yi(n))return new ye;if(n.startsWith("gs://")){let e=n.split("://")[1];return new ct(e)}if(n.startsWith("file://")){let e=n.split("://")[1];return new st(e)}throw new Error(`Unsupported artifact service URI: ${n}`)}var Zn=class{constructor(e={}){this.task=e.task,this.stream=e.stream}};var eo=class{constructor(){this.queue=[];this.resolveFnFifoQueue=[];this.isClosed=!1}send(e){if(this.isClosed)throw new Error("Cannot send to a closed queue.");this.resolveFnFifoQueue.length>0?this.resolveFnFifoQueue.shift()(e):this.queue.push(e)}async get(){return this.queue.length>0?this.queue.shift():this.isClosed?{close:!0}:new Promise(e=>{this.resolveFnFifoQueue.push(e)})}close(){if(this.isClosed)return;for(this.isClosed=!0;this.resolveFnFifoQueue.length>0&&this.queue.length>0;){let t=this.resolveFnFifoQueue.shift(),o=this.queue.shift();t(o)}let e={close:!0};for(;this.resolveFnFifoQueue.length>0;)this.resolveFnFifoQueue.shift()(e)}sendContent(e){this.send({content:e})}sendRealtime(e){this.send({blob:e})}sendActivityStart(){this.send({activityStart:{}})}sendActivityEnd(){this.send({activityEnd:{}})}async*[Symbol.asyncIterator](){for(;;){let e=await this.get();if(yield e,e.close)break}}};var Si=(i=>(i.API_KEY="apiKey",i.HTTP="http",i.OAUTH2="oauth2",i.OPEN_ID_CONNECT="openIdConnect",i.SERVICE_ACCOUNT="serviceAccount",i))(Si||{});var cc="The following is a conversation history between a user and an AI agent. Please summarize the conversation, focusing on key information and decisions made, as well as any unresolved questions or tasks. The summary should be concise and capture the essence of the interaction.",to=class{constructor(e){this.llm=e.llm,this.prompt=e.prompt||cc}async summarize(e){var u,f,d,p,m,h;if(e.length===0)throw new Error("Cannot summarize an empty list of events.");let t=e[0].timestamp,o=e[e.length-1].timestamp,r="";for(let C=0;C<e.length;C++)r+=`[Event ${C+1} - Author: ${e[C].author}]
|
|
86
|
-
|
|
85
|
+
`}var $i=new Co;function X(n){return"isCompacted"in n&&n.isCompacted===!0}function qi(n={}){return{...x(n),isCompacted:n.isCompacted||!0,startTime:n.startTime,endTime:n.endTime,compactedContent:n.compactedContent}}import{createUserContent as yc}from"@google/genai";import{cloneDeep as xc}from"lodash-es";function Ao(n,e,t){var s,a,c;let o=[];for(let l of n){if(X(l)){o.push(bc(l));continue}!((s=l.content)!=null&&s.role)||((c=(a=l.content.parts)==null?void 0:a[0])==null?void 0:c.text)===""||t&&l.branch&&!t.startsWith(l.branch)||Tc(l)||Sc(l)||o.push(Vi(e,l)?Rc(l):l)}let r=wc(o);r=Ic(r);let i=[];for(let l of r){let u=xc(l.content);ci(u),i.push(u)}return i}function ji(n,e,t){for(let o=n.length-1;o>=0;o--){let r=n[o];if(r.author==="user"||Vi(e,r))return Ao(n.slice(o),e,t)}return[]}function Tc(n){var e,t,o;if(!((e=n.content)!=null&&e.parts))return!1;for(let r of n.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===Jt||((o=r.functionResponse)==null?void 0:o.name)===Jt)return!0;return!1}function Sc(n){var e,t,o;if(!((e=n.content)!=null&&e.parts))return!1;for(let r of n.content.parts)if(((t=r.functionCall)==null?void 0:t.name)===Ye||((o=r.functionResponse)==null?void 0:o.name)===Ye)return!0;return!1}function Vi(n,e){return!!n&&e.author!==n&&e.author!=="user"}function Rc(n){var t,o,r,i,s,a;if(!((o=(t=n.content)==null?void 0:t.parts)!=null&&o.length))return n;let e={role:"user",parts:[{text:"For context:"}]};for(let c of n.content.parts)if(c.text&&!c.thought)(r=e.parts)==null||r.push({text:`[${n.author}] said: ${c.text}`});else if(c.functionCall){let l=Gi(c.functionCall.args);(i=e.parts)==null||i.push({text:`[${n.author}] called tool \`${c.functionCall.name}\` with parameters: ${l}`})}else if(c.functionResponse){let l=Gi(c.functionResponse.response);(s=e.parts)==null||s.push({text:`[${n.author}] tool \`${c.functionResponse.name}\` returned result: ${l}`})}else(a=e.parts)==null||a.push(c);return x({invocationId:n.invocationId,author:"user",content:e,branch:n.branch,timestamp:n.timestamp})}function zi(n){var r;if(n.length===0)throw new Error("Cannot merge an empty list of events.");let e=x(n[0]),t=((r=e.content)==null?void 0:r.parts)||[];if(t.length===0)throw new Error("There should be at least one function_response part.");let o={};for(let i=0;i<t.length;i++){let s=t[i];s.functionResponse&&s.functionResponse.id&&(o[s.functionResponse.id]=i)}for(let i of n.slice(1)){if(!i.content||!i.content.parts)throw new Error("There should be at least one function_response part.");for(let s of i.content.parts)if(s.functionResponse&&s.functionResponse.id){let a=s.functionResponse.id;a in o?t[o[a]]=s:(t.push(s),o[a]=t.length-1)}else t.push(s)}return e}function wc(n){if(n.length===0)return n;let e=n[n.length-1],t=K(e);if(!(t!=null&&t.length))return n;let o=new Set(t.filter(c=>!!c.id).map(c=>c.id)),r=n.at(-2);if(r){let c=P(r);if(c){for(let l of c)if(l.id&&o.has(l.id))return n}}let i=-1;for(let c=n.length-2;c>=0;c--){let l=n[c],u=P(l);if(u!=null&&u.length){for(let f of u)if(f.id&&o.has(f.id)){i=c;let d=new Set(u.map(g=>g.id).filter(g=>!!g));if(!Array.from(o).every(g=>d.has(g)))throw new Error(`Last response event should only contain the responses for the function calls in the same function call event. Function call ids found : ${Array.from(d).join(", ")}, function response ids provided: ${Array.from(o).join(", ")}`);o=d;break}}}if(i===-1)throw new Error(`No function call event found for function responses ids: ${Array.from(o).join(", ")}`);let s=[];for(let c=i+1;c<n.length-1;c++){let l=n[c],u=K(l);u&&u.some(f=>f.id&&o.has(f.id))&&s.push(l)}s.push(n[n.length-1]);let a=n.slice(0,i+1);return a.push(zi(s)),a}function Ic(n){let e=new Map;for(let o=0;o<n.length;o++){let r=n[o],i=K(r);if(i!=null&&i.length)for(let s of i)s.id&&e.set(s.id,o)}let t=[];for(let o of n){if(K(o).length>0)continue;let r=P(o);if(r!=null&&r.length){let i=new Set;for(let s of r){let a=s.id;a&&e.has(a)&&i.add(e.get(a))}if(t.push(o),i.size===0)continue;if(i.size===1){let[s]=[...i];t.push(n[s])}else{let a=Array.from(i).sort((c,l)=>c-l).map(c=>n[c]);t.push(zi(a))}}else t.push(o)}return t}function Gi(n){if(typeof n=="string")return n;try{return JSON.stringify(n)}catch{return String(n)}}function bc(n){let e=yc(`[Previous Context Summary]:
|
|
86
|
+
${n.compactedContent}`);return x({invocationId:n.invocationId,author:"user",content:e,branch:n.branch,timestamp:n.timestamp})}var an=class{async*runAsync(e,t){let o=e.agent;if(!o||!y(o))return;let r=e.session.events,i=r.filter(X),s=i.length>0?i.reduce((a,c)=>c.endTime>a.endTime?c:a):void 0;if(s){let a=r.filter(c=>!(c===s||X(c)||c.timestamp<=s.endTime));r=[s,...a]}o.includeContents==="default"?t.contents=Ao(r,o.name,e.branch):t.contents=ji(r,o.name,e.branch)}},cn=new an;var ln=new Set;function k(n,e,t){if(e===void 0){let o=n.name;return class extends n{constructor(...i){ln.has(o)||(m.warn(`Class ${o} is experimental and may change in the future.`),ln.add(o)),super(...i)}}}if(e!==void 0&&t!==void 0){let o=typeof n=="function"?n.name:n.constructor.name,r=String(e),i=`${o}.${r}`,s=t.value;return t.value=function(...a){return ln.has(i)||(m.warn(`Method ${i} is experimental and may change in the future.`),ln.add(i)),s.apply(this,a)},t}throw new Error("Invalid decorator usage")}var Eo=(t=>(t.Manual="Manual",t.Auto="Auto",t))(Eo||{}),ce=class{constructor(e){this.name=e}async onUserMessageCallback(e){}async beforeRunCallback(e){}async onEventCallback(e){}async afterRunCallback(e){}async beforeAgentCallback(e){}async afterAgentCallback(e){}async beforeModelCallback(e){}async afterModelCallback(e){}async onModelErrorCallback(e){}async beforeToolSelection(e){}async beforeContextCompaction(e){}async afterContextCompaction(e){}async beforeToolCallback(e){}async afterToolCallback(e){}async onToolErrorCallback(e){}};v([k],ce.prototype,"beforeToolSelection",1),v([k],ce.prototype,"beforeContextCompaction",1),v([k],ce.prototype,"afterContextCompaction",1);var Qe=class{constructor(e){this.compactors=e}async*runAsync(e,t){for(let o of this.compactors)if(await Promise.resolve(o.shouldCompact(e))){await e.pluginManager.runBeforeContextCompaction({invocationContext:e,trigger:"Auto"});let i=new Set(e.session.events);await Promise.resolve(o.compact(e)),await e.pluginManager.runAfterContextCompaction({invocationContext:e,trigger:"Auto"});let s=e.session.events.filter(a=>!i.has(a));for(let a of s)yield a;return}}};var yo=class extends F{async*runAsync(e,t){let o=e.agent,r=[`You are an agent. Your internal name is "${o.name}".`];o.description&&r.push(`The description about you is "${o.description}"`),q(t,r)}},Wi=new yo;async function xo(n,e){let t=e.invocationContext;async function o(c){let l=c[0].replace(/^\{+/,"").replace(/\}+$/,"").trim(),u=l.endsWith("?");if(u&&(l=l.slice(0,-1)),l.startsWith("artifact.")){let f=l.substring(9);if(t.artifactService===void 0)throw new Error("Artifact service is not initialized.");let d=await t.artifactService.loadArtifact({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id,filename:f});if(!d)throw new Error(`Artifact ${f} not found.`);return String(d)}if(!_c(l))return c[0];if(l in t.session.state)return String(t.session.state[l]);if(u)return"";throw new Error(`Context variable not found: \`${l}\`.`)}let r=/\{+[^{}]*}+/g,i=[],s=0,a=n.matchAll(r);for(let c of a){i.push(n.slice(s,c.index));let l=await o(c);i.push(l),s=c.index+c[0].length}return i.push(n.slice(s)),i.join("")}var kc=/^[a-zA-Z_][a-zA-Z0-9_]*$/;function Hi(n){return n===""||n===void 0?!1:kc.test(n)}var Pc=[T.APP_PREFIX,T.USER_PREFIX,T.TEMP_PREFIX];function _c(n){let e=n.split(":");return e.length===0||e.length>2?!1:e.length===1?Hi(n):Pc.includes(e[0]+":")?Hi(e[1]):!1}var To=class extends F{async*runAsync(e,t){let o=e.agent;if(!y(o))return;let r=o.rootAgent;if(y(r)&&r.globalInstruction){let{instruction:i,requireStateInjection:s}=await r.canonicalGlobalInstruction(new b(e)),a=i;s&&(a=await xo(i,new b(e))),q(t,[a])}if(o.instruction){let{instruction:i,requireStateInjection:s}=await o.canonicalInstruction(new b(e)),a=i;s&&(a=await xo(i,new b(e))),q(t,[a])}}},Ki=new To;var So=class extends F{async*runAsync(e){let t=e.agent;if(!y(t))return;let o=e.session.events;if(!o||o.length===0)return;let r={},i=-1;for(let s=o.length-1;s>=0;s--){let a=o[s];if(a.author!=="user")continue;let c=K(a);if(!c)continue;let l=!1;for(let u of c){if(u.name!==Ye)continue;l=!0;let f=null;u.response&&Object.keys(u.response).length===1&&"response"in u.response?f=JSON.parse(u.response.response):u.response&&(f=new Pe({hint:u.response.hint,payload:u.response.payload,confirmed:u.response.confirmed})),u.id&&f&&(r[u.id]=f)}if(l){i=s;break}}if(Object.keys(r).length!==0)for(let s=i-1;s>=0;s--){let a=o[s],c=P(a);if(!c)continue;let l={},u={};for(let g of c){if(!g.id||!(g.id in r))continue;let C=g.args;if(!C||!("originalFunctionCall"in C))continue;let h=C.originalFunctionCall;h.id&&(l[h.id]=r[g.id],u[h.id]=h)}if(Object.keys(l).length===0)continue;for(let g=o.length-1;g>i;g--){let C=o[g],h=K(C);if(h){for(let A of h)A.id&&A.id in l&&(delete l[A.id],delete u[A.id]);if(Object.keys(l).length===0)break}}if(Object.keys(l).length===0)continue;let f=await t.canonicalTools(new b(e)),d=Object.fromEntries(f.map(g=>[g.name,g])),p=await Xt({invocationContext:e,functionCalls:Object.values(u),toolsDict:d,beforeToolCallbacks:t.canonicalBeforeToolCallbacks,afterToolCallbacks:t.canonicalAfterToolCallbacks,filters:new Set(Object.keys(l)),toolConfirmationDict:l});p&&(yield p);return}}},Yi=new So;var Ro=class extends F{async*runAsync(e,t){let o=e.agent;if(!y(o))return;let r=await o.canonicalTools(new b(e));if(r.length===0)return;let i={};for(let c of r)i[c.name]=c;let s=new N({invocationContext:e}),a=await e.pluginManager.runBeforeToolSelection({callbackContext:s,tools:i});a!==void 0&&(t.allowedTools=Object.keys(a))}},Ji=new Ro;var un=(o=>(o.NONE="none",o.SSE="sse",o.BIDI="bidi",o))(un||{});function Xi(n={}){return{saveInputBlobsAsArtifacts:!1,supportCfc:!1,enableAffectiveDialog:!1,streamingMode:"none",maxLlmCalls:Lc(n.maxLlmCalls||500),pauseOnToolCalls:!1,...n}}function Lc(n){if(n>Number.MAX_SAFE_INTEGER)throw new Error(`maxLlmCalls should be less than ${Number.MAX_SAFE_INTEGER}.`);return n<=0&&m.warn("maxLlmCalls is less than or equal to 0. This will result in no enforcement on total number of llm calls that will be made for a run. This may not be ideal, as this could result in a never ending communication between the model and the agent in certain cases."),n}var Qi="adk_agent_name";async function Zi(n,e){return Tt(n)?[n]:await n.getTools(e)}var wo=Symbol.for("google.adk.llmAgent");function y(n){return typeof n=="object"&&n!==null&&wo in n&&n[wo]===!0}var es,ts,fn=class n extends(ts=$,es=wo,ts){constructor(t){var r,i,s,a,c,l,u,f,d;super(t);this[es]=!0;if(this.model=t.model,this.instruction=(r=t.instruction)!=null?r:"",this.globalInstruction=(i=t.globalInstruction)!=null?i:"",this.tools=(s=t.tools)!=null?s:[],this.generateContentConfig=t.generateContentConfig,this.disallowTransferToParent=(a=t.disallowTransferToParent)!=null?a:!1,this.disallowTransferToPeers=(c=t.disallowTransferToPeers)!=null?c:!1,this.includeContents=(l=t.includeContents)!=null?l:"default",this.inputSchema=Oe(t.inputSchema)?Xe(t.inputSchema):t.inputSchema,this.outputSchema=Oe(t.outputSchema)?Xe(t.outputSchema):t.outputSchema,this.outputKey=t.outputKey,this.beforeModelCallback=t.beforeModelCallback,this.afterModelCallback=t.afterModelCallback,this.beforeToolCallback=t.beforeToolCallback,this.afterToolCallback=t.afterToolCallback,this.codeExecutor=t.codeExecutor,this.requestProcessors=(u=t.requestProcessors)!=null?u:[Ii,Wi,Ki,Yi,cn,$i,Ji],!t.requestProcessors&&t.contextCompactors&&t.contextCompactors.length>0){let p=this.requestProcessors.indexOf(cn);p!==-1?this.requestProcessors.splice(p,0,new Qe(t.contextCompactors)):this.requestProcessors.push(new Qe(t.contextCompactors))}if(this.responseProcessors=(f=t.responseProcessors)!=null?f:[],this.disallowTransferToParent&&this.disallowTransferToPeers&&!((d=this.subAgents)!=null&&d.length)||this.requestProcessors.push(wi),t.generateContentConfig){if(t.generateContentConfig.tools)throw new Error("All tools must be set via LlmAgent.tools.");if(t.generateContentConfig.systemInstruction)throw new Error("System instruction must be set via LlmAgent.instruction.");if(t.generateContentConfig.responseSchema)throw new Error("Response schema must be set via LlmAgent.output_schema.")}else this.generateContentConfig={};this.outputSchema&&(!this.disallowTransferToParent||!this.disallowTransferToPeers)&&(m.warn(`Invalid config for agent ${this.name}: outputSchema cannot co-exist with agent transfer configurations. Setting disallowTransferToParent=true, disallowTransferToPeers=true`),this.disallowTransferToParent=!0,this.disallowTransferToPeers=!0)}get canonicalModel(){if(Yn(this.model))return this.model;if(typeof this.model=="string"&&this.model)return Le.newLlm(this.model);let t=this.parentAgent;for(;t;){if(y(t))return t.canonicalModel;t=t.parentAgent}throw new Error(`No model found for ${this.name}.`)}async canonicalInstruction(t){return typeof this.instruction=="string"?{instruction:this.instruction,requireStateInjection:!0}:{instruction:await this.instruction(t),requireStateInjection:!1}}async canonicalGlobalInstruction(t){return typeof this.globalInstruction=="string"?{instruction:this.globalInstruction,requireStateInjection:!0}:{instruction:await this.globalInstruction(t),requireStateInjection:!1}}async canonicalTools(t){let o=[];for(let r of this.tools){let i=await Zi(r,t);o.push(...i)}return o}static normalizeCallbackArray(t){return t?Array.isArray(t)?t:[t]:[]}get canonicalBeforeModelCallbacks(){return n.normalizeCallbackArray(this.beforeModelCallback)}get canonicalAfterModelCallbacks(){return n.normalizeCallbackArray(this.afterModelCallback)}get canonicalBeforeToolCallbacks(){return n.normalizeCallbackArray(this.beforeToolCallback)}get canonicalAfterToolCallbacks(){return n.normalizeCallbackArray(this.afterToolCallback)}maybeSaveOutputToState(t){var i,s;if(t.author!==this.name){m.debug(`Skipping output save for agent ${this.name}: event authored by ${t.author}`);return}if(!this.outputKey){m.debug(`Skipping output save for agent ${this.name}: outputKey is not set`);return}if(!Ce(t)){m.debug(`Skipping output save for agent ${this.name}: event is not a final response`);return}if(!((s=(i=t.content)==null?void 0:i.parts)!=null&&s.length)){m.debug(`Skipping output save for agent ${this.name}: event content is empty`);return}let o=t.content.parts.map(a=>a.text?a.text:"").join(""),r=o;if(this.outputSchema){if(!o.trim())return;try{r=JSON.parse(o)}catch(a){m.error(`Error parsing output for agent ${this.name}`,a)}}t.actions.stateDelta[this.outputKey]=r}async*runAsyncImpl(t){var o;for(;;){let r;for await(let i of this.runOneStepAsync(t)){if((o=t.abortSignal)!=null&&o.aborted)return;r=i,this.maybeSaveOutputToState(i),yield i}if(!r||Ce(r))break;if(r.partial){m.warn("The last event is partial, which is not expected.");break}}}async*runLiveImpl(t){var o;for await(let r of this.runLiveFlow(t)){if((o=t.abortSignal)!=null&&o.aborted)return;this.maybeSaveOutputToState(r),yield r}t.endInvocation}async*runLiveFlow(t){throw await Promise.resolve(),new Error("LlmAgent.runLiveFlow not implemented")}async*runOneStepAsync(t){var a,c,l;let o={contents:[],toolsDict:{},liveConnectConfig:{}};for(let u of this.requestProcessors)for await(let f of u.runAsync(t,o)){if((a=t.abortSignal)!=null&&a.aborted)return;yield f}for(let u of this.tools){let f=new N({invocationContext:t}),d=(await Zi(u,new b(t))).filter(p=>!o.allowedTools||o.allowedTools.includes(p.name));for(let p of d)if(await p.processLlmRequest({toolContext:f,llmRequest:o}),(c=t.abortSignal)!=null&&c.aborted)return}if(t.endInvocation||(l=t.abortSignal)!=null&&l.aborted)return;let r=x({invocationId:t.invocationId,author:this.name,branch:t.branch}),i=ie.startSpan("call_llm"),s=Mc.setSpan(Oc.active(),i);yield*be(s,this,async function*(){let u=async function*(){var f,d;for await(let p of this.callLlmAsync(t,o,r)){if((f=t.abortSignal)!=null&&f.aborted)return;for await(let g of this.postprocess(t,o,p,r)){if((d=t.abortSignal)!=null&&d.aborted)return;r.id=Ln(),r.timestamp=new Date().getTime(),yield g}}};yield*this.runAndHandleError(u.call(this),t,o,r)}),i.end()}async*postprocess(t,o,r,i){var f,d,p,g,C;for(let h of this.responseProcessors)for await(let A of h.runAsync(t,r)){if((f=t.abortSignal)!=null&&f.aborted)return;yield A}if(!r.content&&!r.errorCode&&!r.interrupted)return;let s=x({...i,...r});if(s.content){let h=P(s);h!=null&&h.length&&(ai(s),s.longRunningToolIds=Array.from(li(h,o.toolsDict)))}if(yield s,!((d=P(s))!=null&&d.length))return;if((p=t.runConfig)!=null&&p.pauseOnToolCalls){t.endInvocation=!0;return}let a=await ui({invocationContext:t,functionCallEvent:s,toolsDict:o.toolsDict,beforeToolCallbacks:this.canonicalBeforeToolCallbacks,afterToolCallbacks:this.canonicalAfterToolCallbacks});if(!a||(g=t.abortSignal)!=null&&g.aborted)return;let c=Xn(t,a);c&&(yield c);let l=Qn({invocationContext:t,functionCallEvent:s,functionResponseEvent:a});if(l){yield l,t.endInvocation=!0;return}yield a;let u=a.actions.transferToAgent;if(u){let h=this.getAgentByName(t,u);for await(let A of h.runAsync(t)){if((C=t.abortSignal)!=null&&C.aborted)return;yield A}}}getAgentByName(t,o){let i=t.agent.rootAgent.findAgent(o);if(!i)throw new Error(`Agent ${o} not found in the agent tree.`);return i}async*callLlmAsync(t,o,r){var a,c,l,u,f,d,p,g;let i=await this.handleBeforeModelCallback(t,o,r);if((a=t.abortSignal)!=null&&a.aborted)return;if(i){yield i;return}(c=o.config)!=null||(o.config={}),(u=(l=o.config).labels)!=null||(l.labels={}),o.config.labels[Qi]||(o.config.labels[Qi]=this.name);let s=this.canonicalModel;if((f=t.runConfig)!=null&&f.supportCfc)throw new Error("CFC is not yet supported in callLlmAsync");{t.incrementLlmCallCount();let C=s.generateContentAsync(o,((d=t.runConfig)==null?void 0:d.streamingMode)==="sse",t.abortSignal);for await(let h of C){if(Nr({invocationContext:t,eventId:r.id,llmRequest:o,llmResponse:h}),(p=t.abortSignal)!=null&&p.aborted)return;let A=await this.handleAfterModelCallback(t,h,r);if((g=t.abortSignal)!=null&&g.aborted)return;yield A!=null?A:h}}}async handleBeforeModelCallback(t,o,r){var a,c;let i=new N({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runBeforeModelCallback({callbackContext:i,llmRequest:o});if(!((a=t.abortSignal)!=null&&a.aborted)){if(s)return s;for(let l of this.canonicalBeforeModelCallbacks){let u=await l({context:i,request:o});if((c=t.abortSignal)!=null&&c.aborted)return;if(u)return u}}}async handleAfterModelCallback(t,o,r){var a;let i=new N({invocationContext:t,eventActions:r.actions}),s=await t.pluginManager.runAfterModelCallback({callbackContext:i,llmResponse:o});if(s)return s;for(let c of this.canonicalAfterModelCallbacks){let l=await c({context:i,response:o});if((a=t.abortSignal)!=null&&a.aborted)return;if(l)return l}}async*runAndHandleError(t,o,r,i){var s;try{for await(let a of t){if((s=o.abortSignal)!=null&&s.aborted)return;yield a}}catch(a){let c=new N({invocationContext:o,eventActions:i.actions});if(a instanceof Error){let l=await o.pluginManager.runOnModelErrorCallback({callbackContext:c,llmRequest:r,error:a});if(l)yield l;else{let u="UNKNOWN_ERROR",f=a.message;try{let d=JSON.parse(a.message);d!=null&&d.error&&(u=String(d.error.code||"UNKNOWN_ERROR"),f=d.error.message||f)}catch{}i.actions?yield x({invocationId:o.invocationId,author:this.name,errorCode:u,errorMessage:f}):yield{errorCode:u,errorMessage:f}}}else throw m.error("Unknown error during response generation",a),a}}};var Io=Symbol.for("google.adk.loopAgent");function Ze(n){return typeof n=="object"&&n!==null&&Io in n&&n[Io]===!0}var ns,os,bo=class extends(os=$,ns=Io,os){constructor(t){var o;super(t);this[ns]=!0;this.maxIterations=(o=t.maxIterations)!=null?o:Number.MAX_SAFE_INTEGER}async*runAsyncImpl(t){var r;let o=0;for(;o<this.maxIterations;){for(let i of this.subAgents){let s=!1;for await(let a of i.runAsync(t)){if((r=t.abortSignal)!=null&&r.aborted)return;yield a,a.actions.escalate&&(s=!0)}if(s)return}o++}}async*runLiveImpl(t){throw new Error("This is not supported yet for LoopAgent.")}};var ko=Symbol.for("google.adk.parallelAgent");function et(n){return typeof n=="object"&&n!==null&&ko in n&&n[ko]===!0}var rs,is,Po=class extends(is=$,rs=ko,is){constructor(){super(...arguments);this[rs]=!0}async*runAsyncImpl(t){var r;let o=this.subAgents.map(i=>i.runAsync(Nc(this,i,t)));for await(let i of Fc(o)){if((r=t.abortSignal)!=null&&r.aborted)return;yield i}}async*runLiveImpl(t){throw new Error("This is not supported yet for ParallelAgent.")}};function Nc(n,e,t){let o=new Y(t),r=`${n.name}.${e.name}`;return o.branch=o.branch?`${o.branch}.${r}`:r,o}async function*Fc(n){let e=new Map;for(let[t,o]of n.entries()){let r=o.next().then(i=>({result:i,index:t}));e.set(t,r)}for(;e.size>0;){let{result:t,index:o}=await Promise.race(e.values());if(t.done){e.delete(o);continue}yield t.value;let r=n[o].next().then(i=>({result:i,index:o}));e.set(o,r)}}var _o="task_completed",Lo=Symbol.for("google.adk.sequentialAgent");function tt(n){return typeof n=="object"&&n!==null&&Lo in n&&n[Lo]===!0}var ss,as,Oo=class extends(as=$,ss=Lo,as){constructor(){super(...arguments);this[ss]=!0}async*runAsyncImpl(t){for(let o of this.subAgents)for await(let r of o.runAsync(t))yield r}async*runLiveImpl(t){for(let o of this.subAgents)y(o)&&((await o.canonicalTools(new b(t))).some(s=>s.name===_o)||(o.tools.push(new me({name:_o,description:"Signals that the model has successfully completed the user's question or task.",execute:()=>"Task completion signaled."})),o.instruction+=`If you finished the user's request according to its description, call the ${_o} function to exit so the next agents can take over. When calling this function, do not generate any text other than the function call.`));for(let o of this.subAgents)for await(let r of o.runLive(t))yield r}};var Mo=Symbol.for("google.adk.baseToolset");function No(n){return typeof n=="object"&&n!==null&&Mo in n&&n[Mo]===!0}var cs;cs=Mo;var Se=class{constructor(e,t){this.toolFilter=e;this.prefix=t;this[cs]=!0}isToolSelected(e,t){return this.toolFilter?typeof this.toolFilter=="function"?this.toolFilter(e,t):Array.isArray(this.toolFilter)?this.toolFilter.includes(e.name):!1:!0}async processLlmRequest(e,t){}};async function dn(n){if(typeof n=="object")return n;let e=n;if(e.startsWith("http://")||e.startsWith("https://"))return await new Bc().resolve(e);try{let t=await ds.readFile(e,"utf-8");return JSON.parse(t)}catch(t){throw new Error(`Failed to read agent card from file ${e}: ${t.message}`)}}async function Fo(n,e){return{name:n.name,description:n.description||"",protocolVersion:"0.3.0",version:"1.0.0",skills:await Dc(n),url:e[0].url,preferredTransport:e[0].transport,capabilities:{extensions:[],stateTransitionHistory:!1,pushNotifications:!1,streaming:!0},defaultInputModes:["text"],defaultOutputModes:["text"],additionalInterfaces:e}}async function Dc(n){let[e,t]=await Promise.all([ps(n),Uc(n)]);return[...e,...t]}async function ps(n){return y(n)?$c(n):qc(n)}async function Uc(n){let e=n.subAgents,t=[];for(let o of e){let r=await ps(o);for(let i of r){let s={id:`${o.name}_${i.id}`,name:`${o.name}: ${i.name}`,description:i.description,tags:[`sub_agent:${o.name}`,...i.tags]};t.push(s)}}return t}async function $c(n){let e=[{id:n.name,name:"model",description:await Wc(n),tags:["llm"]}];if(n.tools&&n.tools.length>0){for(let t of n.tools)if(Tt(t))e.push(ls(n.name,t));else if(No(t)){let o=await t.getTools();for(let r of o)e.push(ls(n.name,r))}}return e}function ls(n,e){let t=e.description;return t||(t=`Tool: ${e.name}`),{id:`${n}-${e.name}`,name:e.name,description:t,tags:["llm","tools"]}}function qc(n){let e=[{id:n.name,name:Hc(n),description:Gc(n),tags:[fs(n)]}],t=n.subAgents;if(t.length>0){let o=t.map(r=>r.description||"No description");e.push({id:`${n.name}-sub-agents`,name:"sub-agents",description:`Orchestrates: ${o.join("; ")}`,tags:[fs(n),"orchestration"]})}return e}function Gc(n){let e=[];return n.description&&e.push(n.description),n.subAgents.length>0&&(Ze(n)?e.push(zc(n)):et(n)?e.push(Vc(n)):tt(n)&&e.push(jc(n))),e.length>0?e.join(" "):ms(n)}function jc(n){let e=n.subAgents,t=[];return e.forEach((o,r)=>{let i=o.description;i||(i=`execute the ${o.name} agent`),r===0?t.push(`First, this agent will ${i}.`):r===e.length-1?t.push(`Finally, this agent will ${i}.`):t.push(`Then, this agent will ${i}.`)}),t.join(" ")}function Vc(n){let e=n.subAgents,t=[];return e.forEach((o,r)=>{let i=o.description;i||(i=`execute the ${o.name} agent`),r===0?t.push(`This agent will ${i}`):r===e.length-1?t.push(`and ${i}`):t.push(`, ${i}`)}),`${t.join(" ")} simultaneously.`}function zc(n){let e=n.maxIterations,t="unlimited";typeof e=="number"&&e<Number.MAX_SAFE_INTEGER&&(t=e.toString());let o=n.subAgents,r=[];return o.forEach((i,s)=>{let a=i.description;a||(a=`execute the ${i.name} agent`),s===0?r.push(`This agent will ${a}`):s===o.length-1?r.push(`and ${a}`):r.push(`, ${a}`)}),`${r.join(" ")} in a loop (max ${t} iterations).`}async function Wc(n){let e=[];if(n.description&&e.push(n.description),n.instruction){let o;if(typeof n.instruction=="function"){let r=new b(new Y({agent:n}));try{o=await n.instruction(r)}catch(i){m.warn("Failed to resolve dynamic instruction for AgentCard",i),o=""}}else o=n.instruction;o&&e.push(us(o))}let t=n.rootAgent;if(y(t)&&t.globalInstruction){let o;if(typeof t.globalInstruction=="function"){let r=new b(new Y({agent:n}));try{o=await t.globalInstruction(r)}catch(i){m.warn("Failed to resolve dynamic global instruction for AgentCard",i),o=""}}else o=t.globalInstruction;o&&e.push(us(o))}return e.length>0?e.join(" "):ms(n)}function us(n){let e=[{original:"you were",target:"I was"},{original:"you are",target:"I am"},{original:"you're",target:"I am"},{original:"you've",target:"I have"},{original:"yours",target:"mine"},{original:"your",target:"my"},{original:"you",target:"I"}],t=n;for(let o of e){let r=new RegExp(`\\b${o.original}\\b`,"gi");t=t.replace(r,o.target)}return t}function ms(n){return Ze(n)?"A loop workflow agent":tt(n)?"A sequential workflow agent":et(n)?"A parallel workflow agent":y(n)?"An LLM-based agent":"A custom agent"}function fs(n){return Ze(n)?"loop_workflow":tt(n)?"sequential_workflow":et(n)?"parallel_workflow":y(n)?"llm_agent":"custom_agent"}function Hc(n){return y(n)?"model":Kc(n)?"workflow":"custom"}function Kc(n){return Ze(n)||tt(n)||et(n)}import{createModelContent as bt,createUserContent as Jc}from"@google/genai";function Bo(n,e,t){if(zn(n))return Xc(n,e,t);if(se(n))return tl(n,e,t);if(At(n))return Qc(n,e,t);if(Ae(n))return n.final?Zc(n,e,t):el(n,e,t)}function Xc(n,e,t,o){let r=ae(n.parts);return{...kt(o||n),invocationId:e,author:n.role==="user"?"user":t,content:n.role==="user"?Jc(r):bt(r),turnComplete:!0,partial:!1}}function Qc(n,e,t){var i;let o=((i=n.artifact)==null?void 0:i.parts)||[];if(o.length===0)return;let r=!!Vt(n)[E.PARTIAL]||n.append||!n.lastChunk;return{...kt(n),invocationId:e,author:t,content:bt(ae(o)),longRunningToolIds:pn(o),partial:r}}function Zc(n,e,t){var a;let o=((a=n.status.message)==null?void 0:a.parts)||[];if(o.length===0)return;let r=ae(o),i=zt(n),s=!i&&r.length>0;return{...kt(n),invocationId:e,author:t,errorMessage:i?Wn(n):void 0,content:s?bt(r):void 0,longRunningToolIds:pn(o),turnComplete:!0}}function el(n,e,t){let o=n.status.message;if(!o)return;let r=ae(o.parts);return{...kt(n),invocationId:e,author:t,content:bt(r),turnComplete:!1,partial:!0}}function tl(n,e,t){var a,c;let o=[],r=[];if(n.artifacts){for(let l of n.artifacts)if(((a=l.parts)==null?void 0:a.length)>0){let u=ae(l.parts);o.push(...u),r.push(...pn(l.parts))}}if((c=n.status)!=null&&c.message){let l=n.status.message.parts,u=ae(l);o.push(...u),r.push(...pn(l))}let i=Wr(n)||Wt(n),s=zt(n);if(!(o.length===0&&!i))return{...kt(n),invocationId:e,author:t,content:s?void 0:bt(o),errorMessage:s?Wn(n):void 0,longRunningToolIds:r,turnComplete:i}}function kt(n){let e=n.metadata||{};return x({branch:e[E.BRANCH],author:e[E.AUTHOR],partial:e[E.PARTIAL],errorCode:e[E.ERROR_CODE],errorMessage:e[E.ERROR_MESSAGE],citationMetadata:e[E.CITATION_METADATA],groundingMetadata:e[E.GROUNDING_METADATA],usageMetadata:e[E.USAGE_METADATA],customMetadata:e[E.CUSTOM_METADATA],actions:V({escalate:!!e[E.ESCALATE],transferToAgent:e[E.TRANSFER_TO_AGENT]})})}function pn(n){let e=[];for(let t of n)if(t.metadata&&t.metadata[E.IS_LONG_RUNNING]){let o=Hn(t);o.functionCall&&o.functionCall.id&&e.push(o.functionCall.id)}return e}var Do=class extends ${constructor(t){super(t);this.a2aConfig=t;this.isInitialized=!1;if(!t.agentCard&&!t.client)throw new Error("Either AgentCard or Client must be provided")}async init(){if(!this.isInitialized){if(this.a2aConfig.client&&(this.client=this.a2aConfig.client),this.a2aConfig.agentCard&&(this.card=await dn(this.a2aConfig.agentCard),!this.client)){let t=this.a2aConfig.clientFactory||new ol;this.client=await t.createFromAgentCard(this.card)}this.isInitialized=!0}}async*runAsyncImpl(t){var o,r;await this.init();try{let i=t.session.events;if(i.length===0)throw new Error("No events in session to send");let s=ti(t.session,i.length-1),a,c,l;if(s){let g=s.response;a=de(((o=g.content)==null?void 0:o.parts)||[],g.longRunningToolIds),c=s.taskId,l=s.contextId}else{let g=ni(t,t.session);a=g.parts,l=g.contextId}let u={kind:"message",messageId:I(),role:"user",parts:a,metadata:Ee({appName:t.session.appName,userId:t.session.userId,sessionId:t.session.id})};c&&(u.taskId=c),l&&(u.contextId=l);let f={message:u,configuration:this.a2aConfig.messageSendConfig},d=new Kt(f);if(this.a2aConfig.beforeRequestCallbacks)for(let g of this.a2aConfig.beforeRequestCallbacks)await g(t,f);if(this.card?((r=this.card.capabilities)==null?void 0:r.streaming)!==!1:!0)for await(let g of this.client.sendMessageStream(f)){if(this.a2aConfig.afterRequestCallbacks)for(let A of this.a2aConfig.afterRequestCallbacks)await A(t,g);let C=Bo(g,t.invocationId,this.name);if(!C)continue;d.updateCustomMetadata(C,g);let h=d.aggregatePartial(t,g,C);for(let A of h)yield A}else{let g=await this.client.sendMessage(f);if(this.a2aConfig.afterRequestCallbacks)for(let h of this.a2aConfig.afterRequestCallbacks)await h(t,g);let C=Bo(g,t.invocationId,this.name);C&&(d.updateCustomMetadata(C,g),yield C)}}catch(i){let s=i;m.error(`A2ARemoteAgent ${this.name} failed:`,s),yield x({author:this.name,invocationId:t.invocationId,errorMessage:s.message,turnComplete:!0})}}runLiveImpl(t){throw new Error("Live mode is not supported in A2ARemoteAgent yet.")}};import{createPartFromText as rl}from"@google/genai";import{context as il,trace as sl}from"@opentelemetry/api";var Pt=class{constructor(e){this.plugins=new Set;if(e)for(let t of e)this.registerPlugin(t)}registerPlugin(e){if(this.plugins.has(e))throw new Error(`Plugin '${e.name}' already registered.`);if(Array.from(this.plugins).some(t=>t.name===e.name))throw new Error(`Plugin with name '${e.name}' already registered.`);this.plugins.add(e),m.info(`Plugin '${e.name}' registered.`)}getPlugin(e){return Array.from(this.plugins).find(t=>t.name===e)}async runCallbacks(e,t,o){for(let r of e)try{let i=await t(r);if(i!==void 0)return m.debug(`Plugin '${r.name}' returned a value for callback '${o}', exiting early.`),i}catch(i){let s=`Error in plugin '${r.name}' during '${o}' callback: ${i}`;throw m.error(s),new Error(s)}}async runOnUserMessageCallback({userMessage:e,invocationContext:t}){return await this.runCallbacks(this.plugins,o=>o.onUserMessageCallback({userMessage:e,invocationContext:t}),"onUserMessageCallback")}async runBeforeRunCallback({invocationContext:e}){return await this.runCallbacks(this.plugins,t=>t.beforeRunCallback({invocationContext:e}),"beforeRunCallback")}async runAfterRunCallback({invocationContext:e}){await this.runCallbacks(this.plugins,t=>t.afterRunCallback({invocationContext:e}),"afterRunCallback")}async runOnEventCallback({invocationContext:e,event:t}){return await this.runCallbacks(this.plugins,o=>o.onEventCallback({invocationContext:e,event:t}),"onEventCallback")}async runBeforeAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,o=>o.beforeAgentCallback({agent:e,callbackContext:t}),"beforeAgentCallback")}async runAfterAgentCallback({agent:e,callbackContext:t}){return await this.runCallbacks(this.plugins,o=>o.afterAgentCallback({agent:e,callbackContext:t}),"afterAgentCallback")}async runBeforeToolSelection({callbackContext:e,tools:t}){return await this.runCallbacks(this.plugins,o=>o.beforeToolSelection({callbackContext:e,tools:t}),"beforeToolSelection")}async runBeforeContextCompaction({invocationContext:e,trigger:t}){await this.runCallbacks(this.plugins,o=>o.beforeContextCompaction({invocationContext:e,trigger:t}),"beforeContextCompaction")}async runAfterContextCompaction({invocationContext:e,trigger:t}){await this.runCallbacks(this.plugins,o=>o.afterContextCompaction({invocationContext:e,trigger:t}),"afterContextCompaction")}async runBeforeToolCallback({tool:e,toolArgs:t,toolContext:o}){return await this.runCallbacks(this.plugins,r=>r.beforeToolCallback({tool:e,toolArgs:t,toolContext:o}),"beforeToolCallback")}async runAfterToolCallback({tool:e,toolArgs:t,toolContext:o,result:r}){return await this.runCallbacks(this.plugins,i=>i.afterToolCallback({tool:e,toolArgs:t,toolContext:o,result:r}),"afterToolCallback")}async runOnModelErrorCallback({callbackContext:e,llmRequest:t,error:o}){return await this.runCallbacks(this.plugins,r=>r.onModelErrorCallback({callbackContext:e,llmRequest:t,error:o}),"onModelErrorCallback")}async runBeforeModelCallback({callbackContext:e,llmRequest:t}){return await this.runCallbacks(this.plugins,o=>o.beforeModelCallback({callbackContext:e,llmRequest:t}),"beforeModelCallback")}async runAfterModelCallback({callbackContext:e,llmResponse:t}){return await this.runCallbacks(this.plugins,o=>o.afterModelCallback({callbackContext:e,llmResponse:t}),"afterModelCallback")}async runOnToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}){return await this.runCallbacks(this.plugins,i=>i.onToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}),"onToolErrorCallback")}};var Uo=Symbol.for("google.adk.runner");function $o(n){return typeof n=="object"&&n!==null&&Uo in n&&n[Uo]===!0}var gs;gs=Uo;var ge=class{constructor(e){this[gs]=!0;var t;this.appName=e.appName,this.agent=e.agent,this.pluginManager=new Pt((t=e.plugins)!=null?t:[]),this.artifactService=e.artifactService,this.sessionService=e.sessionService,this.memoryService=e.memoryService,this.credentialService=e.credentialService}async*runEphemeral(e){let o=(await this.sessionService.createSession({appName:this.appName,userId:e.userId})).id;try{yield*this.runAsync({userId:e.userId,sessionId:o,newMessage:e.newMessage,stateDelta:e.stateDelta,runConfig:e.runConfig})}finally{await this.sessionService.deleteSession({appName:this.appName,userId:e.userId,sessionId:o})}}async*runAsync(e){let{userId:t,sessionId:o,stateDelta:r}=e,i=Xi(e.runConfig),s=e.newMessage,a=ie.startSpan("invocation"),c=sl.setSpan(il.active(),a);try{yield*be(c,this,async function*(){var d,p,g,C,h,A,j,w,H,lt;let l=await this.sessionService.getSession({appName:this.appName,userId:t,sessionId:o});if((d=e.abortSignal)!=null&&d.aborted)return;if(!l)throw this.appName?new Error(`Session not found: ${o}`):new Error("Session lookup failed: appName must be provided in runner constructor");if(i.supportCfc&&y(this.agent)){let ut=this.agent.canonicalModel.model;if(!St(ut))throw new Error(`CFC is not supported for model: ${ut} in agent: ${this.agent.name}`);wt(this.agent.codeExecutor)||(this.agent.codeExecutor=new Rt)}let u=new Y({artifactService:this.artifactService,sessionService:this.sessionService,memoryService:this.memoryService,credentialService:this.credentialService,invocationId:qr(),agent:this.agent,session:l,userContent:s,runConfig:i,pluginManager:this.pluginManager,abortSignal:e.abortSignal}),f=await this.pluginManager.runOnUserMessageCallback({userMessage:s,invocationContext:u});if(!((p=e.abortSignal)!=null&&p.aborted)){if(f&&(s=f),s){if(!((g=s.parts)!=null&&g.length))throw new Error("No parts in the newMessage.");if(i.saveInputBlobsAsArtifacts&&(await this.saveArtifacts(u.invocationId,l.userId,l.id,s),(C=e.abortSignal)!=null&&C.aborted)||(await this.sessionService.appendEvent({session:l,event:x({invocationId:u.invocationId,author:"user",actions:r?V({stateDelta:r}):void 0,content:s})}),(h=e.abortSignal)!=null&&h.aborted))return}if(u.agent=this.determineAgentForResumption(l,this.agent),s){let ut=await this.pluginManager.runBeforeRunCallback({invocationContext:u});if((A=e.abortSignal)!=null&&A.aborted)return;if(ut){let Ie=x({invocationId:u.invocationId,author:"model",content:ut});if(await this.sessionService.appendEvent({session:l,event:Ie}),(j=e.abortSignal)!=null&&j.aborted)return;yield Ie}else{for await(let Ie of u.agent.runAsync(u)){if((w=e.abortSignal)!=null&&w.aborted)return;Ie.partial||await this.sessionService.appendEvent({session:l,event:Ie});let yr=await this.pluginManager.runOnEventCallback({invocationContext:u,event:Ie});if((H=e.abortSignal)!=null&&H.aborted)return;yr?yield yr:yield Ie}if(await this.pluginManager.runAfterRunCallback({invocationContext:u}),(lt=e.abortSignal)!=null&<.aborted)return}}}})}finally{a.end()}}async saveArtifacts(e,t,o,r){var i;if(!(!this.artifactService||!((i=r.parts)!=null&&i.length)))for(let s=0;s<r.parts.length;s++){let a=r.parts[s];if(!a.inlineData)continue;let c=`artifact_${e}_${s}`;await this.artifactService.saveArtifact({appName:this.appName,userId:t,sessionId:o,filename:c,artifact:a}),r.parts[s]=rl(`Uploaded file: ${c}. It is saved into artifacts`)}}determineAgentForResumption(e,t){let o=al(e.events);if(o&&o.author)return t.findAgent(o.author)||t;for(let r=e.events.length-1;r>=0;r--){m.info("event:",JSON.stringify(e.events[r]));let i=e.events[r];if(i.author==="user"||!i.author)continue;if(i.author===t.name)return t;let s=t.findSubAgent(i.author);if(!s){m.warn(`Event from an unknown agent: ${i.author}, event id: ${i.id}`);continue}if(this.isRoutableLlmAgent(s))return s}return t}isRoutableLlmAgent(e){let t=e;for(;t;){if(!y(t)||t.disallowTransferToParent)return!1;t=t.parentAgent}return!0}};function al(n){var o,r,i,s;if(!n.length)return null;let t=(s=(i=(r=(o=n[n.length-1].content)==null?void 0:o.parts)==null?void 0:r.find(a=>a.functionResponse))==null?void 0:i.functionResponse)==null?void 0:s.id;if(!t)return null;for(let a=n.length-2;a>=0;a--){let c=n[a],l=P(c);if(l){for(let u of l)if(u.id===t)return c}}return null}function hs(n,e){var r,i;let t=V();for(let s of n){if(s.errorCode||s.errorMessage)return Ht({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,error:new Error(s.errorMessage||s.errorCode),metadata:{...yt(s,e),...xt(t)}});t.escalate=t.escalate||((r=s.actions)==null?void 0:r.escalate),(i=s.actions)!=null&&i.transferToAgent&&(t.transferToAgent=s.actions.transferToAgent)}let o=cl(n,e);return o?{...o,metadata:{...o.metadata,...xt(t)}}:Yr({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,metadata:{...Ee(e),...xt(t)}})}function cl(n,e){var r,i;let t=[],o=new Set;for(let s of n)if((i=(r=s.content)==null?void 0:r.parts)!=null&&i.length)for(let a of s.content.parts){let c=ll(a,s.longRunningToolIds,t);!c||o.has(c)||(t.push(a),o.add(c))}if(t.length>0)return Xr({taskId:e.requestContext.taskId,contextId:e.requestContext.contextId,parts:de(t,[...o]),metadata:Ee(e)})}function ll(n,e=[],t=[]){var i,s,a;let o=(i=n.functionCall)==null?void 0:i.id,r=(s=n.functionResponse)==null?void 0:s.id;if(!(!o&&!r)){if(o&&e.includes(o))return o;if(r&&e.includes(r))return r;for(let c of t)if(((a=c.functionCall)==null?void 0:a.id)===r)return r}}function Cs(n,e){var r;if(!n||!Wt(n)||!n.status.message)return;let t=n.status.message,o=ae(t.parts);for(let i of o){let s=(r=i.functionCall)==null?void 0:r.id;if(!s)continue;if(!((e==null?void 0:e.parts)||[]).some(c=>{var l;return((l=c.functionResponse)==null?void 0:l.id)===s}))return Qr({taskId:n.id,contextId:n.contextId,parts:[...t.parts.filter(c=>{var l;return!((l=c.metadata)!=null&&l.validation_error)}),{kind:"text",text:`No input provided for function call id ${s}`,metadata:{validation_error:!0}}]})}}function vs({session:n,userContent:e,requestContext:t}){return{userId:n.userId,sessionId:n.id,appName:n.appName,readonlyState:n.state,events:n.events,userContent:e,requestContext:t}}var _t=class{constructor(e){this.config=e;this.agentPartialArtifactIdsMap={}}async execute(e,t){var u,f;let o=e.userMessage;if(!o)throw new Error("message not provided");let r=`A2A_USER_${e.contextId}`,i=e.contextId,s=ei(o),a=await As(this.config.runner),c=await ul(r,i,a.sessionService,a.appName),l=vs({session:c,userContent:s,requestContext:e});try{if(this.config.beforeExecuteCallback&&await this.config.beforeExecuteCallback(e),e.task){let p=Cs(e.task,s);if(p){await this.publishFinalTaskStatus({executorContext:l,eventBus:t,event:p});return}}e.task||t.publish(Hr({taskId:e.taskId,contextId:e.contextId,message:o})),t.publish(Kr({taskId:e.taskId,contextId:e.contextId}));let d=[];for await(let p of a.runAsync({userId:r,sessionId:i,newMessage:s,runConfig:this.config.runConfig})){d.push(p);let g=this.convertAdkEventToA2AEvent(p,l);g&&(await((f=(u=this.config).afterEventCallback)==null?void 0:f.call(u,l,p,g)),t.publish(g))}await this.publishFinalTaskStatus({executorContext:l,eventBus:t,event:hs(d,l)})}catch(d){let p=d;await this.publishFinalTaskStatus({executorContext:l,eventBus:t,error:p,event:Ht({taskId:e.taskId,contextId:e.contextId,error:new Error(`Agent run failed: ${p.message}`),metadata:Ee(l)})})}}async cancelTask(e){throw new Error("Task cancellation is not supported yet.")}convertAdkEventToA2AEvent(e,t){var s;let o=de((s=e.content)==null?void 0:s.parts,e.longRunningToolIds);if(o.length===0)return;let r=this.agentPartialArtifactIdsMap[e.author]||I(),i=Jr({taskId:t.requestContext.taskId,contextId:t.requestContext.contextId,artifactId:r,parts:o,metadata:yt(e,t),append:e.partial,lastChunk:!e.partial});return e.partial?this.agentPartialArtifactIdsMap[e.author]=r:delete this.agentPartialArtifactIdsMap[e.author],i}async publishFinalTaskStatus({executorContext:e,eventBus:t,event:o,error:r}){var i,s;try{await((s=(i=this.config).afterExecuteCallback)==null?void 0:s.call(i,e,o,r))}catch(a){m.error("Error in afterExecuteCallback:",a)}t.publish(o)}};async function ul(n,e,t,o){let r=await t.getSession({appName:o,userId:n,sessionId:e});return r||t.createSession({appName:o,userId:n,sessionId:e})}async function As(n){if(typeof n=="function"){let e=await n();return As(e)}return $o(n)?n:new ge(n)}import{AGENT_CARD_PATH as dl}from"@a2a-js/sdk";import{DefaultRequestHandler as pl,InMemoryTaskStore as ml}from"@a2a-js/sdk/server";import{agentCardHandler as gl,jsonRpcHandler as hl,restHandler as Cl,UserBuilder as xs}from"@a2a-js/sdk/server/express";import Go from"express";import{cloneDeep as Es}from"lodash-es";import{cloneDeep as fl}from"lodash-es";var De=class{async getOrCreateSession(e){if(!e.sessionId)return this.createSession(e);let t=await this.getSession({appName:e.appName,userId:e.userId,sessionId:e.sessionId});return t||this.createSession(e)}async appendEvent({session:e,event:t}){return t.partial||(t=qo(t),this.updateSessionState({session:e,event:t}),e.events.push(t)),t}updateSessionState({session:e,event:t}){if(!(!t.actions||!t.actions.stateDelta))for(let[o,r]of Object.entries(t.actions.stateDelta))o.startsWith(T.TEMP_PREFIX)||(e.state[o]=r)}};function qo(n){if(!n.actions||!n.actions.stateDelta)return n;let e=n.actions.stateDelta,t={};for(let[o,r]of Object.entries(e))o.startsWith(T.TEMP_PREFIX)||(t[o]=r);return n.actions.stateDelta=t,n}function he(n={},e={},t={}){let o=fl(t);for(let[r,i]of Object.entries(n))o[T.APP_PREFIX+r]=i;for(let[r,i]of Object.entries(e))o[T.USER_PREFIX+r]=i;return o}function Re(n){return{id:n.id,appName:n.appName,userId:n.userId||"",state:n.state||{},events:n.events||[],lastUpdateTime:n.lastUpdateTime||0}}function ys(n){return n==="memory://"}var te=class extends De{constructor(){super(...arguments);this.sessions={};this.userState={};this.appState={}}async createSession({appName:t,userId:o,state:r,sessionId:i}){var c;let s=Re({id:i||I(),appName:t,userId:o,state:r,events:[],lastUpdateTime:Date.now()});this.sessions[t]||(this.sessions[t]={}),this.sessions[t][o]||(this.sessions[t][o]={}),this.sessions[t][o][s.id]=s;let a=Es(s);return a.state=he(this.appState[t],(c=this.userState[t])==null?void 0:c[o],a.state),a}async getSession({appName:t,userId:o,sessionId:r,config:i}){var c;if(!this.sessions[t]||!this.sessions[t][o]||!this.sessions[t][o][r])return Promise.resolve(void 0);let s=this.sessions[t][o][r],a=Es(s);if(i&&(i.numRecentEvents&&(a.events=a.events.slice(-i.numRecentEvents)),i.afterTimestamp)){let l=a.events.length-1;for(;l>=0&&!(a.events[l].timestamp<i.afterTimestamp);)l--;l>=0&&(a.events=a.events.slice(l+1))}return a.state=he(this.appState[t],(c=this.userState[t])==null?void 0:c[o],a.state),a}listSessions({appName:t,userId:o}){if(!this.sessions[t]||!this.sessions[t][o])return Promise.resolve({sessions:[]});let r=[];for(let i of Object.values(this.sessions[t][o]))r.push(Re({id:i.id,appName:i.appName,userId:i.userId,state:{},events:[],lastUpdateTime:i.lastUpdateTime}));return Promise.resolve({sessions:r})}async deleteSession({appName:t,userId:o,sessionId:r}){await this.getSession({appName:t,userId:o,sessionId:r})&&delete this.sessions[t][o][r]}async appendEvent({session:t,event:o}){await super.appendEvent({session:t,event:o}),t.lastUpdateTime=o.timestamp;let r=t.appName,i=t.userId,s=t.id,a=l=>{m.warn(`Failed to append event to session ${s}: ${l}`)};if(!this.sessions[r])return a(`appName ${r} not in sessions`),o;if(!this.sessions[r][i])return a(`userId ${i} not in sessions[appName]`),o;if(!this.sessions[r][i][s])return a(`sessionId ${s} not in sessions[appName][userId]`),o;if(o.actions&&o.actions.stateDelta)for(let l of Object.keys(o.actions.stateDelta))l.startsWith(T.APP_PREFIX)&&(this.appState[r]=this.appState[r]||{},this.appState[r][l.replace(T.APP_PREFIX,"")]=o.actions.stateDelta[l]),l.startsWith(T.USER_PREFIX)&&(this.userState[r]=this.userState[r]||{},this.userState[r][i]=this.userState[r][i]||{},this.userState[r][i][l.replace(T.USER_PREFIX,"")]=o.actions.stateDelta[l]);let c=this.sessions[r][i][s];return await super.appendEvent({session:c,event:o}),c.lastUpdateTime=o.timestamp,o}};async function vl(n,e={}){var f,d,p,g;let t=(f=e.host)!=null?f:"localhost",o=(d=e.port)!=null?d:8e3,r=(p=e.protocol)!=null?p:"http",i=e.basePath||"",s=`${r}://${t}:${o}${i}`,a=e.agentCard?await dn(e.agentCard):await Fo(n,[{url:`${s}/jsonrpc`,transport:"JSONRPC"},{url:`${s}/rest`,transport:"HTTP+JSON"}]),c=new _t({runner:e.runner||{agent:n,appName:n.name,sessionService:e.sessionService||new te,memoryService:e.memoryService,artifactService:e.artifactService},runConfig:{streamingMode:"sse"}}),l=new pl(a,new ml,c),u=(g=e.app)!=null?g:Go();return e.app||(u.use(Go.urlencoded({limit:"50mb",extended:!0})),u.use(Go.json({limit:"50mb"}))),u.use(`${i}/${dl}`,gl({agentCardProvider:l})),u.use(`${i}/rest`,Cl({requestHandler:l,userBuilder:xs.noAuthentication})),u.use(`${i}/jsonrpc`,hl({requestHandler:l,userBuilder:xs.noAuthentication})),u}import*as L from"fs/promises";import*as S from"path";import{fileURLToPath as Rs,pathToFileURL as Al}from"url";var gn="user:",Lt=class{constructor(e){try{let t=e.startsWith("file://")?Rs(e):e;this.rootDir=S.resolve(t)}catch(t){throw new Error(`Invalid root directory: ${e}`,{cause:t})}}async saveArtifact({userId:e,sessionId:t,filename:o,artifact:r,customMetadata:i}){if(!r.inlineData&&!r.text)throw new Error("Artifact must have either inlineData or text content.");let s=Ue(this.rootDir,e,t,o);await L.mkdir(s,{recursive:!0});let a=await nt(s),c=a.length>0?a[a.length-1]+1:0,l=$e(s),u=S.join(l,c.toString());await L.mkdir(u,{recursive:!0});let f=S.basename(s),d=S.join(u,f),p;if(r.inlineData){let h=r.inlineData.data||"";await L.writeFile(d,Buffer.from(h,"base64")),p=r.inlineData.mimeType||"application/octet-stream"}else r.text!==void 0&&await L.writeFile(d,r.text,"utf-8");let g=await xl(this.rootDir,e,t,o,c),C={fileName:o,mimeType:p,version:c,canonicalUri:g,customMetadata:i};return await Tl(S.join(u,"metadata.json"),C),c}async loadArtifact({userId:e,sessionId:t,filename:o,version:r}){try{let i=Ue(this.rootDir,e,t,o);try{await L.access(i)}catch(p){m.warn(`[FileArtifactService] loadArtifact: Artifact ${o} not found`,p);return}let s=await nt(i);if(s.length===0)return;let a;if(r===void 0)a=s[s.length-1];else{if(!s.includes(r)){m.warn(`[FileArtifactService] loadArtifact: Artifact ${o} version ${r} not found`);return}a=r}let c=S.join($e(i),a.toString()),l=S.join(c,"metadata.json"),u=await mn(l),f=S.basename(i),d=S.join(c,f);if(u.canonicalUri){let p=Sl(u.canonicalUri);if(p)try{await L.access(p),d=p}catch{m.warn(`[FileArtifactService] loadArtifact: Artifact ${o} missing at ${p}, falling back to content path ${d}`)}}if(u.mimeType)try{let p=await L.readFile(d);return{inlineData:{mimeType:u.mimeType,data:p.toString("base64")}}}catch{m.warn(`[FileArtifactService] loadArtifact: Artifact ${o} missing at ${d}`);return}try{return{text:await L.readFile(d,"utf-8")}}catch{m.warn(`[FileArtifactService] loadArtifact: Text artifact ${o} missing at ${d}`);return}}catch(i){m.error(`[FileArtifactService] loadArtifact: Error loading artifact ${o}`,i);return}}async listArtifactKeys({userId:e,sessionId:t}){let o=new Set,r=bs(this.rootDir,e),i=Ps(r,t);for await(let a of jo(i)){let c=await Ts(a);if(c!=null&&c.fileName)o.add(c.fileName);else{let l=S.relative(i,a);o.add(Ss(l))}}let s=ks(r);for await(let a of jo(s)){let c=await Ts(a);if(c!=null&&c.fileName)o.add(c.fileName);else{let l=S.relative(s,a);o.add(`${gn}${Ss(l)}`)}}return Array.from(o).sort()}async deleteArtifact({userId:e,sessionId:t,filename:o}){try{let r=Ue(this.rootDir,e,t,o);await L.rm(r,{recursive:!0,force:!0})}catch(r){m.warn(`[FileArtifactService] deleteArtifact: Failed to delete artifact ${o}`,r)}}async listVersions({userId:e,sessionId:t,filename:o}){try{let r=Ue(this.rootDir,e,t,o);return await nt(r)}catch(r){return m.warn(`[FileArtifactService] listVersions: Failed to list versions for artifact ${o}`,r),[]}}async listArtifactVersions({userId:e,sessionId:t,filename:o}){try{let r=Ue(this.rootDir,e,t,o),i=await nt(r),s=[];for(let a of i){let c=S.join($e(r),a.toString(),"metadata.json");try{let l=await mn(c);s.push(l)}catch(l){m.warn(`[FileArtifactService] listArtifactVersions: Failed to read artifact version ${a} at ${r}`,l)}}return s}catch(r){return m.warn(`[FileArtifactService] listArtifactVersions: Failed to list artifact versions for userId: ${e} sessionId: ${t} filename: ${o}`,r),[]}}async getArtifactVersion({userId:e,sessionId:t,filename:o,version:r}){try{let i=Ue(this.rootDir,e,t,o),s=await nt(i);if(s.length===0)return;let a;if(r===void 0)a=s[s.length-1];else{if(!s.includes(r))return;a=r}let c=S.join($e(i),a.toString(),"metadata.json");return await mn(c)}catch(i){m.warn(`[FileArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${e} sessionId: ${t} filename: ${o} version: ${r}`,i);return}}},El=/^[a-zA-Z0-9_@-][a-zA-Z0-9_.@-]{0,255}$/;function ws(n,e){if(!n||!El.test(n))throw new Error(`[FileArtifactService] Invalid ${e}: value contains disallowed characters.`)}function Is(n,e,t){let o=S.resolve(e),r=S.resolve(n);if(!r.startsWith(o+S.sep)&&r!==o)throw new Error(`[FileArtifactService] ${t} escapes storage root. Resolved: ${r}, Root: ${o}`)}function bs(n,e){ws(e,"userId");let t=S.join(n,"users",e);return Is(t,n,"userRoot"),t}function yl(n,e){return!n||e.startsWith(gn)}function ks(n){return S.join(n,"artifacts")}function Ps(n,e){ws(e,"sessionId");let t=S.join(n,"sessions",e,"artifacts");return Is(t,n,"sessionArtifactsDir"),t}function $e(n){return S.join(n,"versions")}function Ue(n,e,t,o){let r=bs(n,e),i;if(yl(t,o))i=ks(r);else{if(!t)throw new Error("Session ID must be provided for session-scoped artifacts.");i=Ps(r,t)}let s=o;if(s.startsWith(gn)&&(s=s.substring(gn.length)),s=s.trim(),S.isAbsolute(s))throw new Error(`Absolute artifact filename ${o} is not permitted.`);let a=S.resolve(i,s),c=S.relative(i,a);if(c.startsWith("..")||S.isAbsolute(c))throw new Error(`Artifact filename ${o} escapes storage directory.`);return c===""||c==="."?S.join(i,"artifact"):a}async function nt(n){let e=$e(n);try{return(await L.readdir(e,{withFileTypes:!0})).filter(r=>r.isDirectory()).map(r=>parseInt(r.name,10)).filter(r=>!isNaN(r)).sort((r,i)=>r-i)}catch(t){return m.warn(`[FileArtifactService] getArtifactVersionsFromDir: Failed to list artifact versions from ${n}`,t),[]}}async function xl(n,e,t,o,r){let i=await Ue(n,e,t,o),s=S.basename(i),a=$e(i),c=S.join(a,r.toString(),s);return Al(c).toString()}async function Tl(n,e){await L.writeFile(n,JSON.stringify(e,null,2),"utf-8")}async function mn(n){let e=await L.readFile(n,"utf-8");return JSON.parse(e)}async function Ts(n){let e=await nt(n);if(e.length===0)return;let t=e[e.length-1],o=S.join($e(n),t.toString(),"metadata.json");try{return await mn(o)}catch(r){m.warn(`[FileArtifactService] getLatestMetadata: Failed to read metadata from ${o}`,r);return}}async function*jo(n){try{let e=await L.readdir(n,{withFileTypes:!0});if(e.some(o=>o.isDirectory()&&o.name==="versions")){yield n;return}for(let o of e)if(o.isDirectory()){let r=S.join(n,o.name);for await(let i of jo(r))yield i}}catch{}}function Sl(n){try{return Rs(n)}catch(e){m.warn(`[FileArtifactService] fileUriToPath: Failed to convert file URI to path: ${n}`,e);return}}function Ss(n){return n.split(S.sep).join("/")}import{Storage as Rl}from"@google-cloud/storage";import{createPartFromBase64 as wl,createPartFromText as Il}from"@google/genai";var Mt=class{constructor(e){this.bucket=new Rl().bucket(e)}async saveArtifact(e){if(!e.artifact.inlineData&&!e.artifact.text)throw new Error("Artifact must have either inlineData or text content.");let t=await this.listVersions(e),o=t.length>0?Math.max(...t)+1:0,r=this.bucket.file(Ot({...e,version:o})),i=e.customMetadata||{};return e.artifact.inlineData?(await r.save(Buffer.from(e.artifact.inlineData.data||"","base64"),{contentType:e.artifact.inlineData.mimeType,metadata:i}),o):(await r.save(e.artifact.text,{contentType:"text/plain",metadata:i}),o)}async loadArtifact(e){try{let t=e.version;if(t===void 0){let s=await this.listVersions(e);if(s.length===0)return;t=Math.max(...s)}let o=this.bucket.file(Ot({...e,version:t})),[[r],[i]]=await Promise.all([o.getMetadata(),o.download()]);return r.contentType==="text/plain"?Il(i.toString("utf-8")):wl(i.toString("base64"),r.contentType)}catch(t){m.warn(`[GcsArtifactService] loadArtifact: Failed to load artifact ${e.filename}`,t);return}}async listArtifactKeys(e){let t=`${e.appName}/${e.userId}/${e.sessionId}/`,o=`${e.appName}/${e.userId}/user/`,[[r],[i]]=await Promise.all([this.bucket.getFiles({prefix:t}),this.bucket.getFiles({prefix:o})]);return[..._s(r,t),..._s(i,o,"user:")].sort((s,a)=>s.localeCompare(a))}async deleteArtifact(e){let t=await this.listVersions(e);await Promise.all(t.map(o=>this.bucket.file(Ot({...e,version:o})).delete()))}async listVersions(e){let o=Ot(e)+"/",[r]=await this.bucket.getFiles({prefix:o}),i=[];for(let s of r){let a=s.name.split("/").pop(),c=parseInt(a,10);isNaN(c)||i.push(c)}return i.sort((s,a)=>s-a)}async listArtifactVersions(e){let t=await this.listVersions(e),o=[];for(let r of t){let i=await this.getArtifactVersion({...e,version:r});i&&o.push(i)}return o}async getArtifactVersion(e){try{let t=e.version;if(t===void 0){let i=await this.listVersions(e);if(i.length===0)return;t=Math.max(...i)}let o=this.bucket.file(Ot({...e,version:t})),[r]=await o.getMetadata();return{version:t,mimeType:r.contentType,customMetadata:r.metadata,canonicalUri:o.publicUrl()}}catch(t){m.warn(`[GcsArtifactService] getArtifactVersion: Failed to get artifact version for userId: ${e.userId} sessionId: ${e.sessionId} filename: ${e.filename} version: ${e.version}`,t);return}}};function Ot({appName:n,userId:e,sessionId:t,filename:o,version:r}){let i=o.startsWith("user:"),s=i?o.substring(5):o,a=i?`${n}/${e}/user/${s}`:`${n}/${e}/${t}/${s}`;return r!==void 0?`${a}/${r}`:a}function _s(n,e,t=""){let o=new Set;for(let r of n){if(!r.name.startsWith(e))continue;let i=r.name.substring(e.length),s=bl(i);o.add(`${t}${s}`)}return[...o]}function bl(n){let e=n.split("/");return e.length<2?n:e.slice(0,-1).join("/")}function Ls(n){return n==="memory://"}var qe=class{constructor(){this.artifacts={}}saveArtifact({appName:e,userId:t,sessionId:o,filename:r,artifact:i,customMetadata:s}){if(!i.inlineData&&!i.text)return Promise.reject(new Error("Artifact must have either inlineData or text content."));let a=ot(e,t,o,r);this.artifacts[a]||(this.artifacts[a]=[]);let c=this.artifacts[a].length,l={version:c,customMetadata:s};return this.artifacts[a].push({part:i,metadata:l}),Promise.resolve(c)}loadArtifact({appName:e,userId:t,sessionId:o,filename:r,version:i}){let s=ot(e,t,o,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),Promise.resolve(a[i].part)):Promise.resolve(void 0)}listArtifactKeys({appName:e,userId:t,sessionId:o}){let r=`${e}/${t}/${o}/`,i=`${e}/${t}/user/`,s=[];for(let a in this.artifacts)if(a.startsWith(r)){let c=a.replace(r,"");s.push(c)}else if(a.startsWith(i)){let c=a.replace(i,"");s.push(c)}return Promise.resolve(s.sort())}deleteArtifact({appName:e,userId:t,sessionId:o,filename:r}){let i=ot(e,t,o,r);return this.artifacts[i]&&delete this.artifacts[i],Promise.resolve()}listVersions({appName:e,userId:t,sessionId:o,filename:r}){let i=ot(e,t,o,r),s=this.artifacts[i];if(!s)return Promise.resolve([]);let a=[];for(let c=0;c<s.length;c++)a.push(c);return Promise.resolve(a)}listArtifactVersions({appName:e,userId:t,sessionId:o,filename:r}){let i=ot(e,t,o,r),s=this.artifacts[i];return s?Promise.resolve(s.map(a=>a.metadata)):Promise.resolve([])}getArtifactVersion({appName:e,userId:t,sessionId:o,filename:r,version:i}){let s=ot(e,t,o,r),a=this.artifacts[s];return a?(i===void 0&&(i=a.length-1),a[i]?Promise.resolve(a[i].metadata):Promise.resolve(void 0)):Promise.resolve(void 0)}};function ot(n,e,t,o){return kl(o)?`${n}/${e}/user/${o}`:`${n}/${e}/${t}/${o}`}function kl(n){return n.startsWith("user:")}function Pl(n){if(Ls(n))return new qe;if(n.startsWith("gs://")){let e=n.split("://")[1];return new Mt(e)}if(n.startsWith("file://")){let e=n.split("://")[1];return new Lt(e)}throw new Error(`Unsupported artifact service URI: ${n}`)}import{spawn as Ol}from"child_process";import*as Q from"fs/promises";import*as vn from"os";import*as we from"path";var _l={".js":{mimeType:"text/javascript",encoding:"utf-8"},".py":{mimeType:"text/x-python",encoding:"utf-8"},".md":{mimeType:"text/markdown",encoding:"utf-8"},".txt":{mimeType:"text/plain",encoding:"utf-8"},".html":{mimeType:"text/html",encoding:"utf-8"},".css":{mimeType:"text/css",encoding:"utf-8"},".json":{mimeType:"application/json",encoding:"utf-8"},".csv":{mimeType:"text/csv",encoding:"utf-8"},".svg":{mimeType:"image/svg+xml",encoding:"utf-8"},".xml":{mimeType:"application/xml",encoding:"utf-8"},".yaml":{mimeType:"text/yaml",encoding:"utf-8"},".yml":{mimeType:"text/yaml",encoding:"utf-8"},".png":{mimeType:"image/png",encoding:"base64"},".jpg":{mimeType:"image/jpeg",encoding:"base64"},".jpeg":{mimeType:"image/jpeg",encoding:"base64"},".pdf":{mimeType:"application/pdf",encoding:"base64"}},Ll={".js":"javascript",".ts":"typescript",".py":"python",".bat":"cmd",".cmd":"cmd",".ps1":"powershell",".sh":"shell"};function hn(n){return _l[n.toLowerCase()]||{mimeType:"application/octet-stream",encoding:"base64"}}function Os(n){return Ll[n.toLowerCase()]||"unspecified"}import*as rt from"fs/promises";import*as U from"path";async function it(n,e=process.cwd()){let t=U.resolve(e),o=[];for(let r of n){let i=U.resolve(e,r.name);if(!i.startsWith(t))throw new Error(`Path traversal detected: ${r.name} resolves outside of ${e}`);let s=U.extname(i),a=U.dirname(i),c=U.basename(i,s),l=i,u=2;for(;;)try{await rt.access(l);let f=`${c}_${u}${s}`;l=U.join(a,f);let d=U.dirname(r.name);r.name=d==="."?f:U.join(d,f),u++}catch{break}if(!l.startsWith(t))throw new Error(`Path traversal detected: ${r.name} resolves outside of ${e}`);await rt.mkdir(U.dirname(l),{recursive:!0}),await rt.writeFile(l,Buffer.from(r.content,r.contentEncoding)),o.push({...r,name:U.relative(e,l)})}return o}var Cn=vn.platform()==="win32";async function Ml(n,e,t){let o=we.join(vn.tmpdir(),"adk_js_unsafe_code_executor",Date.now().toString()+"_"+Math.random().toString(36).slice(2));await Q.mkdir(o,{recursive:!0});let r=Nl(e,t)||".js",i=we.join(o,`script${r}`);return await Q.writeFile(i,n),{filePath:i,tempDir:o}}function Nl(n,e){if(n==="javascript")return".js";if(n==="python")return".py";if(n==="powershell")return".ps1";if(n==="cmd")return".bat";if(n==="shell")return Cn?e&&e.toLowerCase().includes("cmd")?".bat":".ps1":".sh"}var Vo=class extends Me{constructor(e={}){var t,o,r,i;super(),this.timeoutSeconds=(t=e.timeoutSeconds)!=null?t:30,this.nodeCommandPath=(o=e.commandPath)!=null?o:process.execPath,this.pythonCommandPath=(r=e.pythonCommandPath)!=null?r:Cn?"python":"python3",this.shellCommandPath=(i=e.shellCommandPath)!=null?i:Cn?"powershell":"bash",this.stateful=!1,this.optimizeDataFile=!1}async executeCode(e){var i;let{code:t,language:o}=e.codeExecutionInput;if(!["javascript","python","shell","cmd","powershell"].includes(o))return{stdout:"",stderr:`Unsupported language: ${o}`,outputFiles:[]};m.warn(`
|
|
87
|
+
====================================================================================
|
|
88
|
+
\u26A0\uFE0F DANGER: UnsafeLocalCodeExecutor is executing code locally on this host machine!
|
|
89
|
+
This component provides NO sandboxing or container isolation. Arbitrary shell/script
|
|
90
|
+
commands generated by AI or untrusted sources could lead to serious security risks.
|
|
91
|
+
====================================================================================
|
|
92
|
+
`);let r;try{let s=await Ml(t,o,this.shellCommandPath),a=s.filePath;r=s.tempDir,e.codeExecutionInput.inputFiles&&await it(e.codeExecutionInput.inputFiles,r);let c=this.nodeCommandPath,l=[a];if(o==="python"?c=this.pythonCommandPath:o==="shell"?(c=this.shellCommandPath,this.shellCommandPath.toLowerCase().includes("powershell")?l=["-NoLogo","-ExecutionPolicy","Bypass","-File",a]:this.shellCommandPath.toLowerCase().includes("cmd")&&(l=["/c",a])):o==="powershell"?(c=Cn?"powershell":"pwsh",l=["-NoLogo","-ExecutionPolicy","Bypass","-File",a]):o==="cmd"&&(c="cmd.exe",l=["/c",a]),e.codeExecutionInput.args)if(Array.isArray(e.codeExecutionInput.args))l.push(...e.codeExecutionInput.args);else for(let[d,p]of Object.entries(e.codeExecutionInput.args))l.push(`--${d}`,String(p));let u=await new Promise(d=>{let p=Ol(c,l,{timeout:this.timeoutSeconds*1e3,killSignal:"SIGKILL",cwd:r}),g="",C="";p.stdout&&p.stdout.on("data",h=>{g+=h.toString()}),p.stderr&&p.stderr.on("data",h=>{C+=h.toString()}),p.on("error",h=>{C+=`Process error: ${h.message}
|
|
93
|
+
`}),p.on("close",(h,A)=>{A==="SIGKILL"||A==="SIGTERM"?C+=`
|
|
94
|
+
Code execution timed out after ${this.timeoutSeconds} seconds.`:h!==0&&h!==null&&(C||(C=`Exit code ${h}`)),d({stdout:g,stderr:C,exitCode:h})})}),f=[];try{let d=await Q.readdir(r,{recursive:!0});for(let p of d){let g=we.join(r,p);if(!(await Q.lstat(g)).isFile()||p===we.basename(a)||((i=e.codeExecutionInput.inputFiles)==null?void 0:i.some(H=>H.name===p)))continue;let A=await Q.readFile(g),{mimeType:j,encoding:w}=hn(we.extname(p));f.push({name:p,content:A.toString(w),contentEncoding:w,mimeType:j})}}catch(d){m.error(`Error scanning output files: ${d}`)}return{stdout:u.stdout,stderr:u.stderr,outputFiles:f}}finally{r&&await Q.rm(r,{recursive:!0,force:!0})}}};var zo=class{constructor(e={}){this.task=e.task,this.stream=e.stream}};var Wo=class{constructor(){this.queue=[];this.resolveFnFifoQueue=[];this.isClosed=!1}send(e){if(this.isClosed)throw new Error("Cannot send to a closed queue.");this.resolveFnFifoQueue.length>0?this.resolveFnFifoQueue.shift()(e):this.queue.push(e)}async get(){return this.queue.length>0?this.queue.shift():this.isClosed?{close:!0}:new Promise(e=>{this.resolveFnFifoQueue.push(e)})}close(){if(this.isClosed)return;for(this.isClosed=!0;this.resolveFnFifoQueue.length>0&&this.queue.length>0;){let t=this.resolveFnFifoQueue.shift(),o=this.queue.shift();t(o)}let e={close:!0};for(;this.resolveFnFifoQueue.length>0;)this.resolveFnFifoQueue.shift()(e)}sendContent(e){this.send({content:e})}sendRealtime(e){this.send({blob:e})}sendActivityStart(){this.send({activityStart:{}})}sendActivityEnd(){this.send({activityEnd:{}})}async*[Symbol.asyncIterator](){for(;;){let e=await this.get();if(yield e,e.close)break}}};async function*st(n,e,t,o){let r=await t(n,e);if(!r)throw new Error("Initial routing failed, no item selected.");let i=r;m.debug(`Router selected initial key: ${i}`);let s=n[i];if(!s)throw new Error(`Item not found for key: ${i}`);let a=new Set([i]);for(;;){let c=o(s),l=!1;try{if(Fl(c)){for await(let f of c)yield f,l=!0;return}yield await c;return}catch(u){if(l)throw u;{let f=await t(n,e,{failedKeys:a,lastError:u});if(m.debug(`Router selected next key: ${f}`),f===void 0||a.has(f))throw u;if(i=f,s=n[i],!s)throw new Error(`Item not found for key: ${i}`);a.add(i)}}}}function Fl(n){return typeof n=="object"&&typeof n[Symbol.asyncIterator]=="function"}var Ho=Symbol.for("google.adk.routedAgent");function Bl(n){return typeof n=="object"&&n!==null&&Ho in n&&n[Ho]===!0}var Ms,Ns,Nt=class extends(Ns=$,Ms=Ho,Ns){constructor(t){let o=Array.isArray(t.agents)?t.agents:Object.values(t.agents);super({...t,subAgents:o});this[Ms]=!0;Array.isArray(t.agents)?this.agents=Object.fromEntries(t.agents.map(r=>[r.name,r])):this.agents=t.agents,this.router=t.router}async*runAsyncImpl(t){yield*st(this.agents,t,this.router,o=>o.runAsync(t))}async*runLiveImpl(t){yield*st(this.agents,t,this.router,o=>o.runLive(t))}};Nt=v([k],Nt);var Ko=(i=>(i.API_KEY="apiKey",i.HTTP="http",i.OAUTH2="oauth2",i.OPEN_ID_CONNECT="openIdConnect",i.SERVICE_ACCOUNT="serviceAccount",i))(Ko||{});var Yo=class{constructor(){this.providers=new Map}register(e,t){this.providers.set(e,t)}getProvider(e){return this.providers.get(e.type)}};var Jo=class{constructor(){this.credentials={}}loadCredential(e,t){let o=this.getBucketForCurrentContext(t);return Promise.resolve(o[e.credentialKey])}async saveCredential(e,t){let o=this.getBucketForCurrentContext(t);e.exchangedAuthCredential&&(o[e.credentialKey]=e.exchangedAuthCredential)}getBucketForCurrentContext(e){let{appName:t,userId:o}=e.invocationContext.session;return this.credentials[t]||(this.credentials[t]={}),this.credentials[t][o]||(this.credentials[t][o]={}),this.credentials[t][o]}};var Xo=class{loadCredential(e,t){return Promise.resolve(t.state.get(e.credentialKey))}async saveCredential(e,t){e.exchangedAuthCredential&&t.state.set(e.credentialKey,e.exchangedAuthCredential)}};import{z as ne}from"zod";var Dl=ne.object({issuer:ne.string(),authorization_endpoint:ne.string(),token_endpoint:ne.string(),scopes_supported:ne.array(ne.string()).optional(),registration_endpoint:ne.string().optional()}),Ul=ne.object({resource:ne.string(),authorization_servers:ne.array(ne.string()).default([])}),Qo=class{async discoverAuthServerMetadata(e){if(!Fs(e))return;let t,o;try{let i=new URL(e);t=`${i.protocol}//${i.host}`,o=i.pathname}catch(i){m.warn(`Failed to parse issuerUrl ${e}: ${i}`);return}let r=[];o&&o!=="/"?r.push(`${t}/.well-known/oauth-authorization-server${o}`,`${t}/.well-known/openid-configuration${o}`,`${t}${o}/.well-known/openid-configuration`):r.push(`${t}/.well-known/oauth-authorization-server`,`${t}/.well-known/openid-configuration`);for(let i of r)try{let s=await fetch(i,{method:"GET",headers:{Accept:"application/json"}});if(!s.ok)continue;let a=await s.json(),c=Dl.parse(a);if(c.issuer.replace(/\/$/,"")===e.replace(/\/$/,""))return c;m.warn(`Issuer in metadata ${c.issuer} does not match issuerUrl ${e}`)}catch(s){m.debug(`Failed to fetch metadata from ${i}: ${s}`)}}async discoverResourceMetadata(e){if(!Fs(e))return;let t,o;try{let i=new URL(e);t=`${i.protocol}//${i.host}`,o=i.pathname}catch(i){m.warn(`Failed to parse resourceUrl ${e}: ${i}`);return}let r;o&&o!=="/"?r=`${t}/.well-known/oauth-protected-resource${o}`:r=`${t}/.well-known/oauth-protected-resource`;try{let i=await fetch(r,{method:"GET",headers:{Accept:"application/json"}});if(!i.ok)return;let s=await i.json(),a=Ul.parse(s);if(a.resource.replace(/\/$/,"")===e.replace(/\/$/,""))return a;m.warn(`Resource in metadata ${a.resource} does not match resourceUrl ${e}`)}catch(i){m.debug(`Failed to fetch metadata from ${r}: ${i}`)}}};function Fs(n){try{let e=new URL(n);if(e.protocol!=="https:")return m.warn(`Unsafe protocol for discovery URL: ${e.protocol}`),!1;let t=e.hostname.toLowerCase();if(t==="localhost"||t==="127.0.0.1"||t==="[::1]"||t.startsWith("10.")||t.startsWith("192.168.")||t.startsWith("169.254."))return m.warn(`Unsafe host for discovery URL: ${t}`),!1;let o=t.match(/^172\.(\d+)\./);if(o){let r=parseInt(o[1],10);if(r>=16&&r<=31)return m.warn(`Unsafe host for discovery URL: ${t}`),!1}return!0}catch(e){return m.warn(`Failed to parse URL for validation ${n}: ${e}`),!1}}var Zo=class{constructor(){this.refreshers={apiKey:void 0,http:void 0,oauth2:void 0,openIdConnect:void 0,serviceAccount:void 0}}register(e,t){this.refreshers[e]=t}getRefresher(e){return this.refreshers[e]}};var $l="The following is a conversation history between a user and an AI agent. Please summarize the conversation, focusing on key information and decisions made, as well as any unresolved questions or tasks. The summary should be concise and capture the essence of the interaction.",er=class{constructor(e){this.llm=e.llm,this.prompt=e.prompt||$l}async summarize(e){var u,f,d,p,g,C;if(e.length===0)throw new Error("Cannot summarize an empty list of events.");let t=e[0].timestamp,o=e[e.length-1].timestamp,r="";for(let h=0;h<e.length;h++)r+=`[Event ${h+1} - Author: ${e[h].author}]
|
|
95
|
+
`,r+=`${pt(e[h])}
|
|
87
96
|
|
|
88
97
|
`;let s={contents:[{role:"user",parts:[{text:`${this.prompt}
|
|
89
98
|
|
|
90
|
-
${r}`}]}],toolsDict:{},liveConnectConfig:{}},a=this.llm.generateContentAsync(s,!1),c="",l=await a.next();if(l.done||!((d=(f=(u=l.value.content)==null?void 0:u.parts)==null?void 0:f[0])!=null&&d.text))throw new Error("LLM failed to return a valid summary.");c+=l.value.content.parts[0].text;for await(let C of a)(h=(m=(p=C.content)==null?void 0:p.parts)==null?void 0:m[0])!=null&&h.text&&(c+=C.content.parts[0].text);return Or({author:"system",content:{role:"model",parts:[{text:c}]},startTime:t,endTime:o,compactedContent:c})}};var no=class{constructor(e){this.tokenThreshold=e.tokenThreshold,this.eventRetentionSize=e.eventRetentionSize,this.summarizer=e.summarizer}getActiveEvents(e){let t;for(let r=e.length-1;r>=0;r--){let i=e[r];H(i)&&(!t||i.endTime>t.endTime)&&(t=i)}if(!t)return e;let o=e.filter(r=>!H(r)&&r.timestamp>t.endTime);return[t,...o]}shouldCompact(e){let t=e.session.events,o=this.getActiveEvents(t);if(o.filter(s=>!H(s)).length<=this.eventRetentionSize)return!1;let i=0;for(let s of o)i+=lc(s);return i>this.tokenThreshold}async compact(e){let t=e.session.events,o=this.getActiveEvents(t),r=o.filter(u=>!H(u));if(r.length<=this.eventRetentionSize)return;let i=Math.max(0,r.length-this.eventRetentionSize);for(;i>0;){let u=r[i],f=r[i-1];if(fc(u)&&uc(f))i--;else break}if(i===0)return;let s=r.slice(0,i),a=o.find(H),c=a?[a,...s]:s,l=await this.summarizer.summarize(c);l.actions||(l.actions={stateDelta:{},artifactDelta:{},requestedAuthConfigs:[],requestedToolConfirmations:{}}),e.session.events.push(l)}};function lc(n){var t;if(((t=n.usageMetadata)==null?void 0:t.promptTokenCount)!==void 0)return n.usageMetadata.promptTokenCount;let e=Ue(n);return Math.ceil(e.length/4)}function uc(n){var e,t;return!!((t=(e=n.content)==null?void 0:e.parts)!=null&&t.some(o=>o.functionCall!==void 0))}function fc(n){var e,t;return!!((t=(e=n.content)==null?void 0:e.parts)!=null&&t.some(o=>o.functionResponse!==void 0))}var oo=class{constructor(e){var t;this.threshold=e.threshold,this.preserveLeadingEvents=(t=e.preserveLeadingEvents)!=null?t:0}shouldCompact(e){return e.session.events.length>this.threshold+Math.max(0,this.preserveLeadingEvents)}compact(e){let t=e.session.events,o=t.length-this.threshold-Math.max(0,this.preserveLeadingEvents);if(o<=0)return;let r=Math.max(0,this.preserveLeadingEvents);t.splice(r,o)}};import{isEmpty as lt}from"lodash-es";var Ri=(u=>(u.THOUGHT="thought",u.CONTENT="content",u.TOOL_CALL="tool_call",u.TOOL_RESULT="tool_result",u.CALL_CODE="call_code",u.CODE_RESULT="code_result",u.ERROR="error",u.ACTIVITY="activity",u.TOOL_CONFIRMATION="tool_confirmation",u.FINISHED="finished",u))(Ri||{});function dc(n){var t,o;let e=[];if(n.errorCode)return e.push({type:"error",error:new Error(n.errorMessage||n.errorCode)}),e;for(let r of(o=(t=n.content)==null?void 0:t.parts)!=null?o:[])r.functionCall&&!lt(r.functionCall)?e.push({type:"tool_call",call:r.functionCall}):r.functionResponse&&!lt(r.functionResponse)?e.push({type:"tool_result",result:r.functionResponse}):r.executableCode&&!lt(r.executableCode)?e.push({type:"call_code",code:r.executableCode}):r.codeExecutionResult&&!lt(r.codeExecutionResult)?e.push({type:"code_result",result:r.codeExecutionResult}):r.text&&(r.thought?e.push({type:"thought",content:r.text}):e.push({type:"content",content:r.text}));return n.actions.requestedToolConfirmations&&!lt(n.actions.requestedToolConfirmations)&&e.push({type:"tool_confirmation",confirmations:n.actions.requestedToolConfirmations}),ae(n)&&e.push({type:"finished",output:void 0}),e}var ro=Symbol.for("google.adk.baseExampleProvider");function pc(n){return typeof n=="object"&&n!==null&&ro in n&&n[ro]===!0}var Ii;Ii=ro;var io=class{constructor(){this[Ii]=!0}};var Se=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=wi(e.appName,e.userId);this.sessionEvents[t]||(this.sessionEvents[t]={}),this.sessionEvents[t][e.id]=e.events.filter(o=>{var r,i,s;return((s=(i=(r=o.content)==null?void 0:r.parts)==null?void 0:i.length)!=null?s:0)>0})}async searchMemory(e){var i,s;let t=wi(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let o=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let c of a){if(!((s=(i=c.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=c.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),u=mc(l);if(!u.size)continue;o.some(d=>u.has(d))&&r.memories.push({content:c.content,author:c.author,timestamp:gc(c.timestamp)})}return r}};function wi(n,e){return`${n}/${e}`}function mc(n){return new Set([...n.matchAll(/[A-Za-z]+/g)].map(e=>e[0].toLowerCase()))}function gc(n){return new Date(n).toISOString()}var Re=class{constructor(e){this.name=e}async onUserMessageCallback(e){}async beforeRunCallback(e){}async onEventCallback(e){}async afterRunCallback(e){}async beforeAgentCallback(e){}async afterAgentCallback(e){}async beforeModelCallback(e){}async afterModelCallback(e){}async onModelErrorCallback(e){}async beforeToolCallback(e){}async afterToolCallback(e){}async onToolErrorCallback(e){}};var so=class extends Re{constructor(e="logging_plugin"){super(e)}async onUserMessageCallback({invocationContext:e,userMessage:t}){var o;this.log("\u{1F680} USER MESSAGE RECEIVED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Session ID: ${e.session.id}`),this.log(` User ID: ${e.userId}`),this.log(` App Name: ${e.appName}`),this.log(` Root Agent: ${(o=e.agent.name)!=null?o:"Unknown"}`),this.log(` User Content: ${this.formatContent(t)}`),e.branch&&this.log(` Branch: ${e.branch}`)}async beforeRunCallback({invocationContext:e}){var t;this.log("\u{1F3C3} INVOCATION STARTING"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Starting Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async onEventCallback({event:e}){this.log("\u{1F4E2} EVENT YIELDED"),this.log(` Event ID: ${e.id}`),this.log(` Author: ${e.author}`),this.log(` Content: ${this.formatContent(e.content)}`),this.log(` Final Response: ${ae(e)}`);let t=I(e);if(t.length>0){let r=t.map(i=>i.name);this.log(` Function Calls: ${r}`)}let o=V(e);if(o.length>0){let r=o.map(i=>i.name);this.log(` Function Responses: ${r}`)}e.longRunningToolIds&&e.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...e.longRunningToolIds]}`)}async afterRunCallback({invocationContext:e}){var t;this.log("\u2705 INVOCATION COMPLETED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Final Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async beforeAgentCallback({callbackContext:e}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${e.agentName}`),this.log(` Invocation ID: ${e.invocationId}`),e.invocationContext.branch&&this.log(` Branch: ${e.invocationContext.branch}`)}async afterAgentCallback({callbackContext:e}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${e.agentName}`),this.log(` Invocation ID: ${e.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var o;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(o=t.model)!=null?o:"default"}`),this.log(` Agent: ${e.agentName}`),t.config&&t.config.systemInstruction){let r=t.config.systemInstruction;r.length>200&&(r=r.substring(0,200)+"..."),this.log(` System Instruction: '${r}'`)}if(t.toolsDict){let r=Object.keys(t.toolsDict);this.log(` Available Tools: ${r}`)}}async afterModelCallback({callbackContext:e,llmResponse:t}){this.log("\u{1F9E0} LLM RESPONSE"),this.log(` Agent: ${e.agentName}`),t.errorCode?(this.log(` \u274C ERROR - Code: ${t.errorCode}`),this.log(` Error Message: ${t.errorMessage}`)):(this.log(` Content: ${this.formatContent(t.content)}`),t.partial&&this.log(` Partial: ${t.partial}`),t.turnComplete!==void 0&&this.log(` Turn Complete: ${t.turnComplete}`)),t.usageMetadata&&this.log(` Token Usage - Input: ${t.usageMetadata.promptTokenCount}, Output: ${t.usageMetadata.candidatesTokenCount}`)}async beforeToolCallback({tool:e,toolArgs:t,toolContext:o}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${o.agentName}`),this.log(` Function Call ID: ${o.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolContext:t,result:o}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${t.agentName}`),this.log(` Function Call ID: ${t.functionCallId}`),this.log(` Result: ${this.formatArgs(o)}`)}async onModelErrorCallback({callbackContext:e,error:t}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${t}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${o.agentName}`),this.log(` Function Call ID: ${o.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`),this.log(` Error: ${r}`)}log(e){let t=`\x1B[90m[${this.name}] ${e}\x1B[0m`;g.info(t)}formatContent(e,t=200){if(!e||!e.parts)return"None";let o=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),o.push(`text: '${i}'`)}else r.functionCall?o.push(`function_call: ${r.functionCall.name}`):r.functionResponse?o.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?o.push("code_execution_result"):o.push("other_part");return o.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let o=JSON.stringify(e);return o.length>t&&(o=o.substring(0,t)+"...}"),o}};var ki="adk_request_confirmation",ao="orcas_tool_call_security_check_states",bi="This tool call needs external confirmation before completion.",Pi=(o=>(o.DENY="DENY",o.CONFIRM="CONFIRM",o.ALLOW="ALLOW",o))(Pi||{}),Nt=class{async evaluate(){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},co=class extends Re{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new Nt}async beforeToolCallback({tool:e,toolArgs:t,toolContext:o}){let r=this.getToolCallCheckState(o);if(!r)return this.checkToolCallPolicy({tool:e,toolArgs:t,toolContext:o});if(r==="CONFIRM"){if(!o.toolConfirmation)return{partial:bi};if(this.setToolCallCheckState(o,o.toolConfirmation),!o.toolConfirmation.confirmed)return{error:"Tool call rejected from confirmation flow."};o.toolConfirmation=void 0}}getToolCallCheckState(e){var r;let{functionCallId:t}=e;return t?((r=e.state.get(ao))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:o}=e;if(!o)return;let r=(i=e.state.get(ao))!=null?i:{};r[o]=t,e.state.set(ao,r)}async checkToolCallPolicy({tool:e,toolArgs:t,toolContext:o}){let r=await this.policyEngine.evaluate({tool:e,toolArgs:t});switch(this.setToolCallCheckState(o,r.outcome),r.outcome){case"DENY":return{error:`This tool call is rejected by policy engine. Reason: ${r.reason}`};case"CONFIRM":return o.requestConfirmation({hint:`Policy engine requires confirmation calling tool: ${e.name}. Reason: ${r.reason}`}),{partial:bi};case"ALLOW":return;default:return}}};function hc(n){if(!n.content||!n.content.parts)return[];let e=[];for(let t of n.content.parts)t&&t.functionCall&&t.functionCall.name===ki&&e.push(t.functionCall);return e}var lo=class extends re{constructor({agent:e,appName:t="InMemoryRunner",plugins:o=[]}){super({appName:t,agent:e,plugins:o,artifactService:new ye,sessionService:new X,memoryService:new Se})}};import{Type as Bt}from"@google/genai";var Dt=class{constructor(e){this.toolContext=e;this.invocationContext=e.invocationContext}async saveArtifact(e){return this.toolContext.saveArtifact(e.filename,e.artifact)}async loadArtifact(e){return this.toolContext.loadArtifact(e.filename,e.version)}async listArtifactKeys(){return this.toolContext.listArtifacts()}async deleteArtifact(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.deleteArtifact(e)}async listVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listVersions(e)}listArtifactVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listArtifactVersions(e)}getArtifactVersion(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.getArtifactVersion(e)}};var uo=Symbol.for("google.adk.agentTool");function Cc(n){return typeof n=="object"&&n!==null&&uo in n&&n[uo]===!0}var _i,Li,fo=class extends(Li=P,_i=uo,Li){constructor(t){super({name:t.agent.name,description:t.agent.description||""});this[_i]=!0;this.agent=t.agent,this.skipSummarization=t.skipSummarization||!1}_getDeclaration(){let t;if(T(this.agent)&&this.agent.inputSchema?t={name:this.name,description:this.description,parameters:this.agent.inputSchema}:t={name:this.name,description:this.description,parameters:{type:Bt.OBJECT,properties:{request:{type:Bt.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let o=T(this.agent)&&this.agent.outputSchema;t.response=o?{type:Bt.OBJECT}:{type:Bt.STRING}}return t}async runAsync({args:t,toolContext:o}){var f,d,p,m;this.skipSummarization&&(o.actions.skipSummarization=!0);let i={role:"user",parts:[{text:T(this.agent)&&this.agent.inputSchema?JSON.stringify(t):t.request}]},s=new re({appName:this.agent.name,agent:this.agent,artifactService:new Dt(o),sessionService:(f=o.invocationContext.sessionService)!=null?f:new X,memoryService:(d=o.invocationContext.memoryService)!=null?d:new Se,credentialService:o.invocationContext.credentialService}),a=await s.sessionService.createSession({appName:this.agent.name,userId:o.invocationContext.userId,sessionId:o.invocationContext.session.id,state:o.state.toRecord()}),c;for await(let h of s.runAsync({userId:a.userId,sessionId:a.id,newMessage:i}))h.actions.stateDelta&&o.state.update(h.actions.stateDelta),c=h;if(!((m=(p=c==null?void 0:c.content)==null?void 0:p.parts)!=null&&m.length))return"";let l=T(this.agent)&&this.agent.outputSchema,u=c.content.parts.map(h=>h.text).filter(h=>h).join(`
|
|
91
|
-
`);return l?JSON.parse(u):u}};var
|
|
99
|
+
${r}`}]}],toolsDict:{},liveConnectConfig:{}},a=this.llm.generateContentAsync(s,!1),c="",l=await a.next();if(l.done||!((d=(f=(u=l.value.content)==null?void 0:u.parts)==null?void 0:f[0])!=null&&d.text))throw new Error("LLM failed to return a valid summary.");c+=l.value.content.parts[0].text;for await(let h of a)(C=(g=(p=h.content)==null?void 0:p.parts)==null?void 0:g[0])!=null&&C.text&&(c+=h.content.parts[0].text);return qi({author:"system",content:{role:"model",parts:[{text:c}]},startTime:t,endTime:o,compactedContent:c})}};var tr=class{constructor(e){this.tokenThreshold=e.tokenThreshold,this.eventRetentionSize=e.eventRetentionSize,this.summarizer=e.summarizer}getActiveEvents(e){let t;for(let r=e.length-1;r>=0;r--){let i=e[r];X(i)&&(!t||i.endTime>t.endTime)&&(t=i)}if(!t)return e;let o=e.filter(r=>!X(r)&&r.timestamp>t.endTime);return[t,...o]}shouldCompact(e){let t=e.session.events,o=this.getActiveEvents(t);if(o.filter(s=>!X(s)).length<=this.eventRetentionSize)return!1;let i=0;for(let s of o)i+=ql(s);return i>this.tokenThreshold}async compact(e){let t=e.session.events,o=this.getActiveEvents(t),r=o.filter(u=>!X(u));if(r.length<=this.eventRetentionSize)return;let i=Math.max(0,r.length-this.eventRetentionSize);for(;i>0;){let u=r[i],f=r[i-1];if(jl(u)&&Gl(f))i--;else break}if(i===0)return;let s=r.slice(0,i),a=o.find(X),c=a?[a,...s]:s,l=await this.summarizer.summarize(c);l.actions||(l.actions={stateDelta:{},artifactDelta:{},requestedAuthConfigs:[],requestedToolConfirmations:{}}),e.session.events.push(l)}};function ql(n){var t;if(((t=n.usageMetadata)==null?void 0:t.promptTokenCount)!==void 0)return n.usageMetadata.promptTokenCount;let e=pt(n);return Math.ceil(e.length/4)}function Gl(n){var e,t;return!!((t=(e=n.content)==null?void 0:e.parts)!=null&&t.some(o=>o.functionCall!==void 0))}function jl(n){var e,t;return!!((t=(e=n.content)==null?void 0:e.parts)!=null&&t.some(o=>o.functionResponse!==void 0))}var nr=class{constructor(e){var t;this.threshold=e.threshold,this.preserveLeadingEvents=(t=e.preserveLeadingEvents)!=null?t:0}shouldCompact(e){return e.session.events.length>this.threshold+Math.max(0,this.preserveLeadingEvents)}compact(e){let t=e.session.events,o=t.length-this.threshold-Math.max(0,this.preserveLeadingEvents);if(o<=0)return;let r=Math.max(0,this.preserveLeadingEvents);t.splice(r,o)}};import{isEmpty as Ft}from"lodash-es";var Bs=(u=>(u.THOUGHT="thought",u.CONTENT="content",u.TOOL_CALL="tool_call",u.TOOL_RESULT="tool_result",u.CALL_CODE="call_code",u.CODE_RESULT="code_result",u.ERROR="error",u.ACTIVITY="activity",u.TOOL_CONFIRMATION="tool_confirmation",u.FINISHED="finished",u))(Bs||{});function Vl(n){var t,o;let e=[];if(n.errorCode)return e.push({type:"error",error:new Error(n.errorMessage||n.errorCode)}),e;for(let r of(o=(t=n.content)==null?void 0:t.parts)!=null?o:[])r.functionCall&&!Ft(r.functionCall)?e.push({type:"tool_call",call:r.functionCall}):r.functionResponse&&!Ft(r.functionResponse)?e.push({type:"tool_result",result:r.functionResponse}):r.executableCode&&!Ft(r.executableCode)?e.push({type:"call_code",code:r.executableCode}):r.codeExecutionResult&&!Ft(r.codeExecutionResult)?e.push({type:"code_result",result:r.codeExecutionResult}):r.text&&(r.thought?e.push({type:"thought",content:r.text}):e.push({type:"content",content:r.text}));return n.actions.requestedToolConfirmations&&!Ft(n.actions.requestedToolConfirmations)&&e.push({type:"tool_confirmation",confirmations:n.actions.requestedToolConfirmations}),Ce(n)&&e.push({type:"finished",output:void 0}),e}var or=Symbol.for("google.adk.baseExampleProvider");function zl(n){return typeof n=="object"&&n!==null&&or in n&&n[or]===!0}var Ds;Ds=or;var rr=class{constructor(){this[Ds]=!0}};var Ge=class{constructor(){this.memories=[];this.sessionEvents={}}async addSessionToMemory(e){let t=Us(e.appName,e.userId);this.sessionEvents[t]||(this.sessionEvents[t]={}),this.sessionEvents[t][e.id]=e.events.filter(o=>{var r,i,s;return((s=(i=(r=o.content)==null?void 0:r.parts)==null?void 0:i.length)!=null?s:0)>0})}async searchMemory(e){var i,s;let t=Us(e.appName,e.userId);if(!this.sessionEvents[t])return Promise.resolve({memories:[]});let o=e.query.toLowerCase().split(/\s+/),r={memories:[]};for(let a of Object.values(this.sessionEvents[t]))for(let c of a){if(!((s=(i=c.content)==null?void 0:i.parts)!=null&&s.length))continue;let l=c.content.parts.map(d=>d.text).filter(d=>!!d).join(" "),u=Wl(l);if(!u.size)continue;o.some(d=>u.has(d))&&r.memories.push({content:c.content,author:c.author,timestamp:Hl(c.timestamp)})}return r}};function Us(n,e){return`${n}/${e}`}function Wl(n){return new Set([...n.matchAll(/[A-Za-z]+/g)].map(e=>e[0].toLowerCase()))}function Hl(n){return new Date(n).toISOString()}var Bt=class extends ye{constructor({models:e,router:t,modelName:o="routed-llm"}){let r=Array.isArray(e)?Object.fromEntries(e.map(a=>[a.model,a])):e,s=`RoutedLlm[${Object.entries(r).map(([a,c])=>`${a} (${c.model})`).join(", ")}]`;super({model:o==="routed-llm"?s:o}),this.models=r,this.router=t}async*generateContentAsync(e,t){m.info(`Routing request via ${this.model}`),yield*st(this.models,e,this.router,o=>o.generateContentAsync(e,t))}async connect(e){let o=await st(this.models,e,this.router,r=>r.connect(e)).next();if(o.done||o.value===void 0)throw new Error("Failed to establish connection: No connection yielded.");return o.value}};Bt=v([k],Bt);var ir=class extends ce{constructor(e="logging_plugin"){super(e)}async onUserMessageCallback({invocationContext:e,userMessage:t}){var o;this.log("\u{1F680} USER MESSAGE RECEIVED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Session ID: ${e.session.id}`),this.log(` User ID: ${e.userId}`),this.log(` App Name: ${e.appName}`),this.log(` Root Agent: ${(o=e.agent.name)!=null?o:"Unknown"}`),this.log(` User Content: ${this.formatContent(t)}`),e.branch&&this.log(` Branch: ${e.branch}`)}async beforeRunCallback({invocationContext:e}){var t;this.log("\u{1F3C3} INVOCATION STARTING"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Starting Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async onEventCallback({event:e}){this.log("\u{1F4E2} EVENT YIELDED"),this.log(` Event ID: ${e.id}`),this.log(` Author: ${e.author}`),this.log(` Content: ${this.formatContent(e.content)}`),this.log(` Final Response: ${Ce(e)}`);let t=P(e);if(t.length>0){let r=t.map(i=>i.name);this.log(` Function Calls: ${r}`)}let o=K(e);if(o.length>0){let r=o.map(i=>i.name);this.log(` Function Responses: ${r}`)}e.longRunningToolIds&&e.longRunningToolIds.length>0&&this.log(` Long Running Tools: ${[...e.longRunningToolIds]}`)}async afterRunCallback({invocationContext:e}){var t;this.log("\u2705 INVOCATION COMPLETED"),this.log(` Invocation ID: ${e.invocationId}`),this.log(` Final Agent: ${(t=e.agent.name)!=null?t:"Unknown"}`)}async beforeAgentCallback({callbackContext:e}){this.log("\u{1F916} AGENT STARTING"),this.log(` Agent Name: ${e.agentName}`),this.log(` Invocation ID: ${e.invocationId}`),e.invocationContext.branch&&this.log(` Branch: ${e.invocationContext.branch}`)}async afterAgentCallback({callbackContext:e}){this.log("\u{1F916} AGENT COMPLETED"),this.log(` Agent Name: ${e.agentName}`),this.log(` Invocation ID: ${e.invocationId}`)}async beforeModelCallback({callbackContext:e,llmRequest:t}){var o;if(this.log("\u{1F9E0} LLM REQUEST"),this.log(` Model: ${(o=t.model)!=null?o:"default"}`),this.log(` Agent: ${e.agentName}`),t.config&&t.config.systemInstruction){let r=t.config.systemInstruction;r.length>200&&(r=r.substring(0,200)+"..."),this.log(` System Instruction: '${r}'`)}if(t.toolsDict){let r=Object.keys(t.toolsDict);this.log(` Available Tools: ${r}`)}}async afterModelCallback({callbackContext:e,llmResponse:t}){this.log("\u{1F9E0} LLM RESPONSE"),this.log(` Agent: ${e.agentName}`),t.errorCode?(this.log(` \u274C ERROR - Code: ${t.errorCode}`),this.log(` Error Message: ${t.errorMessage}`)):(this.log(` Content: ${this.formatContent(t.content)}`),t.partial&&this.log(` Partial: ${t.partial}`),t.turnComplete!==void 0&&this.log(` Turn Complete: ${t.turnComplete}`)),t.usageMetadata&&this.log(` Token Usage - Input: ${t.usageMetadata.promptTokenCount}, Output: ${t.usageMetadata.candidatesTokenCount}`)}async beforeToolCallback({tool:e,toolArgs:t,toolContext:o}){this.log("\u{1F527} TOOL STARTING"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${o.agentName}`),this.log(` Function Call ID: ${o.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`)}async afterToolCallback({tool:e,toolContext:t,result:o}){this.log("\u{1F527} TOOL COMPLETED"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${t.agentName}`),this.log(` Function Call ID: ${t.functionCallId}`),this.log(` Result: ${this.formatArgs(o)}`)}async onModelErrorCallback({callbackContext:e,error:t}){this.log("\u{1F9E0} LLM ERROR"),this.log(` Agent: ${e.agentName}`),this.log(` Error: ${t}`)}async onToolErrorCallback({tool:e,toolArgs:t,toolContext:o,error:r}){this.log("\u{1F527} TOOL ERROR"),this.log(` Tool Name: ${e.name}`),this.log(` Agent: ${o.agentName}`),this.log(` Function Call ID: ${o.functionCallId}`),this.log(` Arguments: ${this.formatArgs(t)}`),this.log(` Error: ${r}`)}log(e){let t=`\x1B[90m[${this.name}] ${e}\x1B[0m`;m.info(t)}formatContent(e,t=200){if(!e||!e.parts)return"None";let o=[];for(let r of e.parts)if(r.text){let i=r.text.trim();i.length>t&&(i=i.substring(0,t)+"..."),o.push(`text: '${i}'`)}else r.functionCall?o.push(`function_call: ${r.functionCall.name}`):r.functionResponse?o.push(`function_response: ${r.functionResponse.name}`):r.codeExecutionResult?o.push("code_execution_result"):o.push("other_part");return o.join(" | ")}formatArgs(e,t=300){if(!e)return"{}";let o=JSON.stringify(e);return o.length>t&&(o=o.substring(0,t)+"...}"),o}};var qs="adk_request_confirmation",sr="orcas_tool_call_security_check_states",$s="This tool call needs external confirmation before completion.",Gs=(o=>(o.DENY="DENY",o.CONFIRM="CONFIRM",o.ALLOW="ALLOW",o))(Gs||{}),An=class{async evaluate(){return Promise.resolve({outcome:"ALLOW",reason:"For prototyping purpose, all tool calls are allowed."})}},ar=class extends ce{constructor(e){var t;super("security_plugin"),this.policyEngine=(t=e==null?void 0:e.policyEngine)!=null?t:new An}async beforeToolCallback({tool:e,toolArgs:t,toolContext:o}){let r=this.getToolCallCheckState(o);if(!r)return this.checkToolCallPolicy({tool:e,toolArgs:t,toolContext:o});if(r==="CONFIRM"){if(!o.toolConfirmation)return{partial:$s};if(this.setToolCallCheckState(o,o.toolConfirmation),!o.toolConfirmation.confirmed)return{error:"Tool call rejected from confirmation flow."};o.toolConfirmation=void 0}}getToolCallCheckState(e){var r;let{functionCallId:t}=e;return t?((r=e.state.get(sr))!=null?r:{})[t]:void 0}setToolCallCheckState(e,t){var i;let{functionCallId:o}=e;if(!o)return;let r=(i=e.state.get(sr))!=null?i:{};r[o]=t,e.state.set(sr,r)}async checkToolCallPolicy({tool:e,toolArgs:t,toolContext:o}){let r=await this.policyEngine.evaluate({tool:e,toolArgs:t});switch(this.setToolCallCheckState(o,r.outcome),r.outcome){case"DENY":return{error:`This tool call is rejected by policy engine. Reason: ${r.reason}`};case"CONFIRM":return o.requestConfirmation({hint:`Policy engine requires confirmation calling tool: ${e.name}. Reason: ${r.reason}`}),{partial:$s};case"ALLOW":return;default:return}}};function Kl(n){if(!n.content||!n.content.parts)return[];let e=[];for(let t of n.content.parts)t&&t.functionCall&&t.functionCall.name===qs&&e.push(t.functionCall);return e}var cr=class extends ge{constructor({agent:e,appName:t="InMemoryRunner",plugins:o=[]}){super({appName:t,agent:e,plugins:o,artifactService:new qe,sessionService:new te,memoryService:new Ge})}};import{Type as yn}from"@google/genai";var En=class{constructor(e){this.toolContext=e;this.invocationContext=e.invocationContext}async saveArtifact(e){return this.toolContext.saveArtifact(e.filename,e.artifact)}async loadArtifact(e){return this.toolContext.loadArtifact(e.filename,e.version)}async listArtifactKeys(){return this.toolContext.listArtifacts()}async deleteArtifact(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.deleteArtifact(e)}async listVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listVersions(e)}listArtifactVersions(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.listArtifactVersions(e)}getArtifactVersion(e){if(!this.toolContext.invocationContext.artifactService)throw new Error("Artifact service is not initialized.");return this.toolContext.invocationContext.artifactService.getArtifactVersion(e)}};var lr=Symbol.for("google.adk.agentTool");function Yl(n){return typeof n=="object"&&n!==null&&lr in n&&n[lr]===!0}var js,Vs,ur=class extends(Vs=R,js=lr,Vs){constructor(t){super({name:t.agent.name,description:t.agent.description||""});this[js]=!0;this.agent=t.agent,this.skipSummarization=t.skipSummarization||!1}_getDeclaration(){let t;if(y(this.agent)&&this.agent.inputSchema?t={name:this.name,description:this.description,parameters:this.agent.inputSchema}:t={name:this.name,description:this.description,parameters:{type:yn.OBJECT,properties:{request:{type:yn.STRING}},required:["request"]}},this.apiVariant!=="GEMINI_API"){let o=y(this.agent)&&this.agent.outputSchema;t.response=o?{type:yn.OBJECT}:{type:yn.STRING}}return t}async runAsync({args:t,toolContext:o}){var f,d,p,g,C,h;this.skipSummarization&&(o.actions.skipSummarization=!0);let i={role:"user",parts:[{text:y(this.agent)&&this.agent.inputSchema?JSON.stringify(t):t.request}]},s=new ge({appName:this.agent.name,agent:this.agent,artifactService:new En(o),sessionService:(f=o.invocationContext.sessionService)!=null?f:new te,memoryService:(d=o.invocationContext.memoryService)!=null?d:new Ge,credentialService:o.invocationContext.credentialService}),a=await s.sessionService.createSession({appName:this.agent.name,userId:o.invocationContext.userId,sessionId:o.invocationContext.session.id,state:o.state.toRecord()});if((p=o.abortSignal)!=null&&p.aborted)return"";let c;for await(let A of s.runAsync({userId:a.userId,sessionId:a.id,newMessage:i,abortSignal:o.abortSignal})){if((g=o.abortSignal)!=null&&g.aborted)return;A.actions.stateDelta&&o.state.update(A.actions.stateDelta),c=A}if(!((h=(C=c==null?void 0:c.content)==null?void 0:C.parts)!=null&&h.length))return"";let l=y(this.agent)&&this.agent.outputSchema,u=c.content.parts.map(A=>A.text).filter(A=>A).join(`
|
|
100
|
+
`);return l?JSON.parse(u):u}};var xn=class extends R{constructor(){super({name:"exit_loop",description:`Exits the loop.
|
|
92
101
|
|
|
93
|
-
Call this function only when you are instructed to do so.`})}_getDeclaration(){return{name:this.name,description:this.description}}async runAsync({toolContext:e}){return e.actions.escalate=!0,e.actions.skipSummarization=!0,""}},
|
|
102
|
+
Call this function only when you are instructed to do so.`})}_getDeclaration(){return{name:this.name,description:this.description}}async runAsync({toolContext:e}){return e.actions.escalate=!0,e.actions.skipSummarization=!0,""}},Jl=new xn;var Tn=class extends R{constructor(){super({name:"google_search",description:"Google Search Tool"})}runAsync(){return Promise.resolve()}async processLlmRequest({llmRequest:e}){if(e.model){if(e.config=e.config||{},e.config.tools=e.config.tools||[],Pi(e.model)){if(e.config.tools.length>0)throw new Error("Google search tool can not be used with other tools in Gemini 1.x.");e.config.tools.push({googleSearchRetrieval:{}});return}if(ki(e.model)){e.config.tools.push({googleSearch:{}});return}throw new Error(`Google search tool is not supported for model ${e.model}`)}}},Xl=new Tn;import{Type as fr}from"@google/genai";var Ql=Dn(),Zl=["image/","audio/","video/"],eu=new Set(["application/pdf"]),tu=new Set(["application/csv","application/json","application/xml"]);function zs(n){if(n)return n.split(";")[0].trim()}function nu(n){let e=zs(n);return e?Zl.some(t=>e.startsWith(t))||eu.has(e):!1}function ou(n,e){let t=n.inlineData;if(!t||nu(t.mimeType))return n;let o=zs(t.mimeType)||"application/octet-stream",r=t.data;if(!r)return{text:`[Artifact: ${e}, type: ${o}. No inline data was provided.]`};let i=o.startsWith("text/")||tu.has(o),s=Buffer.from(r,"base64");if(i)try{return{text:s.toString("utf8")}}catch{}let a=s.length/1024;return{text:`[Binary artifact: ${e}, type: ${o}, size: ${a.toFixed(1)} KB. Content cannot be displayed inline.]`}}var Sn=class extends R{constructor(){super({name:"load_artifacts",description:`Loads artifacts into the session for this request.
|
|
94
103
|
|
|
95
|
-
NOTE: Call when you need access to artifacts (for example, uploads saved by the web UI).`})}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:
|
|
104
|
+
NOTE: Call when you need access to artifacts (for example, uploads saved by the web UI).`})}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:fr.OBJECT,properties:{artifact_names:{type:fr.ARRAY,items:{type:fr.STRING},description:"The names of the artifacts to load."}}}}}async runAsync({args:e}){return{artifact_names:e.artifact_names||[],status:"artifact contents temporarily inserted and removed. to access these artifacts, call load_artifacts tool again."}}async processLlmRequest(e){await super.processLlmRequest(e),await this.appendArtifactsToLlmRequest(e.toolContext,e.llmRequest)}async appendArtifactsToLlmRequest(e,t){if(!e.invocationContext.artifactService)return;let o=await e.listArtifacts();if(!o||o.length===0)return;q(t,[`You have a list of artifacts:
|
|
96
105
|
${JSON.stringify(o)}
|
|
97
106
|
|
|
98
107
|
When the user asks questions about any of the artifacts, you should call the
|
|
99
108
|
\`load_artifacts\` function to load the artifact. Always call load_artifacts
|
|
100
109
|
before answering questions related to the artifacts, regardless of whether the
|
|
101
110
|
artifacts have been loaded before. Do not depend on prior answers about the
|
|
102
|
-
artifacts.`]);let r=t.contents;if(r&&r.length>0){let i=r[r.length-1];if(i.role==="user"&&i.parts&&i.parts.length>0){let a=i.parts[0].functionResponse;if(a&&a.name==="load_artifacts"){let l=(a.response||{}).artifact_names||[];for(let u of l){let f=await e.loadArtifact(u);if(!f&&!u.startsWith("user:")){let p=`user:${u}`;f=await e.loadArtifact(p)}if(!f){
|
|
111
|
+
artifacts.`]);let r=t.contents;if(r&&r.length>0){let i=r[r.length-1];if(i.role==="user"&&i.parts&&i.parts.length>0){let a=i.parts[0].functionResponse;if(a&&a.name==="load_artifacts"){let l=(a.response||{}).artifact_names||[];for(let u of l){let f=await e.loadArtifact(u);if(!f&&!u.startsWith("user:")){let p=`user:${u}`;f=await e.loadArtifact(p)}if(!f){Ql.warn(`Artifact "${u}" not found, skipping`);continue}let d=ou(f,u);t.contents.push({role:"user",parts:[{text:`Artifact ${u} is:`},d]})}}}}}},ru=new Sn;import{Type as Ws}from"@google/genai";var Rn=class extends R{constructor(){super({name:"load_memory",description:`Loads the memory for the current user.
|
|
103
112
|
|
|
104
|
-
NOTE: Currently this tool only uses text part from the memory.`})}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:
|
|
105
|
-
you to look up the memory, you should call load_memory function with a query.`])}},
|
|
113
|
+
NOTE: Currently this tool only uses text part from the memory.`})}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:Ws.OBJECT,properties:{query:{type:Ws.STRING,description:"The query to load the memory for."}},required:["query"]}}}async runAsync({args:e,toolContext:t}){try{let o=e.query;if(!t.invocationContext.memoryService)throw new Error("Memory service is not initialized.");return{memories:(await t.searchMemory(o)).memories.map(i=>{var s,a;return{content:(a=(s=i.content.parts)==null?void 0:s.map(c=>{var l;return(l=c.text)!=null?l:""}).join(" "))!=null?a:"",author:i.author,timestamp:i.timestamp}})}}catch(o){throw console.error("ERROR in LoadMemoryTool runAsync:",o),o}}async processLlmRequest(e){await super.processLlmRequest(e),e.toolContext.invocationContext.memoryService&&q(e.llmRequest,[`You have memory. You can use it to answer questions. If any questions need
|
|
114
|
+
you to look up the memory, you should call load_memory function with a query.`])}},iu=new Rn;var Hs=`
|
|
106
115
|
|
|
107
|
-
NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,
|
|
116
|
+
NOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.`,dr=class extends me{constructor(e){super({...e,isLongRunning:!0})}_getDeclaration(){let e=super._getDeclaration();return e.description?e.description+=Hs:e.description=Hs.trimStart(),e}};var wn=class extends R{constructor(){super({name:"preload_memory",description:"preload_memory"})}async runAsync({args:e,toolContext:t}){throw new Error("PreloadMemoryTool should not be called by model")}async processLlmRequest(e){var c,l,u;await super.processLlmRequest(e);let t=e.toolContext.userContent;if(!t||!t.parts||!((c=t.parts[0])!=null&&c.text))return;let o=t.parts[0].text,r;try{if(!e.toolContext.invocationContext.memoryService)return;r=await e.toolContext.searchMemory(o)}catch{m.warn(`Failed to preload memory for query: ${o}`);return}if(!r.memories||r.memories.length===0)return;let i=[];for(let f of r.memories){let d=f.timestamp?`Time: ${f.timestamp}`:"";d&&i.push(d);let p=(u=(l=f.content.parts)==null?void 0:l.map(g=>{var C;return(C=g.text)!=null?C:""}).join(" "))!=null?u:"";p&&i.push(f.author?`${f.author}: ${p}`:p)}if(i.length===0)return;let a=`The following content is from your previous conversations with the user.
|
|
108
117
|
They may be useful for answering the user's current query.
|
|
109
118
|
<PAST_CONVERSATIONS>
|
|
110
119
|
${i.join(`
|
|
111
120
|
`)}
|
|
112
121
|
</PAST_CONVERSATIONS>
|
|
113
|
-
`;q(e.llmRequest,[a])}},bc=new qt;import{LockMode as Pc,MikroORM as _c}from"@mikro-orm/core";import{Entity as ut,JsonType as kc,PrimaryKey as U,Property as Y}from"@mikro-orm/core";var ho="schema_version",Co="1",go=class extends kc{convertToDatabaseValue(e){return JSON.stringify(Io(e))}convertToJSValue(e){return typeof e=="string"?Wt(JSON.parse(e)):Wt(e)}},Z=class{};S([U({type:"string"})],Z.prototype,"key",2),S([Y({type:"string"})],Z.prototype,"value",2),Z=S([ut({tableName:"adk_internal_metadata"})],Z);var B=class{constructor(){this.updateTime=new Date}};S([U({type:"string",fieldName:"app_name"})],B.prototype,"appName",2),S([Y({type:"json"})],B.prototype,"state",2),S([Y({type:"datetime",fieldName:"update_time",onCreate:()=>new Date,onUpdate:()=>new Date})],B.prototype,"updateTime",2),B=S([ut({tableName:"app_states"})],B);U.name;var M=class{constructor(){this.updateTime=new Date}};S([U({type:"string",fieldName:"app_name"})],M.prototype,"appName",2),S([U({type:"string",fieldName:"user_id"})],M.prototype,"userId",2),S([Y({type:"json"})],M.prototype,"state",2),S([Y({type:"datetime",fieldName:"update_time",onCreate:()=>new Date,onUpdate:()=>new Date})],M.prototype,"updateTime",2),M=S([ut({tableName:"user_states"})],M);U.name;var L=class{constructor(){this.createTime=new Date;this.updateTime=new Date}};S([U({type:"string"})],L.prototype,"id",2),S([U({type:"string",fieldName:"app_name"})],L.prototype,"appName",2),S([U({type:"string",fieldName:"user_id"})],L.prototype,"userId",2),S([Y({type:"json"})],L.prototype,"state",2),S([Y({type:"datetime",fieldName:"create_time",onCreate:()=>new Date})],L.prototype,"createTime",2),S([Y({type:"datetime",fieldName:"update_time",onCreate:()=>new Date})],L.prototype,"updateTime",2),L=S([ut({tableName:"sessions"})],L);U.name;var O=class{};S([U({type:"string"})],O.prototype,"id",2),S([U({type:"string",fieldName:"app_name"})],O.prototype,"appName",2),S([U({type:"string",fieldName:"user_id"})],O.prototype,"userId",2),S([U({type:"string",fieldName:"session_id"})],O.prototype,"sessionId",2),S([Y({type:"string",fieldName:"invocation_id"})],O.prototype,"invocationId",2),S([Y({type:"datetime"})],O.prototype,"timestamp",2),S([Y({type:go,fieldName:"event_data"})],O.prototype,"eventData",2),O=S([ut({tableName:"events"})],O);var ft=[Z,B,M,L,O];async function Di(n){let e;if(n.startsWith("postgres://")||n.startsWith("postgresql://")){let{PostgreSqlDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/postgresql"),1));e=l}else if(n.startsWith("mysql://")){let{MySqlDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/mysql"),1));e=l}else if(n.startsWith("mariadb://")){let{MariaDbDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/mariadb"),1));e=l}else if(n.startsWith("sqlite://")){let{SqliteDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/sqlite"),1));e=l}else if(n.startsWith("mssql://")){let{MsSqlDriver:l}=await Promise.resolve().then(()=>Fe(Be("@mikro-orm/mssql"),1));e=l}else throw new Error(`Unsupported database URI: ${n}`);if(n==="sqlite://:memory:")return{entities:ft,dbName:":memory:",driver:e};let{host:t,port:o,username:r,password:i,pathname:s}=new URL(n),a=t.split(":")[0],c=n.startsWith("sqlite://")?n.substring(9):s.slice(1);return{entities:ft,dbName:c,host:a,port:o?parseInt(o):void 0,user:r,password:i,driver:e}}async function Bi(n){await n.schema.ensureDatabase(),await n.schema.updateSchema({safe:!0})}async function Fi(n){let e=n.em.fork(),t=await e.findOne(Z,{key:ho});if(t){if(t.value!==Co)throw new Error(`ADK Database schema version ${t.value} is not compatible.`);return}let o=e.create(Z,{key:ho,value:Co});await e.persist(o).flush()}function Ui(n){return n?n.startsWith("postgres://")||n.startsWith("postgresql://")||n.startsWith("mysql://")||n.startsWith("mariadb://")||n.startsWith("mssql://")||n.startsWith("sqlite://"):!1}var dt=class extends Ee{constructor(t){super();this.initialized=!1;if(typeof t=="string")this.connectionString=t;else{if(!t.driver)throw new Error("Driver is required when passing options object.");this.options={...t,entities:ft}}}async init(){this.initialized||(this.connectionString&&(!this.options||!this.options.driver)&&(this.options=await Di(this.connectionString)),this.orm=await _c.init(this.options),await Bi(this.orm),await Fi(this.orm),this.initialized=!0)}async createSession({appName:t,userId:o,state:r,sessionId:i}){await this.init();let s=this.orm.em.fork(),a=i||b(),c=new Date;if(await s.findOne(L,{id:a,appName:t,userId:o}))throw new Error(`Session with id ${a} already exists.`);let u=await s.findOne(B,{appName:t});u||(u=s.create(B,{appName:t,state:{},updateTime:c}),s.persist(u));let f=await s.findOne(M,{appName:t,userId:o});f||(f=s.create(M,{appName:t,userId:o,state:{}}),s.persist(f));let d={},p={},m={};if(r)for(let[y,$]of Object.entries(r))y.startsWith(E.APP_PREFIX)?d[y.replace(E.APP_PREFIX,"")]=$:y.startsWith(E.USER_PREFIX)?p[y.replace(E.USER_PREFIX,"")]=$:m[y]=$;Object.keys(d).length>0&&(u.state={...u.state,...d}),Object.keys(p).length>0&&(f.state={...f.state,...p});let h=s.create(L,{id:a,appName:t,userId:o,state:m,createTime:c,updateTime:c});s.persist(h),await s.flush();let C=ie(u.state,f.state,m);return de({id:a,appName:t,userId:o,state:C,events:[],lastUpdateTime:h.createTime.getTime()})}async getSession({appName:t,userId:o,sessionId:r,config:i}){await this.init();let s=this.orm.em.fork(),a=await s.findOne(L,{appName:t,userId:o,id:r});if(!a)return;let c={appName:t,userId:o,sessionId:r};i!=null&&i.afterTimestamp&&(c.timestamp={$gt:new Date(i.afterTimestamp)});let l=await s.find(O,c,{orderBy:{timestamp:"DESC"},limit:i==null?void 0:i.numRecentEvents});l.reverse();let u=await s.findOne(B,{appName:t}),f=await s.findOne(M,{appName:t,userId:o}),d=ie((u==null?void 0:u.state)||{},(f==null?void 0:f.state)||{},a.state);return de({id:r,appName:t,userId:o,state:d,events:l.map(p=>p.eventData),lastUpdateTime:a.updateTime.getTime()})}async listSessions({appName:t,userId:o}){await this.init();let r=this.orm.em.fork(),i={appName:t};o&&(i.userId=o);let s=await r.find(L,i),a=await r.findOne(B,{appName:t}),c=(a==null?void 0:a.state)||{},l={};if(o){let f=await r.findOne(M,{appName:t,userId:o});f&&(l[o]=f.state)}else{let f=await r.find(M,{appName:t});for(let d of f)l[d.userId]=d.state}return{sessions:s.map(f=>{let d=l[f.userId]||{},p=ie(c,d,f.state);return de({id:f.id,appName:f.appName,userId:f.userId,state:p,events:[],lastUpdateTime:f.updateTime.getTime()})})}}async deleteSession({appName:t,userId:o,sessionId:r}){await this.init();let i=this.orm.em.fork();await i.nativeDelete(L,{appName:t,userId:o,id:r}),await i.nativeDelete(O,{appName:t,userId:o,sessionId:r})}async appendEvent({session:t,event:o}){await this.init();let r=this.orm.em.fork();if(o.partial)return o;let i=Yn(o);return await r.transactional(async s=>{let a=await s.findOne(L,{appName:t.appName,userId:t.userId,id:t.id},{lockMode:Pc.PESSIMISTIC_WRITE});if(!a)throw new Error(`Session ${t.id} not found for appendEvent`);let c=await s.findOne(B,{appName:t.appName});c||(c=s.create(B,{appName:t.appName,state:{},updateTime:new Date}),s.persist(c));let l=await s.findOne(M,{appName:t.appName,userId:t.userId});if(l||(l=s.create(M,{appName:t.appName,userId:t.userId,state:{}}),s.persist(l)),a.updateTime.getTime()>t.lastUpdateTime){let d=await s.find(O,{appName:t.appName,userId:t.userId,sessionId:t.id},{orderBy:{timestamp:"ASC"}}),p=ie(c.state,l.state,a.state);t.state=p,t.events=d.map(m=>m.eventData)}if(o.actions&&o.actions.stateDelta){let d={},p={},m={};for(let[h,C]of Object.entries(o.actions.stateDelta))h.startsWith(E.APP_PREFIX)?d[h.replace(E.APP_PREFIX,"")]=C:h.startsWith(E.USER_PREFIX)?p[h.replace(E.USER_PREFIX,"")]=C:m[h]=C;Object.keys(d).length>0&&(c.state={...c.state,...d}),Object.keys(p).length>0&&(l.state={...l.state,...p}),Object.keys(m).length>0&&(a.state={...a.state,...m})}let u=s.create(O,{id:i.id,appName:t.appName,userId:t.userId,sessionId:t.id,invocationId:i.invocationId,timestamp:new Date(i.timestamp),eventData:i});s.persist(u),await s.commit(),a.updateTime=new Date(o.timestamp);let f=ie(c.state,l.state,a.state);t.state=f,t.events.push(o),t.lastUpdateTime=a.updateTime.getTime()}),o}};function Lc(n){if(di(n))return new X;if(Ui(n))return new dt(n);throw new Error(`Unsupported session service URI: ${n}`)}import{MetricExporter as Oc}from"@google-cloud/opentelemetry-cloud-monitoring-exporter";import{TraceExporter as Mc}from"@google-cloud/opentelemetry-cloud-trace-exporter";import{gcpDetector as Nc}from"@opentelemetry/resource-detector-gcp";import{detectResources as Dc}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as Bc}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Fc}from"@opentelemetry/sdk-trace-base";import{GoogleAuth as Uc}from"google-auth-library";var $c="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function Gc(){try{return await new Uc().getProjectId()||void 0}catch{return}}async function $A(n={}){let{enableTracing:e=!1,enableMetrics:t=!1}=n,o=await Gc();return o?{spanProcessors:e?[new Fc(new Mc({projectId:o}))]:[],metricReaders:t?[new Bc({exporter:new Oc({projectId:o}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(g.warn($c),{})}function GA(){return Dc({detectors:[Nc]})}import{metrics as qc,trace as Vc}from"@opentelemetry/api";import{logs as jc}from"@opentelemetry/api-logs";import{OTLPLogExporter as zc}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Hc}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Wc}from"@opentelemetry/exporter-trace-otlp-http";import{detectResources as Kc}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Xc,LoggerProvider as Yc}from"@opentelemetry/sdk-logs";import{MeterProvider as Jc,PeriodicExportingMetricReader as Qc}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Zc}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as el}from"@opentelemetry/sdk-trace-node";function oE(n=[],e){let t=e||tl(),o=[...n,ol()],r=o.flatMap(a=>a.spanProcessors||[]),i=o.flatMap(a=>a.metricReaders||[]),s=o.flatMap(a=>a.logRecordProcessors||[]);if(r.length>0){let a=new el({resource:t,spanProcessors:r});a.register(),Vc.setGlobalTracerProvider(a)}if(i.length>0){let a=new Jc({readers:i,resource:t});qc.setGlobalMeterProvider(a)}if(s.length>0){let a=new Yc({resource:t,processors:s});jc.setGlobalLoggerProvider(a)}}function tl(){return Kc({detectors:[]})}function nl(){return{enableTracing:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT),enableMetrics:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT),enableLogging:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT)}}function ol(n=nl()){let{enableTracing:e,enableMetrics:t,enableLogging:o}=n;return{spanProcessors:e?[new Zc(new Wc)]:[],metricReaders:t?[new Qc({exporter:new Hc})]:[],logRecordProcessors:o?[new Xc(new zc)]:[]}}import{Client as rl}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as il}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as sl}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var Vt=class{constructor(e){this.connectionParams=e}async createSession(){var t;let e=new rl({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new il(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":{let o=(t=this.connectionParams.transportOptions)!=null?t:{};!o.requestInit&&this.connectionParams.header!==void 0&&(o.requestInit={headers:this.connectionParams.header}),await e.connect(new sl(new URL(this.connectionParams.url),o));break}default:{let o=this.connectionParams;break}}return e}};import{Type as ee}from"@google/genai";import{z as De}from"zod";var mE=De.object({type:De.literal("object"),properties:De.record(De.string(),De.unknown()).optional(),required:De.string().array().optional()});function al(n){if(!n)return ee.TYPE_UNSPECIFIED;switch(n.toLowerCase()){case"text":case"string":return ee.STRING;case"number":return ee.NUMBER;case"boolean":return ee.BOOLEAN;case"integer":return ee.INTEGER;case"array":return ee.ARRAY;case"object":return ee.OBJECT;default:return ee.TYPE_UNSPECIFIED}}function vo(n){if(!n)return;function e(t){if(!t.type&&t.anyOf&&Array.isArray(t.anyOf)){let i=t.anyOf.find(s=>{let a=s.type;return a!=="null"&&a!=="NULL"});i&&(t=i)}t.type||(t.properties||t.$ref?t.type="object":t.items&&(t.type="array"));let o=al(t.type),r={type:o,description:t.description};if(o===ee.OBJECT){if(r.properties={},t.properties)for(let i in t.properties)r.properties[i]=e(t.properties[i]);r.required=t.required}else o===ee.ARRAY&&t.items&&(r.items=e(t.items));return r}return e(n)}var jt=class extends P{constructor(e,t){super({name:e.name,description:e.description||""}),this.mcpTool=e,this.mcpSessionManager=t}_getDeclaration(){return{name:this.mcpTool.name,description:this.mcpTool.description,parameters:vo(this.mcpTool.inputSchema),response:vo(this.mcpTool.outputSchema)}}async runAsync(e){let t=await this.mcpSessionManager.createSession(),o={};return o.params={name:this.mcpTool.name,arguments:e.args},await t.callTool(o.params)}};var $i=class extends tt{constructor(e,t=[],o){super(t,o),this.mcpSessionManager=new Vt(e)}async getTools(){let t=await(await this.mcpSessionManager.createSession()).listTools();g.debug(`number of tools: ${t.tools.length}`);for(let o of t.tools)g.debug(`tool: ${o.name}`);return t.tools.map(o=>{let r={...o,name:this.prefix?`${this.prefix}_${o.name}`:o.name};return new jt(r,this.mcpSessionManager)})}async close(){}};export{it as A2AAgentExecutor,Oa as AGENT_CARD_PATH,Zn as ActiveStreamingTool,fo as AgentTool,we as ApigeeLlm,Si as AuthCredentialTypes,G as BaseAgent,Ye as BaseCodeExecutor,io as BaseExampleProvider,Ie as BaseLlm,D as BaseLlmRequestProcessor,Cn as BaseLlmResponseProcessor,Re as BasePlugin,Ee as BaseSessionService,P as BaseTool,tt as BaseToolset,Qe as BuiltInCodeExecutor,kt as CONTENT_REQUEST_PROCESSOR,bt as ContentRequestProcessor,N as Context,Pe as ContextCompactorRequestProcessor,dt as DatabaseSessionService,vc as EXIT_LOOP,Ri as EventType,Ft as ExitLoopTool,st as FileArtifactService,oe as FunctionTool,Ac as GOOGLE_SEARCH,ct as GcsArtifactService,fe as Gemini,xt as GoogleLLMVariant,Ut as GoogleSearchTool,ye as InMemoryArtifactService,Se as InMemoryMemoryService,Nt as InMemoryPolicyEngine,lo as InMemoryRunner,X as InMemorySessionService,j as InvocationContext,ge as LLMRegistry,Ic as LOAD_ARTIFACTS,wc as LOAD_MEMORY,eo as LiveRequestQueue,Nn as LlmAgent,to as LlmSummarizer,$t as LoadArtifactsTool,Gt as LoadMemoryTool,Go as LogLevel,so as LoggingPlugin,mo as LongRunningFunctionTool,Bn as LoopAgent,Vt as MCPSessionManager,jt as MCPTool,$i as MCPToolset,bc as PRELOAD_MEMORY,Un as ParallelAgent,rt as PluginManager,Pi as PolicyOutcome,qt as PreloadMemoryTool,ki as REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,w as ReadonlyContext,Wn as RemoteA2AAgent,re as Runner,co as SecurityPlugin,qn as SequentialAgent,E as State,Pt as StreamingMode,no as TokenBasedContextCompactor,me as ToolConfirmation,oo as TruncatingContextCompactor,A as createEvent,F as createEventActions,de as createSession,Ms as functionsExportedForTestingOnly,yt as geminiInitParams,zn as getA2AAgentCard,ac as getArtifactServiceFromUri,hc as getAskUserConfirmationFunctionCalls,I as getFunctionCalls,V as getFunctionResponses,$A as getGcpExporters,GA as getGcpResource,en as getLogger,Lc as getSessionServiceFromUri,Ro as hasTrailingCodeExecutionResult,Cc as isAgentTool,ts as isBaseAgent,pc as isBaseExampleProvider,sn as isBaseLlm,Xe as isBaseTool,jn as isBaseToolset,H as isCompactedEvent,ae as isFinalResponse,Gs as isFunctionTool,Je as isGemini2OrAbove,T as isLlmAgent,_e as isLoopAgent,Le as isParallelAgent,Xn as isRunner,Oe as isSequentialAgent,oE as maybeSetOtelProviders,ie as mergeStates,ss as setLogLevel,is as setLogger,Ue as stringifyContent,Xa as toA2a,dc as toStructuredEvents,Yn as trimTempDeltaState,$e as version,be as zodObjectToSchema};
|
|
122
|
+
`;q(e.llmRequest,[a])}},su=new wn;import{Type as au}from"@google/genai";function Ks(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function In(n){if(!n||n.length===0)return`<available_skills>
|
|
123
|
+
</available_skills>`;let e=["<available_skills>"];for(let t of n){let o="frontmatter"in t?t.frontmatter:t;e.push(" <skill>"),e.push(` <name>${Ks(o.name)}</name>`),e.push(` <description>${Ks(o.description)}</description>`),e.push(" </skill>")}return e.push("</available_skills>"),e.join(`
|
|
124
|
+
`)}var je=class extends R{constructor(t){super({name:"list_skills",description:"Lists all available skills with their names and descriptions."});this.toolset=t}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:au.OBJECT,properties:{}}}}async runAsync(t){let o=Object.values(this.toolset.skills);return In(o)}};je=v([k],je);import{Type as pr}from"@google/genai";import cu from"path";var Ys="Binary file detected. The content has been injected into the conversation history for you to analyze.",lu={pdf:"application/pdf",jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",csv:"text/csv",json:"application/json",xml:"application/xml",sh:"text/x-shellscript",bash:"text/x-shellscript",py:"text/x-python",js:"text/javascript",cjs:"text/javascript",mjs:"text/javascript",ts:"text/javascript",cts:"text/javascript",mts:"text/javascript"};function uu(n){var t;let e=((t=n.split(".").pop())==null?void 0:t.toLowerCase())||"";return lu[e]||"application/octet-stream"}var Ve=class extends R{constructor(t){super({name:"load_skill_resource",description:"Loads a resource file (from references/, assets/, or scripts/) from within a skill."});this.toolset=t}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:pr.OBJECT,properties:{skill_name:{type:pr.STRING,description:"The name of the skill."},path:{type:pr.STRING,description:"The relative path to the resource (e.g., 'references/my_doc.md', 'assets/template.txt', or 'scripts/setup.sh')."}},required:["skill_name","path"]}}}async runAsync({args:t}){var c,l,u;let o=t.skill_name,r=t.path;if(!o)return{error:"Skill name is required.",error_code:"MISSING_SKILL_NAME"};if(!r)return{error:"Resource path is required.",error_code:"MISSING_RESOURCE_PATH"};r=cu.posix.normalize(r);let i=this.toolset.getSkill(o);if(!i)return{error:`Skill '${o}' not found.`,error_code:"SKILL_NOT_FOUND"};let s,a=i.resources||{};if(r.startsWith("references/")){let f=r.substring(11);s=(c=a.references)==null?void 0:c[f]}else if(r.startsWith("assets/")){let f=r.substring(7);s=(l=a.assets)==null?void 0:l[f]}else if(r.startsWith("scripts/")){let f=r.substring(8),d=(u=a.scripts)==null?void 0:u[f];d&&(s=d.src)}else return{error:"Path must start with 'references/', 'assets/', or 'scripts/'.",error_code:"INVALID_RESOURCE_PATH"};return s===void 0?{error:`Resource '${r}' not found in skill '${o}'.`,error_code:"RESOURCE_NOT_FOUND"}:Buffer.isBuffer(s)?{skill_name:o,path:r,status:Ys}:{skill_name:o,path:r,content:s}}async processLlmRequest(t){var i,s;await super.processLlmRequest(t);let o=t.llmRequest;if(!o.contents||o.contents.length===0)return;let r=o.contents[o.contents.length-1];if(!(r.role!=="user"||!r.parts)){for(let a of r.parts)if(a.functionResponse&&a.functionResponse.name===this.name){let c=a.functionResponse.response||{};if(c.status===Ys){let l=c.skill_name,u=c.path,f=this.toolset.getSkill(l);if(!f)continue;let d=f.resources||{},p;if(u.startsWith("references/")?p=(i=d.references)==null?void 0:i[u.substring(11)]:u.startsWith("assets/")&&(p=(s=d.assets)==null?void 0:s[u.substring(7)]),Buffer.isBuffer(p)){let g=uu(u);o.contents.push({role:"user",parts:[{text:`The content of binary file '${u}' is:`},{inlineData:{data:p.toString("base64"),mimeType:g}}]})}}}}}};Ve=v([k],Ve);import{Type as Js}from"@google/genai";var ze=class extends R{constructor(t){super({name:"load_skill",description:"Loads the SKILL.md instructions for a given skill."});this.toolset=t}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:Js.OBJECT,properties:{name:{type:Js.STRING,description:"The name of the skill to load."}},required:["name"]}}}async runAsync({args:t,toolContext:o}){let r=t.name;if(!r)return{error:"Skill name is required.",error_code:"MISSING_SKILL_NAME"};let i=this.toolset.getSkill(r);if(!i)return{error:`Skill '${r}' not found.`,error_code:"SKILL_NOT_FOUND"};let a=`_adk_activated_skill_${o.invocationContext.agent.name}`,c=o.state.get(a)||[];return c.includes(r)||o.state.set(a,[...c,r]),{skill_name:r,instructions:i.instructions,frontmatter:i.frontmatter,resources:i.resources}}};ze=v([k],ze);import{Type as at}from"@google/genai";var We=class extends R{constructor(t){super({name:"run_skill_inline_script",description:"Executes an inline script provided directly in the request."});this.toolset=t}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:at.OBJECT,properties:{script_content:{type:at.STRING,description:"The content of the script to execute."},language:{type:at.STRING,description:"The language/type of the script.",enum:Object.values(Te).filter(t=>t!=="unspecified")},args:{anyOf:[{type:at.OBJECT},{type:at.ARRAY,items:{type:at.STRING}}],description:"Optional arguments to pass to the script as key-value pairs or an array of strings."}},required:["script_content","language"]}}}async runAsync({args:t,toolContext:o}){var c;let r=t.script_content,i=t.language,s=t.args;if(!r)return{error:"Script content is required.",errorCode:"MISSING_SCRIPT_CONTENT"};if(!i)return{error:"Language is required.",errorCode:"MISSING_LANGUAGE"};let a=(c=this.toolset)==null?void 0:c.codeExecutor;if(!a){let l=o.invocationContext.agent;y(l)&&(a=l.codeExecutor)}if(!a)return{error:"No code executor configured.",errorCode:"NO_CODE_EXECUTOR"};try{let l=await a.executeCode({invocationContext:o.invocationContext,codeExecutionInput:{code:r,inputFiles:[],language:i,args:s}});return l.outputFiles=await it(l.outputFiles),l}catch(l){return{error:`Failed to execute inline script: ${l.message}`,errorCode:"EXECUTION_ERROR"}}}};We=v([k],We);import{Type as bn}from"@google/genai";import*as mr from"path";var He=class extends R{constructor(t){super({name:"run_skill_script",description:"Executes a script from a skill's scripts/ directory."});this.toolset=t}_getDeclaration(){return{name:this.name,description:this.description,parameters:{type:bn.OBJECT,properties:{skill_name:{type:bn.STRING,description:"The name of the skill."},script_path:{type:bn.STRING,description:"The relative path to the script (e.g., 'scripts/setup.js')."},args:{type:bn.OBJECT,description:"Optional arguments to pass to the script as key-value pairs."}},required:["skill_name","script_path"]}}}async runAsync({args:t,toolContext:o}){var f,d,p,g;let r=t.skill_name,i=t.script_path,s=t.args||{};if(!r)return{error:"Skill name is required.",errorCode:"MISSING_SKILL_NAME"};if(!i)return{error:"Script path is required.",errorCode:"MISSING_SCRIPT_PATH"};let a=this.toolset.getSkill(r);if(!a)return{error:`Skill '${r}' not found.`,errorCode:"SKILL_NOT_FOUND"};let c=i.startsWith("scripts/")?i.substring(8):i,l=(d=(f=a.resources)==null?void 0:f.scripts)==null?void 0:d[c];if(l||(l=(g=(p=a.resources)==null?void 0:p.scripts)==null?void 0:g[i]),!l)return{error:`Script '${i}' not found in skill '${r}'.`,errorCode:"SCRIPT_NOT_FOUND"};let u=this.toolset.codeExecutor;if(!u){let C=o.invocationContext.agent;y(C)&&(u=C.codeExecutor)}if(!u)return{error:"No code executor configured.",errorCode:"NO_CODE_EXECUTOR"};try{let C=Os(mr.extname(i)),h=await u.executeCode({invocationContext:o.invocationContext,codeExecutionInput:{code:fu(i,C),inputFiles:du(a),language:C,args:s}});return h.outputFiles=await it(h.outputFiles),h}catch(C){return{error:`Failed to execute script '${i}': ${C.message}`,errorCode:"EXECUTION_ERROR"}}}};He=v([k],He);function fu(n,e){switch(e){case"javascript":return`require('./${n}');`;case"typescript":return`require('ts-node/register');
|
|
125
|
+
require('./${n}');`;case"python":return`import runpy
|
|
126
|
+
runpy.run_path('./${n}', run_name='__main__')`;case"shell":return`source ./${n} "$@"`;case"powershell":return`& .\\${n.replace(/\//g,"\\\\")} $args`;case"cmd":return`call .\\${n.replace(/\//g,"\\\\")} %*`;default:throw new Error(`Unsupported wrapper language: ${e}`)}}function du(n){var t,o,r;let e=[];for(let i of["references","assets","scripts"]){let s=(o=(t=n.resources)==null?void 0:t[i])!=null?o:{};for(let a of Object.keys(s)){let c=(r=s[a])!=null?r:void 0;if(c===void 0)continue;let l;if(typeof c=="string"||Buffer.isBuffer(c)?l=c:typeof c=="object"&&c!==null&&"src"in c&&typeof c.src=="string"&&(l=c.src),l===void 0)continue;let u=mr.extname(a).toLowerCase(),{encoding:f,mimeType:d}=hn(u);e.push({name:`${i}/${a}`,content:Buffer.from(l).toString(f),contentEncoding:f,mimeType:d})}}return e}var pu="You can use specialized 'skills' to help you with complex tasks. You MUST use the skill tools to interact with these skills.\n\nSkills are folders of instructions and resources that extend your capabilities for specialized tasks. Each skill folder contains:\n- **SKILL.md** (required): The main instruction file with skill metadata and detailed markdown instructions.\n- **references/** (Optional): Additional documentation or examples for skill usage.\n- **assets/** (Optional): Templates, scripts or other resources used by the skill.\n- **scripts/** (Optional): Executable scripts that can be run via bash.\n\nThis is very important:\n\n1. If a skill seems relevant to the current user query, you MUST use the `load_skill` tool with `name=\"<SKILL_NAME>\"` to read its full instructions before proceeding.\n2. Once you have read the instructions, follow them exactly as documented before replying to the user. For example, If the instruction lists multiple steps, please make sure you complete all of them in order.\n3. The `load_skill_resource` tool is for viewing files within a skill's directory (e.g., `references/*`, `assets/*`, `scripts/*`). Do NOT use other tools to access these files.\n4. Use `run_skill_script` to run scripts from a skill's `scripts/` directory. Use `load_skill_resource` to view script content first if needed.\n",Dt=class extends Se{constructor(t,o={}){super([],"adk_skill_toolset");this.toolCache=new Map;this.skills=Array.isArray(t)?Object.fromEntries(t.map(r=>[r.frontmatter.name,r])):t,this.codeExecutor=o.codeExecutor,this.additionalTools=o.additionalTools||[],this.tools=[new je(this),new ze(this),new Ve(this),new He(this),new We(this)]}async getTools(t){let o=await this.resolveAdditionalTools(t);return[...this.tools,...o]}async close(){}getSkill(t){return this.skills[t]}async processLlmRequest(t,o){await super.processLlmRequest(t,o);let r=Object.values(this.skills),i=In(r);q(o,[pu,i])}async resolveAdditionalTools(t){if(!t)return[];let o=t.agentName,r=`_adk_activated_skill_${o}`,i=t.state.get(r)||[];if(i.length===0)return[];let s=`${o}:${i.join(",")}`;if(this.toolCache.has(s))return this.toolCache.get(s);let a=new Set;for(let f of i){let d=this.skills[f];if(d&&d.frontmatter.metadata){let p=d.frontmatter.metadata.adk_additional_tools;p&&p.forEach(g=>a.add(g))}}if(a.size===0)return this.toolCache.set(s,[]),[];let c={};for(let f of this.additionalTools)if(f instanceof R){if(c[f.name])throw new Error(`Duplicate tool name: ${f.name}`);c[f.name]=f}else if(f instanceof Se){let d=await f.getTools(t);for(let p of d){if(c[p.name])throw new Error(`Duplicate tool name: ${p.name}`);c[p.name]=p}}let l=[],u=new Set(this.tools.map(f=>f.name));for(let f of a)if(c[f]){let d=c[f];u.has(d.name)||(l.push(d),u.add(d.name))}return this.toolCache.set(s,l),l}};Dt=v([k],Dt);import{LockMode as gu,MikroORM as hu}from"@mikro-orm/core";import{Entity as Ut,JsonType as mu,PrimaryKey as W,Property as oe}from"@mikro-orm/core";var hr="schema_version",Cr="1",gr=class extends mu{convertToDatabaseValue(e){return JSON.stringify(br(e))}convertToJSValue(e){return typeof e=="string"?On(JSON.parse(e)):On(e)}},le=class{};v([W({type:"string"})],le.prototype,"key",2),v([oe({type:"string"})],le.prototype,"value",2),le=v([Ut({tableName:"adk_internal_metadata"})],le);var G=class{constructor(){this.updateTime=new Date}};v([W({type:"string",fieldName:"app_name"})],G.prototype,"appName",2),v([oe({type:"json"})],G.prototype,"state",2),v([oe({type:"datetime",fieldName:"update_time",onCreate:()=>new Date,onUpdate:()=>new Date})],G.prototype,"updateTime",2),G=v([Ut({tableName:"app_states"})],G);W.name;var D=class{constructor(){this.updateTime=new Date}};v([W({type:"string",fieldName:"app_name"})],D.prototype,"appName",2),v([W({type:"string",fieldName:"user_id"})],D.prototype,"userId",2),v([oe({type:"json"})],D.prototype,"state",2),v([oe({type:"datetime",fieldName:"update_time",onCreate:()=>new Date,onUpdate:()=>new Date})],D.prototype,"updateTime",2),D=v([Ut({tableName:"user_states"})],D);W.name;var M=class{constructor(){this.createTime=new Date;this.updateTime=new Date}};v([W({type:"string"})],M.prototype,"id",2),v([W({type:"string",fieldName:"app_name"})],M.prototype,"appName",2),v([W({type:"string",fieldName:"user_id"})],M.prototype,"userId",2),v([oe({type:"json"})],M.prototype,"state",2),v([oe({type:"datetime",fieldName:"create_time",onCreate:()=>new Date})],M.prototype,"createTime",2),v([oe({type:"datetime",fieldName:"update_time",onCreate:()=>new Date})],M.prototype,"updateTime",2),M=v([Ut({tableName:"sessions"})],M);W.name;var B=class{};v([W({type:"string"})],B.prototype,"id",2),v([W({type:"string",fieldName:"app_name"})],B.prototype,"appName",2),v([W({type:"string",fieldName:"user_id"})],B.prototype,"userId",2),v([W({type:"string",fieldName:"session_id"})],B.prototype,"sessionId",2),v([oe({type:"string",fieldName:"invocation_id"})],B.prototype,"invocationId",2),v([oe({type:"datetime"})],B.prototype,"timestamp",2),v([oe({type:gr,fieldName:"event_data"})],B.prototype,"eventData",2),B=v([Ut({tableName:"events"})],B);var $t=[le,G,D,M,B];async function Xs(n){let e;if(n.startsWith("postgres://")||n.startsWith("postgresql://")){let{PostgreSqlDriver:t}=await Promise.resolve().then(()=>dt(ft("@mikro-orm/postgresql"),1));e=t}else if(n.startsWith("mysql://")){let{MySqlDriver:t}=await Promise.resolve().then(()=>dt(ft("@mikro-orm/mysql"),1));e=t}else if(n.startsWith("mariadb://")){let{MariaDbDriver:t}=await Promise.resolve().then(()=>dt(ft("@mikro-orm/mariadb"),1));e=t}else if(n.startsWith("sqlite://")){let{SqliteDriver:t}=await Promise.resolve().then(()=>dt(ft("@mikro-orm/sqlite"),1));e=t}else if(n.startsWith("mssql://")){let{MsSqlDriver:t}=await Promise.resolve().then(()=>dt(ft("@mikro-orm/mssql"),1));e=t}else throw new Error(`Unsupported database URI: ${n}`);return n.startsWith("sqlite://")?{entities:$t,dbName:n==="sqlite://:memory:"?":memory:":n.substring(9),driver:e}:{entities:$t,clientUrl:n,driver:e}}async function Qs(n){await n.schema.ensureDatabase(),await n.schema.updateSchema({safe:!0})}async function Zs(n){let e=n.em.fork(),t=await e.findOne(le,{key:hr});if(t){if(t.value!==Cr)throw new Error(`ADK Database schema version ${t.value} is not compatible.`);return}let o=e.create(le,{key:hr,value:Cr});await e.persist(o).flush()}function ea(n){return n?n.startsWith("postgres://")||n.startsWith("postgresql://")||n.startsWith("mysql://")||n.startsWith("mariadb://")||n.startsWith("mssql://")||n.startsWith("sqlite://"):!1}var qt=class extends De{constructor(t){super();this.initialized=!1;if(typeof t=="string")this.connectionString=t;else{if(!t.driver)throw new Error("Driver is required when passing options object.");this.options={...t,entities:$t}}}async init(){this.initialized||(this.connectionString&&(!this.options||!this.options.driver)&&(this.options=await Xs(this.connectionString)),this.orm=await hu.init(this.options),await Qs(this.orm),await Zs(this.orm),this.initialized=!0)}async createSession({appName:t,userId:o,state:r,sessionId:i}){await this.init();let s=this.orm.em.fork(),a=i||I(),c=new Date;if(await s.findOne(M,{id:a,appName:t,userId:o}))throw new Error(`Session with id ${a} already exists.`);let u=await s.findOne(G,{appName:t});u||(u=s.create(G,{appName:t,state:{},updateTime:c}),s.persist(u));let f=await s.findOne(D,{appName:t,userId:o});f||(f=s.create(D,{appName:t,userId:o,state:{}}),s.persist(f));let d={},p={},g={};if(r)for(let[A,j]of Object.entries(r))A.startsWith(T.APP_PREFIX)?d[A.replace(T.APP_PREFIX,"")]=j:A.startsWith(T.USER_PREFIX)?p[A.replace(T.USER_PREFIX,"")]=j:g[A]=j;Object.keys(d).length>0&&(u.state={...u.state,...d}),Object.keys(p).length>0&&(f.state={...f.state,...p});let C=s.create(M,{id:a,appName:t,userId:o,state:g,createTime:c,updateTime:c});s.persist(C),await s.flush();let h=he(u.state,f.state,g);return Re({id:a,appName:t,userId:o,state:h,events:[],lastUpdateTime:C.createTime.getTime()})}async getSession({appName:t,userId:o,sessionId:r,config:i}){await this.init();let s=this.orm.em.fork(),a=await s.findOne(M,{appName:t,userId:o,id:r});if(!a)return;let c={appName:t,userId:o,sessionId:r};i!=null&&i.afterTimestamp&&(c.timestamp={$gt:new Date(i.afterTimestamp)});let l=await s.find(B,c,{orderBy:{timestamp:"DESC"},limit:i==null?void 0:i.numRecentEvents});l.reverse();let u=await s.findOne(G,{appName:t}),f=await s.findOne(D,{appName:t,userId:o}),d=he((u==null?void 0:u.state)||{},(f==null?void 0:f.state)||{},a.state);return Re({id:r,appName:t,userId:o,state:d,events:l.map(p=>p.eventData),lastUpdateTime:a.updateTime.getTime()})}async listSessions({appName:t,userId:o}){await this.init();let r=this.orm.em.fork(),i={appName:t};o&&(i.userId=o);let s=await r.find(M,i),a=await r.findOne(G,{appName:t}),c=(a==null?void 0:a.state)||{},l={};if(o){let f=await r.findOne(D,{appName:t,userId:o});f&&(l[o]=f.state)}else{let f=await r.find(D,{appName:t});for(let d of f)l[d.userId]=d.state}return{sessions:s.map(f=>{let d=l[f.userId]||{},p=he(c,d,f.state);return Re({id:f.id,appName:f.appName,userId:f.userId,state:p,events:[],lastUpdateTime:f.updateTime.getTime()})})}}async deleteSession({appName:t,userId:o,sessionId:r}){await this.init();let i=this.orm.em.fork();await i.nativeDelete(M,{appName:t,userId:o,id:r}),await i.nativeDelete(B,{appName:t,userId:o,sessionId:r})}async appendEvent({session:t,event:o}){await this.init();let r=this.orm.em.fork();if(o.partial)return o;let i=qo(o);return await r.transactional(async s=>{let a=await s.findOne(M,{appName:t.appName,userId:t.userId,id:t.id},{lockMode:gu.PESSIMISTIC_WRITE});if(!a)throw new Error(`Session ${t.id} not found for appendEvent`);let c=await s.findOne(G,{appName:t.appName});c||(c=s.create(G,{appName:t.appName,state:{},updateTime:new Date}),s.persist(c));let l=await s.findOne(D,{appName:t.appName,userId:t.userId});if(l||(l=s.create(D,{appName:t.appName,userId:t.userId,state:{}}),s.persist(l)),a.updateTime.getTime()>t.lastUpdateTime){let d=await s.find(B,{appName:t.appName,userId:t.userId,sessionId:t.id},{orderBy:{timestamp:"ASC"}}),p=he(c.state,l.state,a.state);t.state=p,t.events=d.map(g=>g.eventData)}if(o.actions&&o.actions.stateDelta){let d={},p={},g={};for(let[C,h]of Object.entries(o.actions.stateDelta))C.startsWith(T.APP_PREFIX)?d[C.replace(T.APP_PREFIX,"")]=h:C.startsWith(T.USER_PREFIX)?p[C.replace(T.USER_PREFIX,"")]=h:g[C]=h;Object.keys(d).length>0&&(c.state={...c.state,...d}),Object.keys(p).length>0&&(l.state={...l.state,...p}),Object.keys(g).length>0&&(a.state={...a.state,...g})}let u=s.create(B,{id:i.id,appName:t.appName,userId:t.userId,sessionId:t.id,invocationId:i.invocationId,timestamp:new Date(i.timestamp),eventData:i});s.persist(u),await s.commit(),a.updateTime=new Date(o.timestamp);let f=he(c.state,l.state,a.state);t.state=f,t.events.push(o),t.lastUpdateTime=a.updateTime.getTime()}),o}};function Cu(n){if(ys(n))return new te;if(ea(n))return new qt(n);throw new Error(`Unsupported session service URI: ${n}`)}import Au from"js-yaml";import*as fe from"fs/promises";import*as O from"path";import{z as ue}from"zod";var vu=/^([a-z0-9]+(-[a-z0-9]+)*|[a-z0-9]+(_[a-z0-9]+)*)$/,vr=ue.preprocess(n=>{if(typeof n=="object"&&n!==null){let e=n;if("allowed-tools"in e&&!("allowedTools"in e))return{...e,allowedTools:e["allowed-tools"]}}return n},ue.object({name:ue.string().regex(vu,{message:"name must be lowercase kebab-case (a-z, 0-9, hyphens) or snake_case (a-z, 0-9, underscores), with no leading, trailing, or consecutive delimiters. Mixing hyphens and underscores is not allowed."}).max(64),description:ue.string().min(1).max(1024),license:ue.string().optional(),compatibility:ue.string().max(500).optional(),"allowed-tools":ue.string().optional(),metadata:ue.record(ue.string(),ue.any()).default({}).refine(n=>"adk_additional_tools"in n?Array.isArray(n.adk_additional_tools)&&n.adk_additional_tools.every(e=>typeof e=="string"):!0,{message:"adk_additional_tools must be a list of strings"})}).loose());var Eu=new Set(["name","description","license","allowed-tools","metadata","compatibility"]),ta=new Set(["__pycache__",".pytest_cache",".mypy_cache",".ruff_cache","node_modules","coverage","venv",".venv","env",".env",".git",".vscode",".idea"]),yu=new Set([".pyc",".pyo",".pyd",".tsbuildinfo",".DS_Store"]);async function Ar(n){let e={};async function t(o){let r=await fe.readdir(o,{withFileTypes:!0});for(let i of r){let s=O.join(o,i.name);if(i.isDirectory()){if(ta.has(i.name))continue;await t(s)}else if(i.isFile()){let a=O.relative(n,s);if(yu.has(O.extname(i.name)))continue;let c=await fe.readFile(s);try{e[a]=c.toString("utf-8")}catch{e[a]=c}}}}try{(await fe.stat(n)).isDirectory()&&await t(n)}catch(o){m.warn(`Failed to load directory '${n}': ${o.message}`)}return e}function xu(n){if(!n.startsWith("---"))throw new Error("SKILL.md must start with YAML frontmatter (---)");let e=n.split("---",3);if(e.length<3)throw new Error("SKILL.md frontmatter not properly closed with ---");let t=e[1],o=e[2].trim();try{let r=Au.load(t);if(typeof r!="object"||r===null)throw new Error("SKILL.md frontmatter must be a YAML mapping");return{frontmatter:vr.parse(r),body:o}}catch(r){throw new Error(`Invalid YAML in frontmatter: ${r.message}`)}}async function na(n){let e=O.resolve(n),t=await oa(n),o=O.join(e,"references"),r=O.join(e,"assets"),i=O.join(e,"scripts"),[s,a,c]=await Promise.all([Ar(o),Ar(r),Ar(i)]),l={};for(let[f,d]of Object.entries(c))typeof d=="string"&&(l[f]={src:d});return{...t,resources:{references:s,assets:a,scripts:l}}}async function Tu(n){let e=[],t=O.resolve(n),o;try{o=await oa(t)}catch(r){return[r.message]}try{let i=Object.keys(o.frontmatter).filter(a=>!Eu.has(a));i.length>0&&e.push(`Unknown frontmatter fields: [${i.sort().join(", ")}]`);let s=O.basename(t);s!==o.frontmatter.name&&e.push(`Skill name '${o.frontmatter.name}' does not match directory name '${s}'.`)}catch(r){e.push(r.message)}return e}async function oa(n){let e=O.resolve(n),t="",o="";try{let c=await fe.readdir(e,{withFileTypes:!0});for(let l of c)if(l.isFile()&&l.name.toLowerCase()==="skill.md"){let u=O.join(e,l.name);try{o=await fe.readFile(u,"utf-8"),t=u;break}catch{}}}catch(c){m.warn(`Failed to load directory '${n}': ${c.message}`)}if(!t)throw new Error(`SKILL.md (or any case variation like skill.md) not found in '${n}'.`);let{frontmatter:r,body:i}=xu(o),s=vr.parse(r),a=O.basename(e);if(a!==s.name)throw new Error(`Skill name '${s.name}' does not match directory name '${a}'.`);return{frontmatter:s,instructions:i}}async function Su(n){let e=O.resolve(n),t={};async function o(r){let i;try{i=await fe.readdir(r,{withFileTypes:!0})}catch{return}let s=!1;if(r!==e){for(let a of i)if(a.isFile()&&a.name.toLowerCase()==="skill.md"){s=!0;break}}if(s)try{let a=await na(r);t[a.frontmatter.name]=a}catch(a){m.warn(`Skipping invalid skill in '${r}':`,a)}else for(let a of i)if(a.isDirectory()){if(ta.has(a.name))continue;await o(O.join(r,a.name))}}try{await fe.readdir(e),await o(e)}catch(r){m.warn(`Skills base path '${n}' is not a directory.`,r)}return t}import{MetricExporter as Ru}from"@google-cloud/opentelemetry-cloud-monitoring-exporter";import{TraceExporter as wu}from"@google-cloud/opentelemetry-cloud-trace-exporter";import{gcpDetector as Iu}from"@opentelemetry/resource-detector-gcp";import{detectResources as bu}from"@opentelemetry/resources";import{PeriodicExportingMetricReader as ku}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Pu}from"@opentelemetry/sdk-trace-base";import{GoogleAuth as _u}from"google-auth-library";var Lu="Cannot determine GCP Project. OTel GCP Exporters cannot be set up. Please make sure to log into correct GCP Project.";async function Ou(){try{return await new _u().getProjectId()||void 0}catch{return}}async function US(n={}){let{enableTracing:e=!1,enableMetrics:t=!1}=n,o=await Ou();return o?{spanProcessors:e?[new Pu(new wu({projectId:o}))]:[],metricReaders:t?[new ku({exporter:new Ru({projectId:o}),exportIntervalMillis:5e3})]:[],logRecordProcessors:[]}:(m.warn(Lu),{})}function $S(){return bu({detectors:[Iu]})}import{metrics as Mu,trace as Nu}from"@opentelemetry/api";import{logs as Fu}from"@opentelemetry/api-logs";import{OTLPLogExporter as Bu}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Du}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Uu}from"@opentelemetry/exporter-trace-otlp-http";import{detectResources as $u}from"@opentelemetry/resources";import{BatchLogRecordProcessor as qu,LoggerProvider as Gu}from"@opentelemetry/sdk-logs";import{MeterProvider as ju,PeriodicExportingMetricReader as Vu}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as zu}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Wu}from"@opentelemetry/sdk-trace-node";function nR(n=[],e){let t=e||Hu(),o=[...n,Yu()],r=o.flatMap(a=>a.spanProcessors||[]),i=o.flatMap(a=>a.metricReaders||[]),s=o.flatMap(a=>a.logRecordProcessors||[]);if(r.length>0){let a=new Wu({resource:t,spanProcessors:r});a.register(),Nu.setGlobalTracerProvider(a)}if(i.length>0){let a=new ju({readers:i,resource:t});Mu.setGlobalMeterProvider(a)}if(s.length>0){let a=new Gu({resource:t,processors:s});Fu.setGlobalLoggerProvider(a)}}function Hu(){return $u({detectors:[]})}function Ku(){return{enableTracing:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT),enableMetrics:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT),enableLogging:!!(process.env.OTEL_EXPORTER_OTLP_ENDPOINT||process.env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT)}}function Yu(n=Ku()){let{enableTracing:e,enableMetrics:t,enableLogging:o}=n;return{spanProcessors:e?[new zu(new Uu)]:[],metricReaders:t?[new Vu({exporter:new Du})]:[],logRecordProcessors:o?[new qu(new Bu)]:[]}}import{Client as Ju}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as Xu}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as Qu}from"@modelcontextprotocol/sdk/client/streamableHttp.js";var kn=class{constructor(e){this.connectionParams=e}async createSession(){var t;let e=new Ju({name:"MCPClient",version:"1.0.0"});switch(this.connectionParams.type){case"StdioConnectionParams":await e.connect(new Xu(this.connectionParams.serverParams));break;case"StreamableHTTPConnectionParams":{let o=(t=this.connectionParams.transportOptions)!=null?t:{};!o.requestInit&&this.connectionParams.header!==void 0&&(o.requestInit={headers:this.connectionParams.header}),await e.connect(new Qu(new URL(this.connectionParams.url),o));break}default:{let o=this.connectionParams;break}}return e}};import{Type as re}from"@google/genai";import{z as ct}from"zod";var pR=ct.object({type:ct.literal("object"),properties:ct.record(ct.string(),ct.unknown()).optional(),required:ct.string().array().optional()});function Zu(n){if(!n)return re.TYPE_UNSPECIFIED;switch(n.toLowerCase()){case"text":case"string":return re.STRING;case"number":return re.NUMBER;case"boolean":return re.BOOLEAN;case"integer":return re.INTEGER;case"array":return re.ARRAY;case"object":return re.OBJECT;case"null":return re.NULL;default:return re.TYPE_UNSPECIFIED}}var ra=n=>{var e,t;return typeof n=="string"?n.toLowerCase():(t=(e=n==null?void 0:n.type)==null?void 0:e.toLowerCase)==null?void 0:t.call(e)};function Er(n){if(!n)return;function e(t){var c;let o=(c=t.anyOf)!=null?c:t.type,r=!1,i;if(Array.isArray(o)){if(i=o.filter(l=>ra(l)!=="null"),r=o.some(l=>ra(l)==="null"),i.length===1){let l=i[0];if(typeof l=="object")t=l;else{let{type:u,anyOf:f,...d}=t;t={...d,type:l}}}else if(i.length===0&&r){let{type:l,anyOf:u,...f}=t;t={...f,type:"null"}}else if(typeof t.anyOf>"u"){let l=t.type.map(d=>({type:d})),{type:u,...f}=t;t={...f,anyOf:l}}}t.type||(t.properties||t.$ref?t.type="object":t.items?t.type="array":r&&(t.type="null"));let s=Zu(t.type),a={};if(t.anyOf?a.anyOf=t.anyOf.map(l=>e(l)):a.type=s,t.description&&(a.description=t.description),r&&t.type!=="null"&&(a.nullable=!0),s===re.OBJECT){if(a.properties={},t.properties)for(let l in t.properties)a.properties[l]=e(t.properties[l]);t.required&&(a.required=t.required)}else s===re.ARRAY&&t.items&&(a.items=e(t.items));return a}return e(n)}var Pn=class extends R{constructor(e,t){super({name:e.name,description:e.description||""}),this.mcpTool=e,this.mcpSessionManager=t}_getDeclaration(){return{name:this.mcpTool.name,description:this.mcpTool.description,parameters:Er(this.mcpTool.inputSchema),response:Er(this.mcpTool.outputSchema)}}async runAsync(e){let t=await this.mcpSessionManager.createSession(),o={};return o.params={name:this.mcpTool.name,arguments:e.args},await t.callTool(o.params,void 0,{signal:e.toolContext.abortSignal})}};var ia=class extends Se{constructor(e,t=[],o){super(t,o),this.mcpSessionManager=new kn(e)}async getTools(){let t=await(await this.mcpSessionManager.createSession()).listTools();m.debug(`number of tools: ${t.tools.length}`);for(let o of t.tools)m.debug(`tool: ${o.name}`);return t.tools.map(o=>{let r={...o,name:this.prefix?`${this.prefix}_${o.name}`:o.name};return new Pn(r,this.mcpSessionManager)})}async close(){}};export{_t as A2AAgentExecutor,nl as AGENT_CARD_PATH,zo as ActiveStreamingTool,fn as Agent,ur as AgentTool,on as AgentTransferLlmRequestProcessor,Je as ApigeeLlm,Ko as AuthCredentialTypes,Ke as AuthHandler,Yo as AuthProviderRegistry,$ as BaseAgent,Me as BaseCodeExecutor,rr as BaseExampleProvider,ye as BaseLlm,F as BaseLlmRequestProcessor,so as BaseLlmResponseProcessor,ce as BasePlugin,De as BaseSessionService,R as BaseTool,Se as BaseToolset,Rt as BuiltInCodeExecutor,cn as CONTENT_REQUEST_PROCESSOR,Te as CodeExecutionLanguage,an as ContentRequestProcessor,N as Context,Eo as ContextCompactionTrigger,Qe as ContextCompactorRequestProcessor,z as CredentialExchangeError,Zo as CredentialRefresherRegistry,qt as DatabaseSessionService,Jl as EXIT_LOOP,Bs as EventType,xn as ExitLoopTool,di as FeatureName,Za as FeatureStage,Lt as FileArtifactService,fo as FileContentEncoding,me as FunctionTool,Xl as GOOGLE_SEARCH,Mt as GcsArtifactService,xe as Gemini,Yt as GoogleLLMVariant,Tn as GoogleSearchTool,qe as InMemoryArtifactService,Jo as InMemoryCredentialService,Ge as InMemoryMemoryService,An as InMemoryPolicyEngine,cr as InMemoryRunner,te as InMemorySessionService,Y as InvocationContext,Le as LLMRegistry,ru as LOAD_ARTIFACTS,iu as LOAD_MEMORY,je as ListSkillsTool,Wo as LiveRequestQueue,fn as LlmAgent,er as LlmSummarizer,Sn as LoadArtifactsTool,Rn as LoadMemoryTool,Ve as LoadSkillResourceTool,ze as LoadSkillTool,Dr as LogLevel,ir as LoggingPlugin,dr as LongRunningFunctionTool,bo as LoopAgent,kn as MCPSessionManager,Pn as MCPTool,ia as MCPToolset,vt as OAuth2CredentialExchanger,Qo as OAuth2DiscoveryManager,Un as OAuthGrantType,su as PRELOAD_MEMORY,Po as ParallelAgent,Pt as PluginManager,Gs as PolicyOutcome,wn as PreloadMemoryTool,qs as REQUEST_CONFIRMATION_FUNCTION_CALL_NAME,b as ReadonlyContext,Do as RemoteA2AAgent,Nt as RoutedAgent,Bt as RoutedLlm,We as RunSkillInlineScriptTool,He as RunSkillScriptTool,ge as Runner,ar as SecurityPlugin,Oo as SequentialAgent,Xo as SessionStateCredentialService,Dt as SkillToolset,T as State,un as StreamingMode,tr as TokenBasedContextCompactor,Pe as ToolConfirmation,nr as TruncatingContextCompactor,Vo as UnsafeLocalCodeExecutor,x as createEvent,V as createEventActions,Re as createSession,Ka as functionsExportedForTestingOnly,nn as geminiInitParams,Fo as getA2AAgentCard,Pl as getArtifactServiceFromUri,Kl as getAskUserConfirmationFunctionCalls,eo as getFeatureConfig,P as getFunctionCalls,K as getFunctionResponses,US as getGcpExporters,$S as getGcpResource,Dn as getLogger,Cu as getSessionServiceFromUri,Ir as hasTrailingCodeExecutionResult,Yl as isAgentTool,Ra as isBaseAgent,zl as isBaseExampleProvider,Yn as isBaseLlm,Tt as isBaseTool,No as isBaseToolset,X as isCompactedEvent,mi as isFeatureEnabled,Ce as isFinalResponse,uc as isFunctionTool,St as isGemini2OrAbove,y as isLlmAgent,Ze as isLoopAgent,et as isParallelAgent,Bl as isRoutedAgent,$o as isRunner,tt as isSequentialAgent,Su as loadAllSkillsInDir,na as loadSkillFromDir,nR as maybeSetOtelProviders,he as mergeStates,Xd as overrideFeatureEnabled,Jd as registerFeature,ya as setLogLevel,Ea as setLogger,pt as stringifyContent,vl as toA2a,Vl as toStructuredEvents,qo as trimTempDeltaState,Tu as validateSkillDir,mt as version,Qd as withTemporaryFeatureOverride,Xe as zodObjectToSchema};
|
|
114
127
|
/**
|
|
115
128
|
* @license
|
|
116
129
|
* Copyright 2026 Google LLC
|