@google/adk 2.3.0 → 2.5.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 +17 -2
- package/dist/cjs/a2a/a2a_remote_agent_utils.js +8 -4
- package/dist/cjs/a2a/agent_card.js +5 -81
- package/dist/cjs/a2a/agent_to_a2a.js +7 -0
- package/dist/cjs/a2a/event_converter_utils.js +10 -3
- package/dist/cjs/agents/agent_engine_client.js +399 -0
- package/dist/cjs/agents/base_agent.js +127 -68
- package/dist/cjs/agents/functions.js +64 -59
- package/dist/cjs/agents/instructions.js +8 -6
- package/dist/cjs/agents/invocation_context.js +2 -2
- package/dist/cjs/agents/llm_agent.js +124 -101
- package/dist/cjs/agents/processors/basic_llm_request_processor.js +1 -1
- package/dist/cjs/agents/processors/code_execution_request_processor.js +8 -0
- package/dist/cjs/agents/processors/content_processor_utils.js +72 -17
- package/dist/cjs/agents/processors/content_request_processor.js +51 -2
- package/dist/cjs/agents/processors/context_compactor_request_processor.js +5 -1
- package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/cjs/agents/processors/nl_planning_processor.js +13 -3
- package/dist/cjs/artifacts/file_artifact_service.js +1 -1
- package/dist/cjs/cli/cli_eval.js +884 -17
- package/dist/cjs/cli/utils/cleanup.js +84 -0
- package/dist/cjs/cli/utils/envs.js +33 -2
- package/dist/cjs/cli/utils/evals.js +75 -8
- package/dist/cjs/cli/utils/logs.js +134 -15
- package/dist/cjs/cli/utils/path_validation.js +83 -0
- package/dist/cjs/code_executors/container_code_executor.js +171 -38
- package/dist/cjs/code_executors/unsafe_local_code_executor.js +6 -1
- package/dist/cjs/common.js +59 -32
- package/dist/cjs/context/compaction_utils.js +19 -0
- package/dist/cjs/errors/input_validation_error.js +3 -2
- package/dist/cjs/events/event.js +7 -3
- package/dist/cjs/features/feature_registry.js +5 -0
- package/dist/cjs/index.js +34 -12
- package/dist/cjs/models/google_llm.js +33 -2
- package/dist/cjs/models/interactions_utils.js +3 -0
- package/dist/cjs/plugins/base_plugin.js +54 -40
- package/dist/cjs/plugins/plugin_manager.js +27 -0
- package/dist/cjs/runner/runner.js +306 -189
- package/dist/cjs/sessions/base_session_service.js +15 -12
- package/dist/cjs/sessions/database_session_service.js +232 -38
- package/dist/cjs/sessions/db/operations.js +70 -1
- package/dist/cjs/sessions/db/schema.js +4 -0
- package/dist/cjs/sessions/in_memory_session_service.js +2 -2
- package/dist/cjs/sessions/stale_session_error.js +59 -0
- package/dist/cjs/sessions/vertex_ai_session_service.js +11 -3
- package/dist/cjs/skills/loader.js +76 -41
- package/dist/cjs/telemetry/api/instrumentation.js +632 -0
- package/dist/cjs/telemetry/api/internal/common/accumulators.js +169 -0
- package/dist/cjs/telemetry/api/internal/common/attributes.js +131 -0
- package/dist/cjs/telemetry/api/internal/common/config.js +159 -0
- package/dist/cjs/telemetry/api/internal/common/error.js +98 -0
- package/dist/cjs/telemetry/api/internal/common/finish_reason.js +63 -0
- package/dist/cjs/telemetry/api/internal/common/genai_messages.js +217 -0
- package/dist/cjs/telemetry/api/internal/common/http_exchange.js +169 -0
- package/dist/cjs/telemetry/api/internal/common/provider_name.js +87 -0
- package/dist/cjs/telemetry/api/internal/common/redaction.js +148 -0
- package/dist/cjs/telemetry/api/internal/common/serialization.js +58 -0
- package/dist/cjs/telemetry/api/internal/common/token_usage.js +118 -0
- package/dist/cjs/telemetry/api/internal/logs/inference.js +50 -0
- package/dist/cjs/telemetry/api/internal/logs/logger.js +46 -0
- package/dist/cjs/telemetry/api/internal/logs/mcp.js +141 -0
- package/dist/cjs/telemetry/api/internal/metrics/agent.js +128 -0
- package/dist/cjs/telemetry/api/internal/metrics/inference_start_hook.js +56 -0
- package/dist/cjs/telemetry/api/internal/metrics/meters.js +189 -0
- package/dist/cjs/telemetry/api/internal/metrics/tool.js +147 -0
- package/dist/cjs/telemetry/api/internal/metrics/workflow.js +132 -0
- package/dist/cjs/telemetry/api/internal/trace/agent.js +52 -0
- package/dist/cjs/telemetry/api/internal/trace/compaction.js +78 -0
- package/dist/cjs/telemetry/api/internal/trace/inference.js +132 -0
- package/dist/cjs/telemetry/api/internal/trace/live.js +52 -0
- package/dist/cjs/telemetry/api/internal/trace/node.js +73 -0
- package/dist/cjs/telemetry/api/internal/trace/propagation.js +67 -0
- package/dist/cjs/telemetry/api/internal/trace/tool.js +122 -0
- package/dist/cjs/telemetry/api/internal/trace/tracer.js +77 -0
- package/dist/cjs/telemetry/api/internal/trace/workflow.js +77 -0
- package/dist/cjs/telemetry/export/agent_engine.js +90 -0
- package/dist/cjs/telemetry/export/agent_runtime.js +73 -0
- package/dist/cjs/telemetry/export/google_cloud.js +763 -0
- package/dist/cjs/telemetry/export/request_driven_metric_reader.js +303 -0
- package/dist/cjs/telemetry/{setup.js → export/setup.js} +72 -6
- package/dist/cjs/tools/agent_tool.js +9 -1
- package/dist/cjs/tools/apihub_tool/apihub_toolset.js +18 -23
- package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +109 -43
- package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +222 -114
- package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +34 -14
- package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +175 -0
- package/dist/cjs/tools/base_toolset.js +1 -1
- package/dist/cjs/tools/computer_use/base_computer.js +125 -0
- package/dist/cjs/tools/computer_use/computer_use_actions.js +502 -0
- package/dist/cjs/tools/computer_use/computer_use_tool.js +244 -0
- package/dist/cjs/tools/computer_use/computer_use_toolset.js +360 -0
- package/dist/cjs/tools/function_tool.js +15 -5
- package/dist/cjs/tools/google_api_tool/google_api_tool.js +4 -1
- package/dist/cjs/tools/google_api_tool/google_api_toolset.js +174 -0
- package/dist/cjs/tools/google_api_tool/google_api_toolsets.js +124 -0
- package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +5 -3
- package/dist/cjs/tools/google_api_tool/index.js +20 -23
- package/dist/cjs/tools/load_artifacts_tool.js +27 -11
- package/dist/cjs/tools/load_memory_tool.js +14 -15
- package/dist/cjs/tools/mcp/mcp_session_manager.js +23 -3
- package/dist/cjs/tools/mcp/mcp_tool.js +7 -3
- package/dist/cjs/tools/mcp/mcp_toolset.js +19 -20
- package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +30 -29
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -4
- package/dist/cjs/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
- package/dist/cjs/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
- package/dist/cjs/tools/openapi_tool/openapi_toolset.js +7 -13
- package/dist/cjs/tools/openapi_tool/rest_api_tool.js +57 -10
- package/dist/cjs/tools/skill/load_skill_resource_tool.js +7 -0
- package/dist/cjs/tools/skill/load_skill_tool.js +3 -0
- package/dist/cjs/tools/skill/run_skill_script_tool.js +12 -2
- package/dist/cjs/tools/toolbox_toolset.js +193 -0
- package/dist/cjs/tools/webmcp/webmcp_toolset.js +1 -14
- package/dist/cjs/utils/async_queue.js +37 -3
- package/dist/cjs/utils/client_labels.js +17 -2
- package/dist/cjs/utils/env_aware_utils.js +13 -7
- package/dist/cjs/utils/error_utils.js +40 -2
- package/dist/cjs/utils/failover_utils.js +11 -10
- package/dist/cjs/utils/gemini_schema_util.js +145 -14
- package/dist/cjs/utils/id_provider.js +63 -0
- package/dist/cjs/utils/logger_node.js +4 -0
- package/dist/cjs/utils/model_name.js +15 -0
- package/dist/cjs/utils/output_schema_utils.js +5 -2
- package/dist/cjs/utils/simple_zod_to_json.js +13 -31
- package/dist/cjs/utils/ssrf_guard.js +46 -16
- package/dist/cjs/utils/task.js +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/workflow/index.js +2 -0
- package/dist/cjs/workflow/node_runner.js +24 -80
- package/dist/cjs/workflow/nodes/parallel_worker.js +18 -7
- package/dist/cjs/workflow/run_llm_agent_as_node.js +19 -14
- package/dist/cjs/workflow/utils/retry_utils.js +2 -2
- package/dist/cjs/workflow/workflow.js +12 -12
- package/dist/esm/a2a/a2a_remote_agent.js +23 -3
- package/dist/esm/a2a/a2a_remote_agent_utils.js +8 -4
- package/dist/esm/a2a/agent_card.js +5 -83
- package/dist/esm/a2a/agent_to_a2a.js +7 -0
- package/dist/esm/a2a/event_converter_utils.js +10 -3
- package/dist/esm/agents/agent_engine_client.js +382 -0
- package/dist/esm/agents/base_agent.js +127 -72
- package/dist/esm/agents/functions.js +69 -63
- package/dist/esm/agents/instructions.js +8 -6
- package/dist/esm/agents/invocation_context.js +2 -2
- package/dist/esm/agents/llm_agent.js +130 -106
- package/dist/esm/agents/processors/basic_llm_request_processor.js +1 -1
- package/dist/esm/agents/processors/code_execution_request_processor.js +8 -0
- package/dist/esm/agents/processors/content_processor_utils.js +72 -17
- package/dist/esm/agents/processors/content_request_processor.js +51 -2
- package/dist/esm/agents/processors/context_compactor_request_processor.js +5 -1
- package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/esm/agents/processors/nl_planning_processor.js +13 -3
- package/dist/esm/artifacts/file_artifact_service.js +1 -1
- package/dist/esm/cli/cli_eval.js +880 -17
- package/dist/esm/cli/utils/cleanup.js +56 -0
- package/dist/esm/cli/utils/envs.js +33 -2
- package/dist/esm/cli/utils/evals.js +74 -8
- package/dist/esm/cli/utils/logs.js +132 -13
- package/dist/esm/cli/utils/path_validation.js +45 -0
- package/dist/esm/code_executors/container_code_executor.js +171 -38
- package/dist/esm/code_executors/unsafe_local_code_executor.js +6 -1
- package/dist/esm/common.js +59 -19
- package/dist/esm/context/compaction_utils.js +19 -0
- package/dist/esm/errors/input_validation_error.js +3 -2
- package/dist/esm/events/event.js +7 -3
- package/dist/esm/features/feature_registry.js +5 -0
- package/dist/esm/index.js +36 -10
- package/dist/esm/models/google_llm.js +33 -2
- package/dist/esm/models/interactions_utils.js +3 -0
- package/dist/esm/plugins/base_plugin.js +54 -40
- package/dist/esm/plugins/plugin_manager.js +27 -0
- package/dist/esm/runner/runner.js +310 -192
- package/dist/esm/sessions/base_session_service.js +13 -11
- package/dist/esm/sessions/database_session_service.js +231 -38
- package/dist/esm/sessions/db/operations.js +70 -1
- package/dist/esm/sessions/db/schema.js +4 -0
- package/dist/esm/sessions/in_memory_session_service.js +2 -2
- package/dist/esm/sessions/stale_session_error.js +31 -0
- package/dist/esm/sessions/vertex_ai_session_service.js +11 -3
- package/dist/esm/skills/loader.js +76 -41
- package/dist/esm/telemetry/api/instrumentation.js +655 -0
- package/dist/esm/telemetry/api/internal/common/accumulators.js +139 -0
- package/dist/esm/telemetry/api/internal/common/attributes.js +94 -0
- package/dist/esm/telemetry/api/internal/common/config.js +128 -0
- package/dist/esm/telemetry/api/internal/common/error.js +69 -0
- package/dist/esm/telemetry/api/internal/common/finish_reason.js +35 -0
- package/dist/esm/telemetry/api/internal/common/genai_messages.js +188 -0
- package/dist/esm/telemetry/api/internal/common/http_exchange.js +142 -0
- package/dist/esm/telemetry/api/internal/common/provider_name.js +59 -0
- package/dist/esm/telemetry/api/internal/common/redaction.js +121 -0
- package/dist/esm/telemetry/api/internal/common/serialization.js +30 -0
- package/dist/esm/telemetry/api/internal/common/token_usage.js +85 -0
- package/dist/esm/telemetry/api/internal/logs/inference.js +23 -0
- package/dist/esm/telemetry/api/internal/logs/logger.js +19 -0
- package/dist/esm/telemetry/api/internal/logs/mcp.js +113 -0
- package/dist/esm/telemetry/api/internal/metrics/agent.js +107 -0
- package/dist/esm/telemetry/api/internal/metrics/inference_start_hook.js +29 -0
- package/dist/esm/telemetry/api/internal/metrics/meters.js +165 -0
- package/dist/esm/telemetry/api/internal/metrics/tool.js +119 -0
- package/dist/esm/telemetry/api/internal/metrics/workflow.js +112 -0
- package/dist/esm/telemetry/api/internal/trace/agent.js +25 -0
- package/dist/esm/telemetry/api/internal/trace/compaction.js +50 -0
- package/dist/esm/telemetry/api/internal/trace/inference.js +107 -0
- package/dist/esm/telemetry/api/internal/trace/live.js +28 -0
- package/dist/esm/telemetry/api/internal/trace/node.js +44 -0
- package/dist/esm/telemetry/api/internal/trace/propagation.js +39 -0
- package/dist/esm/telemetry/api/internal/trace/tool.js +96 -0
- package/dist/esm/telemetry/api/internal/trace/tracer.js +52 -0
- package/dist/esm/telemetry/api/internal/trace/workflow.js +54 -0
- package/dist/esm/telemetry/export/agent_engine.js +67 -0
- package/dist/esm/telemetry/export/agent_runtime.js +46 -0
- package/dist/esm/telemetry/export/google_cloud.js +733 -0
- package/dist/esm/telemetry/export/request_driven_metric_reader.js +276 -0
- package/dist/esm/telemetry/export/setup.js +160 -0
- package/dist/esm/tools/agent_tool.js +9 -1
- package/dist/esm/tools/apihub_tool/apihub_toolset.js +17 -22
- package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +114 -44
- package/dist/esm/tools/application_integration_tool/clients/connections_client.js +226 -115
- package/dist/esm/tools/application_integration_tool/clients/integration_client.js +34 -14
- package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +149 -0
- package/dist/esm/tools/base_toolset.js +1 -1
- package/dist/esm/tools/computer_use/base_computer.js +99 -0
- package/dist/esm/tools/computer_use/computer_use_actions.js +477 -0
- package/dist/esm/tools/computer_use/computer_use_tool.js +217 -0
- package/dist/esm/tools/computer_use/computer_use_toolset.js +344 -0
- package/dist/esm/tools/function_tool.js +15 -5
- package/dist/esm/tools/google_api_tool/google_api_tool.js +4 -1
- package/dist/esm/tools/google_api_tool/google_api_toolset.js +147 -0
- package/dist/esm/tools/google_api_tool/google_api_toolsets.js +94 -0
- package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +5 -3
- package/dist/esm/tools/google_api_tool/index.js +18 -20
- package/dist/esm/tools/load_artifacts_tool.js +25 -10
- package/dist/esm/tools/load_memory_tool.js +14 -15
- package/dist/esm/tools/mcp/mcp_session_manager.js +23 -3
- package/dist/esm/tools/mcp/mcp_tool.js +7 -3
- package/dist/esm/tools/mcp/mcp_toolset.js +19 -20
- package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +27 -26
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -4
- package/dist/esm/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.js +20 -6
- package/dist/esm/tools/openapi_tool/openapi_spec_parser/operation_parser.js +17 -6
- package/dist/esm/tools/openapi_tool/openapi_toolset.js +6 -12
- package/dist/esm/tools/openapi_tool/rest_api_tool.js +57 -10
- package/dist/esm/tools/skill/load_skill_resource_tool.js +7 -0
- package/dist/esm/tools/skill/load_skill_tool.js +3 -0
- package/dist/esm/tools/skill/run_skill_script_tool.js +12 -2
- package/dist/esm/tools/toolbox_toolset.js +167 -0
- package/dist/esm/tools/webmcp/webmcp_toolset.js +1 -14
- package/dist/esm/utils/async_queue.js +37 -3
- package/dist/esm/utils/client_labels.js +17 -2
- package/dist/esm/utils/env_aware_utils.js +12 -7
- package/dist/esm/utils/error_utils.js +37 -1
- package/dist/esm/utils/failover_utils.js +11 -10
- package/dist/esm/utils/gemini_schema_util.js +144 -14
- package/dist/esm/utils/id_provider.js +33 -0
- package/dist/esm/utils/logger_node.js +4 -0
- package/dist/esm/utils/model_name.js +14 -0
- package/dist/esm/utils/output_schema_utils.js +5 -2
- package/dist/esm/utils/simple_zod_to_json.js +13 -31
- package/dist/esm/utils/ssrf_guard.js +55 -15
- package/dist/esm/utils/task.js +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/workflow/index.js +2 -1
- package/dist/esm/workflow/node_runner.js +26 -80
- package/dist/esm/workflow/nodes/parallel_worker.js +16 -6
- package/dist/esm/workflow/run_llm_agent_as_node.js +19 -14
- package/dist/esm/workflow/utils/retry_utils.js +2 -2
- package/dist/esm/workflow/workflow.js +12 -12
- package/dist/types/a2a/a2a_remote_agent.d.ts +6 -0
- package/dist/types/a2a/a2a_remote_agent_utils.d.ts +3 -2
- package/dist/types/agents/agent_engine_client.d.ts +155 -0
- package/dist/types/agents/base_agent.d.ts +14 -0
- package/dist/types/agents/llm_agent.d.ts +5 -1
- package/dist/types/agents/processors/content_processor_utils.d.ts +12 -10
- package/dist/types/agents/processors/nl_planning_processor.d.ts +2 -1
- package/dist/types/agents/run_config.d.ts +14 -0
- package/dist/types/cli/cli_eval.d.ts +172 -9
- package/dist/types/cli/utils/cleanup.d.ts +18 -0
- package/dist/types/cli/utils/envs.d.ts +13 -3
- package/dist/types/cli/utils/evals.d.ts +64 -1
- package/dist/types/cli/utils/logs.d.ts +20 -3
- package/dist/types/cli/utils/path_validation.d.ts +30 -0
- package/dist/types/code_executors/container_code_executor.d.ts +62 -9
- package/dist/types/common.d.ts +21 -18
- package/dist/types/context/compaction_utils.d.ts +13 -1
- package/dist/types/errors/input_validation_error.d.ts +2 -1
- package/dist/types/events/event.d.ts +3 -0
- package/dist/types/features/feature_registry.d.ts +1 -0
- package/dist/types/index.d.ts +11 -6
- package/dist/types/plugins/base_plugin.d.ts +50 -31
- package/dist/types/plugins/plugin_manager.d.ts +13 -0
- package/dist/types/runner/runner.d.ts +11 -0
- package/dist/types/sessions/base_session_service.d.ts +5 -2
- package/dist/types/sessions/database_session_service.d.ts +17 -1
- package/dist/types/sessions/db/operations.d.ts +2 -1
- package/dist/types/sessions/db/schema.d.ts +5 -3
- package/dist/types/sessions/stale_session_error.d.ts +21 -0
- package/dist/types/skills/loader.d.ts +3 -2
- package/dist/types/telemetry/api/instrumentation.d.ts +259 -0
- package/dist/types/telemetry/api/internal/common/accumulators.d.ts +91 -0
- package/dist/types/telemetry/api/internal/common/attributes.d.ts +90 -0
- package/dist/types/telemetry/api/internal/common/config.d.ts +61 -0
- package/dist/types/telemetry/api/internal/common/error.d.ts +29 -0
- package/dist/types/telemetry/api/internal/common/finish_reason.d.ts +18 -0
- package/dist/types/telemetry/api/internal/common/genai_messages.d.ts +26 -0
- package/dist/types/telemetry/api/internal/common/http_exchange.d.ts +50 -0
- package/dist/types/telemetry/api/internal/common/provider_name.d.ts +16 -0
- package/dist/types/telemetry/api/internal/common/redaction.d.ts +14 -0
- package/dist/types/telemetry/api/internal/common/serialization.d.ts +18 -0
- package/dist/types/telemetry/api/internal/common/token_usage.d.ts +47 -0
- package/dist/types/telemetry/api/internal/logs/inference.d.ts +15 -0
- package/dist/types/telemetry/api/internal/logs/logger.d.ts +13 -0
- package/dist/types/telemetry/api/internal/logs/mcp.d.ts +31 -0
- package/dist/types/telemetry/api/internal/metrics/agent.d.ts +28 -0
- package/dist/types/telemetry/api/internal/metrics/inference_start_hook.d.ts +12 -0
- package/dist/types/telemetry/api/internal/metrics/meters.d.ts +57 -0
- package/dist/types/telemetry/api/internal/metrics/tool.d.ts +44 -0
- package/dist/types/telemetry/api/internal/metrics/workflow.d.ts +32 -0
- package/dist/types/telemetry/api/internal/trace/agent.d.ts +14 -0
- package/dist/types/telemetry/api/internal/trace/compaction.d.ts +20 -0
- package/dist/types/telemetry/api/internal/trace/inference.d.ts +31 -0
- package/dist/types/telemetry/api/internal/trace/live.d.ts +21 -0
- package/dist/types/telemetry/api/internal/trace/node.d.ts +22 -0
- package/dist/types/telemetry/api/internal/trace/propagation.d.ts +22 -0
- package/dist/types/telemetry/api/internal/trace/tool.d.ts +57 -0
- package/dist/types/telemetry/api/internal/trace/tracer.d.ts +31 -0
- package/dist/types/telemetry/api/internal/trace/workflow.d.ts +21 -0
- package/dist/types/telemetry/export/agent_engine.d.ts +23 -0
- package/dist/types/telemetry/export/agent_runtime.d.ts +40 -0
- package/dist/types/telemetry/export/google_cloud.d.ts +189 -0
- package/dist/types/telemetry/export/request_driven_metric_reader.d.ts +144 -0
- package/dist/types/telemetry/{setup.d.ts → export/setup.d.ts} +3 -0
- package/dist/types/tools/agent_tool.d.ts +1 -1
- package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +14 -21
- package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +32 -9
- package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +35 -12
- package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +3 -3
- package/dist/types/tools/application_integration_tool/integration_connector_tool.d.ts +70 -0
- package/dist/types/tools/base_toolset.d.ts +7 -6
- package/dist/types/tools/computer_use/base_computer.d.ts +281 -0
- package/dist/types/tools/computer_use/computer_use_actions.d.ts +53 -0
- package/dist/types/tools/computer_use/computer_use_tool.d.ts +108 -0
- package/dist/types/tools/computer_use/computer_use_toolset.d.ts +132 -0
- package/dist/types/tools/google_api_tool/google_api_tool.d.ts +10 -3
- package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +57 -0
- package/dist/types/tools/google_api_tool/google_api_toolsets.d.ts +48 -0
- package/dist/types/tools/google_api_tool/googleapi_to_openapi_converter.d.ts +5 -4
- package/dist/types/tools/google_api_tool/index.d.ts +4 -5
- package/dist/types/tools/load_artifacts_tool.d.ts +18 -1
- package/dist/types/tools/load_memory_tool.d.ts +32 -4
- package/dist/types/tools/mcp/mcp_session_manager.d.ts +16 -0
- package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +8 -8
- package/dist/types/tools/openapi_tool/openapi_spec_parser/openapi_spec_parser.d.ts +12 -0
- package/dist/types/tools/openapi_tool/openapi_spec_parser/operation_parser.d.ts +15 -3
- package/dist/types/tools/openapi_tool/openapi_toolset.d.ts +5 -0
- package/dist/types/tools/openapi_tool/rest_api_tool.d.ts +10 -0
- package/dist/types/tools/toolbox_toolset.d.ts +154 -0
- package/dist/types/utils/async_queue.d.ts +14 -0
- package/dist/types/utils/client_labels.d.ts +2 -1
- package/dist/types/utils/env_aware_utils.d.ts +11 -0
- package/dist/types/utils/error_utils.d.ts +4 -0
- package/dist/types/utils/gemini_schema_util.d.ts +29 -0
- package/dist/types/utils/id_provider.d.ts +43 -0
- package/dist/types/utils/model_name.d.ts +8 -0
- package/dist/types/utils/output_schema_utils.d.ts +3 -2
- package/dist/types/utils/simple_zod_to_json.d.ts +1 -2
- package/dist/types/utils/ssrf_guard.d.ts +2 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/types/workflow/index.d.ts +1 -1
- package/dist/types/workflow/nodes/parallel_worker.d.ts +8 -1
- package/dist/web/index_web.js +94 -88
- package/dist/web/index_web.js.map +4 -4
- package/package.json +43 -38
- package/dist/cjs/agents/remote_agent.js +0 -187
- package/dist/cjs/telemetry/google_cloud.js +0 -116
- package/dist/cjs/telemetry/tracing.js +0 -350
- package/dist/cjs/tools/crewai_tool.js +0 -132
- package/dist/cjs/tools/google_api_tool/google_api_tool_set.js +0 -226
- package/dist/cjs/tools/google_api_tool/google_api_tool_sets.js +0 -58
- package/dist/cjs/tools/langchain_tool.js +0 -172
- package/dist/cjs/tools/toolbox_tool.js +0 -108
- package/dist/esm/agents/remote_agent.js +0 -164
- package/dist/esm/telemetry/google_cloud.js +0 -99
- package/dist/esm/telemetry/setup.js +0 -89
- package/dist/esm/telemetry/tracing.js +0 -315
- package/dist/esm/tools/crewai_tool.js +0 -107
- package/dist/esm/tools/google_api_tool/google_api_tool_set.js +0 -188
- package/dist/esm/tools/google_api_tool/google_api_tool_sets.js +0 -24
- package/dist/esm/tools/langchain_tool.js +0 -148
- package/dist/esm/tools/toolbox_tool.js +0 -80
- package/dist/types/agents/remote_agent.d.ts +0 -68
- package/dist/types/telemetry/google_cloud.d.ts +0 -9
- package/dist/types/telemetry/tracing.d.ts +0 -129
- package/dist/types/tools/crewai_tool.d.ts +0 -85
- package/dist/types/tools/google_api_tool/google_api_tool_set.d.ts +0 -78
- package/dist/types/tools/google_api_tool/google_api_tool_sets.d.ts +0 -33
- package/dist/types/tools/langchain_tool.d.ts +0 -103
- package/dist/types/tools/toolbox_tool.d.ts +0 -73
|
@@ -28,13 +28,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
* Copyright 2026 Google LLC
|
|
29
29
|
* SPDX-License-Identifier: Apache-2.0
|
|
30
30
|
*/
|
|
31
|
-
import {
|
|
31
|
+
import { newId } from "../utils/id_provider.js";
|
|
32
|
+
import { logger } from "../utils/logger.js";
|
|
32
33
|
import {
|
|
33
34
|
BaseSessionService,
|
|
34
35
|
mergeStates,
|
|
35
|
-
trimTempDeltaState
|
|
36
|
+
trimTempDeltaState,
|
|
37
|
+
upsertSessionEvent
|
|
36
38
|
} from "./base_session_service.js";
|
|
37
39
|
import { createSession } from "./session.js";
|
|
40
|
+
import { StaleSessionError } from "./stale_session_error.js";
|
|
38
41
|
import { State } from "./state.js";
|
|
39
42
|
let MikroORM;
|
|
40
43
|
let LockMode;
|
|
@@ -67,6 +70,85 @@ async function importMikroOrm() {
|
|
|
67
70
|
} = operations);
|
|
68
71
|
}
|
|
69
72
|
__name(importMikroOrm, "importMikroOrm");
|
|
73
|
+
import { isStaleSessionError, StaleSessionError as StaleSessionError2 } from "./stale_session_error.js";
|
|
74
|
+
const STORAGE_UPDATE_MARKER_SYMBOL = /* @__PURE__ */ Symbol.for(
|
|
75
|
+
"google.adk.session.storageUpdateMarker"
|
|
76
|
+
);
|
|
77
|
+
function setStorageRevisionMarker(session, revision) {
|
|
78
|
+
Object.defineProperty(session, STORAGE_UPDATE_MARKER_SYMBOL, {
|
|
79
|
+
value: revision,
|
|
80
|
+
writable: true,
|
|
81
|
+
configurable: true,
|
|
82
|
+
enumerable: false
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
__name(setStorageRevisionMarker, "setStorageRevisionMarker");
|
|
86
|
+
function getStorageRevisionMarker(session) {
|
|
87
|
+
return session[STORAGE_UPDATE_MARKER_SYMBOL];
|
|
88
|
+
}
|
|
89
|
+
__name(getStorageRevisionMarker, "getStorageRevisionMarker");
|
|
90
|
+
const MAX_IN_QUERY_IDS = 500;
|
|
91
|
+
async function sessionMatchesStorageRevision(txEm, session, eventsComplete, totalEventCount) {
|
|
92
|
+
const sessionWhere = {
|
|
93
|
+
appName: session.appName,
|
|
94
|
+
userId: session.userId,
|
|
95
|
+
sessionId: session.id
|
|
96
|
+
};
|
|
97
|
+
const latestStorageEvent = await txEm.findOne(StorageEvent, sessionWhere, {
|
|
98
|
+
orderBy: { timestamp: "DESC", id: "DESC" }
|
|
99
|
+
});
|
|
100
|
+
if (session.events.length === 0) {
|
|
101
|
+
if (latestStorageEvent !== null) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
if (totalEventCount !== void 0 && totalEventCount !== 0) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
if ((latestStorageEvent == null ? void 0 : latestStorageEvent.id) !== session.events[session.events.length - 1].id) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
if (totalEventCount !== void 0) {
|
|
113
|
+
const totalStored = await txEm.count(StorageEvent, sessionWhere);
|
|
114
|
+
if (totalStored !== totalEventCount) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const knownIds = session.events.map((e) => e.id);
|
|
119
|
+
if (knownIds.length <= MAX_IN_QUERY_IDS) {
|
|
120
|
+
const unknownEventWhere = {
|
|
121
|
+
...sessionWhere,
|
|
122
|
+
id: { $nin: knownIds }
|
|
123
|
+
};
|
|
124
|
+
if (!eventsComplete) {
|
|
125
|
+
unknownEventWhere.timestamp = {
|
|
126
|
+
$gte: new Date(session.events[0].timestamp)
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return await txEm.count(StorageEvent, unknownEventWhere) === 0;
|
|
130
|
+
}
|
|
131
|
+
const filter = { ...sessionWhere };
|
|
132
|
+
if (!eventsComplete) {
|
|
133
|
+
filter.timestamp = { $gte: new Date(session.events[0].timestamp) };
|
|
134
|
+
}
|
|
135
|
+
const storedEvents = await txEm.find(StorageEvent, filter, {
|
|
136
|
+
fields: ["id"]
|
|
137
|
+
});
|
|
138
|
+
const knownSet = new Set(knownIds);
|
|
139
|
+
for (const stored of storedEvents) {
|
|
140
|
+
if (!knownSet.has(stored.id)) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
__name(sessionMatchesStorageRevision, "sessionMatchesStorageRevision");
|
|
147
|
+
function formatDateTime(dateOrEpochMs) {
|
|
148
|
+
const date = typeof dateOrEpochMs === "number" ? new Date(dateOrEpochMs) : dateOrEpochMs;
|
|
149
|
+
return date.toISOString().replace("T", " ").replace("Z", "");
|
|
150
|
+
}
|
|
151
|
+
__name(formatDateTime, "formatDateTime");
|
|
70
152
|
function isDatabaseConnectionString(uri) {
|
|
71
153
|
if (!uri) {
|
|
72
154
|
return false;
|
|
@@ -75,16 +157,31 @@ function isDatabaseConnectionString(uri) {
|
|
|
75
157
|
}
|
|
76
158
|
__name(isDatabaseConnectionString, "isDatabaseConnectionString");
|
|
77
159
|
const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessionService {
|
|
78
|
-
constructor(connectionStringOrOptions) {
|
|
160
|
+
constructor(connectionStringOrOptions, options) {
|
|
161
|
+
var _a;
|
|
79
162
|
super();
|
|
80
163
|
this.initialized = false;
|
|
81
164
|
if (typeof connectionStringOrOptions === "string") {
|
|
82
165
|
this.connectionString = connectionStringOrOptions;
|
|
166
|
+
if (options) {
|
|
167
|
+
const { staleSession, ...mikroOptions } = options;
|
|
168
|
+
this.options = mikroOptions;
|
|
169
|
+
this.staleSession = staleSession != null ? staleSession : "reject";
|
|
170
|
+
} else {
|
|
171
|
+
this.staleSession = "reject";
|
|
172
|
+
}
|
|
83
173
|
} else {
|
|
84
|
-
|
|
174
|
+
const { staleSession: firstStaleSession, ...firstMikroOptions } = connectionStringOrOptions;
|
|
175
|
+
const { staleSession: secondStaleSession, ...secondMikroOptions } = options != null ? options : {};
|
|
176
|
+
const mergedMikroOptions = {
|
|
177
|
+
...firstMikroOptions,
|
|
178
|
+
...secondMikroOptions
|
|
179
|
+
};
|
|
180
|
+
if (!mergedMikroOptions.driver) {
|
|
85
181
|
throw new Error("Driver is required when passing options object.");
|
|
86
182
|
}
|
|
87
|
-
this.options =
|
|
183
|
+
this.options = mergedMikroOptions;
|
|
184
|
+
this.staleSession = (_a = secondStaleSession != null ? secondStaleSession : firstStaleSession) != null ? _a : "reject";
|
|
88
185
|
}
|
|
89
186
|
}
|
|
90
187
|
async init() {
|
|
@@ -92,7 +189,11 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
92
189
|
return;
|
|
93
190
|
}
|
|
94
191
|
await loadMikroOrm();
|
|
95
|
-
const options = this.connectionString ?
|
|
192
|
+
const options = this.connectionString ? {
|
|
193
|
+
...await getConnectionOptionsFromUri(this.connectionString),
|
|
194
|
+
...this.options,
|
|
195
|
+
entities: ENTITIES
|
|
196
|
+
} : { ...this.options, entities: ENTITIES };
|
|
96
197
|
this.options = options;
|
|
97
198
|
this.orm = await MikroORM.init(options);
|
|
98
199
|
await ensureDatabaseCreated(this.orm);
|
|
@@ -107,7 +208,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
107
208
|
}) {
|
|
108
209
|
await this.init();
|
|
109
210
|
const em = this.orm.em.fork();
|
|
110
|
-
const id = sessionId ||
|
|
211
|
+
const id = sessionId || newId();
|
|
111
212
|
const now = /* @__PURE__ */ new Date();
|
|
112
213
|
const existing = await em.findOne(StorageSession, {
|
|
113
214
|
id,
|
|
@@ -170,14 +271,22 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
170
271
|
userStateModel.state,
|
|
171
272
|
sessionState
|
|
172
273
|
);
|
|
173
|
-
|
|
274
|
+
const session = createSession({
|
|
174
275
|
id,
|
|
175
276
|
appName,
|
|
176
277
|
userId,
|
|
177
278
|
state: mergedState,
|
|
178
279
|
events: [],
|
|
179
|
-
lastUpdateTime: storageSession.
|
|
280
|
+
lastUpdateTime: storageSession.updateTime.getTime()
|
|
281
|
+
});
|
|
282
|
+
setStorageRevisionMarker(session, {
|
|
283
|
+
marker: storageSession.updateTime.toISOString(),
|
|
284
|
+
recordedLastUpdateTime: session.lastUpdateTime,
|
|
285
|
+
unverifiedWrite: true,
|
|
286
|
+
eventsComplete: true,
|
|
287
|
+
totalEventCount: 0
|
|
180
288
|
});
|
|
289
|
+
return session;
|
|
181
290
|
}
|
|
182
291
|
async getSession({
|
|
183
292
|
appName,
|
|
@@ -218,7 +327,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
218
327
|
(userStateModel == null ? void 0 : userStateModel.state) || {},
|
|
219
328
|
storageSession.state
|
|
220
329
|
);
|
|
221
|
-
|
|
330
|
+
const session = createSession({
|
|
222
331
|
id: sessionId,
|
|
223
332
|
appName,
|
|
224
333
|
userId,
|
|
@@ -226,6 +335,16 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
226
335
|
events: storageEvents.map((se) => se.eventData),
|
|
227
336
|
lastUpdateTime: storageSession.updateTime.getTime()
|
|
228
337
|
});
|
|
338
|
+
const eventsComplete = (config == null ? void 0 : config.numRecentEvents) === void 0 && (config == null ? void 0 : config.afterTimestamp) === void 0;
|
|
339
|
+
const totalEventCount = eventsComplete ? session.events.length : await em.count(StorageEvent, { appName, userId, sessionId });
|
|
340
|
+
setStorageRevisionMarker(session, {
|
|
341
|
+
marker: storageSession.updateTime.toISOString(),
|
|
342
|
+
recordedLastUpdateTime: session.lastUpdateTime,
|
|
343
|
+
unverifiedWrite: false,
|
|
344
|
+
eventsComplete,
|
|
345
|
+
totalEventCount
|
|
346
|
+
});
|
|
347
|
+
return session;
|
|
229
348
|
}
|
|
230
349
|
async listSessions({
|
|
231
350
|
appName,
|
|
@@ -238,7 +357,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
238
357
|
await this.init();
|
|
239
358
|
const em = this.orm.em.fork();
|
|
240
359
|
const where = { appName };
|
|
241
|
-
if (userId) {
|
|
360
|
+
if (userId !== void 0) {
|
|
242
361
|
where.userId = userId;
|
|
243
362
|
}
|
|
244
363
|
const orderBy = order === "asc" ? { updateTime: "ASC", id: "ASC" } : order === "desc" ? { updateTime: "DESC", id: "ASC" } : void 0;
|
|
@@ -287,7 +406,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
287
406
|
const appStateModel = await em.findOne(StorageAppState, { appName });
|
|
288
407
|
const appState = (appStateModel == null ? void 0 : appStateModel.state) || {};
|
|
289
408
|
const userStateMap = {};
|
|
290
|
-
if (userId) {
|
|
409
|
+
if (userId !== void 0) {
|
|
291
410
|
const u = await em.findOne(StorageUserState, { appName, userId });
|
|
292
411
|
if (u) userStateMap[userId] = u.state;
|
|
293
412
|
} else {
|
|
@@ -299,7 +418,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
299
418
|
const sessions = storageSessions.map((ss) => {
|
|
300
419
|
const uState = userStateMap[ss.userId] || {};
|
|
301
420
|
const merged = mergeStates(appState, uState, ss.state);
|
|
302
|
-
|
|
421
|
+
const session = createSession({
|
|
303
422
|
id: ss.id,
|
|
304
423
|
appName: ss.appName,
|
|
305
424
|
userId: ss.userId,
|
|
@@ -307,6 +426,13 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
307
426
|
events: [],
|
|
308
427
|
lastUpdateTime: ss.updateTime.getTime()
|
|
309
428
|
});
|
|
429
|
+
setStorageRevisionMarker(session, {
|
|
430
|
+
marker: ss.updateTime.toISOString(),
|
|
431
|
+
recordedLastUpdateTime: session.lastUpdateTime,
|
|
432
|
+
unverifiedWrite: false,
|
|
433
|
+
eventsComplete: false
|
|
434
|
+
});
|
|
435
|
+
return session;
|
|
310
436
|
});
|
|
311
437
|
return { sessions, ...paginationMeta };
|
|
312
438
|
}
|
|
@@ -324,12 +450,15 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
324
450
|
session,
|
|
325
451
|
event
|
|
326
452
|
}) {
|
|
453
|
+
var _a, _b;
|
|
327
454
|
await this.init();
|
|
328
455
|
const em = this.orm.em.fork();
|
|
329
456
|
if (event.partial) {
|
|
330
457
|
return event;
|
|
331
458
|
}
|
|
459
|
+
const stateDelta = (_b = (_a = event.actions) == null ? void 0 : _a.stateDelta) != null ? _b : {};
|
|
332
460
|
const trimmedEvent = trimTempDeltaState(event);
|
|
461
|
+
let sessionWasStale = false;
|
|
333
462
|
await em.transactional(async (txEm) => {
|
|
334
463
|
const storageSession = await txEm.findOne(
|
|
335
464
|
StorageSession,
|
|
@@ -343,6 +472,40 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
343
472
|
if (!storageSession) {
|
|
344
473
|
throw new Error(`Session ${session.id} not found for appendEvent`);
|
|
345
474
|
}
|
|
475
|
+
const storageUpdateTime = storageSession.updateTime.getTime();
|
|
476
|
+
const storageUpdateMarker = storageSession.updateTime.toISOString();
|
|
477
|
+
const rev = getStorageRevisionMarker(session);
|
|
478
|
+
const callerMutatedLastUpdateTime = rev !== void 0 && rev.recordedLastUpdateTime !== session.lastUpdateTime;
|
|
479
|
+
let isStale = false;
|
|
480
|
+
if (rev !== void 0 && !callerMutatedLastUpdateTime) {
|
|
481
|
+
if (rev.marker === storageUpdateMarker) {
|
|
482
|
+
session.lastUpdateTime = storageUpdateTime;
|
|
483
|
+
} else if (rev.unverifiedWrite && storageUpdateTime % 1e3 === 0 && Math.abs(storageUpdateTime - rev.recordedLastUpdateTime) < 1e3 && await sessionMatchesStorageRevision(
|
|
484
|
+
txEm,
|
|
485
|
+
session,
|
|
486
|
+
rev.eventsComplete,
|
|
487
|
+
rev.totalEventCount
|
|
488
|
+
)) {
|
|
489
|
+
session.lastUpdateTime = storageUpdateTime;
|
|
490
|
+
} else {
|
|
491
|
+
isStale = true;
|
|
492
|
+
}
|
|
493
|
+
} else if (rev !== void 0) {
|
|
494
|
+
isStale = storageUpdateTime > session.lastUpdateTime;
|
|
495
|
+
} else if (storageUpdateTime > session.lastUpdateTime) {
|
|
496
|
+
if (await sessionMatchesStorageRevision(txEm, session, false)) {
|
|
497
|
+
session.lastUpdateTime = storageUpdateTime;
|
|
498
|
+
} else {
|
|
499
|
+
isStale = true;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
if (isStale) {
|
|
503
|
+
if (this.staleSession === "reject") {
|
|
504
|
+
const message = storageUpdateTime > session.lastUpdateTime ? `The last_update_time provided in the session object ${formatDateTime(session.lastUpdateTime)} is earlier than the update_time in the storage_session ${formatDateTime(storageSession.updateTime)}. Please check if it is a stale session.` : `The session object with last_update_time ${formatDateTime(session.lastUpdateTime)} does not match the storage_session revision with update_time ${formatDateTime(storageSession.updateTime)}. Please check if it is a stale session.`;
|
|
505
|
+
throw new StaleSessionError(message);
|
|
506
|
+
}
|
|
507
|
+
sessionWasStale = true;
|
|
508
|
+
}
|
|
346
509
|
let appStateModel = await txEm.findOne(StorageAppState, {
|
|
347
510
|
appName: session.appName
|
|
348
511
|
});
|
|
@@ -366,24 +529,6 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
366
529
|
});
|
|
367
530
|
txEm.persist(userStateModel);
|
|
368
531
|
}
|
|
369
|
-
if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
|
|
370
|
-
const events = await txEm.find(
|
|
371
|
-
StorageEvent,
|
|
372
|
-
{
|
|
373
|
-
appName: session.appName,
|
|
374
|
-
userId: session.userId,
|
|
375
|
-
sessionId: session.id
|
|
376
|
-
},
|
|
377
|
-
{ orderBy: { timestamp: "ASC" } }
|
|
378
|
-
);
|
|
379
|
-
const mergedState = mergeStates(
|
|
380
|
-
appStateModel.state,
|
|
381
|
-
userStateModel.state,
|
|
382
|
-
storageSession.state
|
|
383
|
-
);
|
|
384
|
-
session.state = mergedState;
|
|
385
|
-
session.events = events.map((e) => e.eventData);
|
|
386
|
-
}
|
|
387
532
|
if (event.actions && event.actions.stateDelta) {
|
|
388
533
|
const appDelta = {};
|
|
389
534
|
const userDelta = {};
|
|
@@ -436,15 +581,61 @@ const _DatabaseSessionService = class _DatabaseSessionService extends BaseSessio
|
|
|
436
581
|
userStateModel.state,
|
|
437
582
|
storageSession.state
|
|
438
583
|
);
|
|
439
|
-
session.state
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
584
|
+
for (const source of [session.state, stateDelta]) {
|
|
585
|
+
for (const [key, value] of Object.entries(source)) {
|
|
586
|
+
if (key.startsWith(State.TEMP_PREFIX)) {
|
|
587
|
+
newMergedState[key] = value;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
445
590
|
}
|
|
591
|
+
session.state = newMergedState;
|
|
592
|
+
const isNewEvent = !existingStorageEvent;
|
|
593
|
+
upsertSessionEvent(session, event);
|
|
446
594
|
session.lastUpdateTime = storageSession.updateTime.getTime();
|
|
595
|
+
let nextTotalEventCount;
|
|
596
|
+
if (!callerMutatedLastUpdateTime && !isStale) {
|
|
597
|
+
if ((rev == null ? void 0 : rev.totalEventCount) !== void 0) {
|
|
598
|
+
nextTotalEventCount = rev.totalEventCount + (isNewEvent ? 1 : 0);
|
|
599
|
+
} else if ((rev == null ? void 0 : rev.eventsComplete) === true) {
|
|
600
|
+
nextTotalEventCount = session.events.length;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
setStorageRevisionMarker(session, {
|
|
604
|
+
marker: storageSession.updateTime.toISOString(),
|
|
605
|
+
recordedLastUpdateTime: session.lastUpdateTime,
|
|
606
|
+
unverifiedWrite: true,
|
|
607
|
+
eventsComplete: !callerMutatedLastUpdateTime && (rev == null ? void 0 : rev.eventsComplete) === true && !isStale,
|
|
608
|
+
totalEventCount: nextTotalEventCount
|
|
609
|
+
});
|
|
447
610
|
});
|
|
611
|
+
if (sessionWasStale) {
|
|
612
|
+
try {
|
|
613
|
+
const storageEvents = await em.find(
|
|
614
|
+
StorageEvent,
|
|
615
|
+
{
|
|
616
|
+
appName: session.appName,
|
|
617
|
+
userId: session.userId,
|
|
618
|
+
sessionId: session.id
|
|
619
|
+
},
|
|
620
|
+
{ orderBy: { timestamp: "ASC" } }
|
|
621
|
+
);
|
|
622
|
+
session.events = storageEvents.map((se) => se.eventData);
|
|
623
|
+
upsertSessionEvent(session, event);
|
|
624
|
+
const lastRev = getStorageRevisionMarker(session);
|
|
625
|
+
if (lastRev) {
|
|
626
|
+
setStorageRevisionMarker(session, {
|
|
627
|
+
...lastRev,
|
|
628
|
+
eventsComplete: true,
|
|
629
|
+
totalEventCount: session.events.length
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
} catch (e) {
|
|
633
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
634
|
+
logger.warn(
|
|
635
|
+
`Failed to reload events for stale session ${session.id} after appendEvent; the event was persisted but session.events may be missing concurrent appends: ${message}`
|
|
636
|
+
);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
448
639
|
return event;
|
|
449
640
|
}
|
|
450
641
|
};
|
|
@@ -452,5 +643,7 @@ __name(_DatabaseSessionService, "DatabaseSessionService");
|
|
|
452
643
|
let DatabaseSessionService = _DatabaseSessionService;
|
|
453
644
|
export {
|
|
454
645
|
DatabaseSessionService,
|
|
455
|
-
|
|
646
|
+
StaleSessionError2 as StaleSessionError,
|
|
647
|
+
isDatabaseConnectionString,
|
|
648
|
+
isStaleSessionError
|
|
456
649
|
};
|
|
@@ -300,8 +300,77 @@ async function getConnectionOptionsFromUri(uri) {
|
|
|
300
300
|
}
|
|
301
301
|
__name(getConnectionOptionsFromUri, "getConnectionOptionsFromUri");
|
|
302
302
|
async function ensureDatabaseCreated(orm) {
|
|
303
|
+
var _a;
|
|
303
304
|
await orm.schema.ensureDatabase();
|
|
304
|
-
|
|
305
|
+
const entityMetadata = [...orm.getMetadata().getAll().values()].filter(
|
|
306
|
+
(meta) => !meta.embeddable && !meta.virtual && !meta.view
|
|
307
|
+
);
|
|
308
|
+
if (entityMetadata.length === 0) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const platform = orm.driver.getPlatform();
|
|
312
|
+
const schemaHelper = platform.getSchemaHelper();
|
|
313
|
+
if (typeof (schemaHelper == null ? void 0 : schemaHelper.getAllTables) !== "function") {
|
|
314
|
+
await orm.schema.create();
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const connection = orm.driver.getConnection();
|
|
318
|
+
const defaultSchema = platform.getDefaultSchemaName();
|
|
319
|
+
const configSchema = orm.config.get("schema");
|
|
320
|
+
const dbName = orm.config.get("dbName");
|
|
321
|
+
const isCurrentSchema = /* @__PURE__ */ __name((schemaName) => !schemaName || schemaName === defaultSchema || defaultSchema === void 0 && schemaName === dbName, "isCurrentSchema");
|
|
322
|
+
const tableKey = /* @__PURE__ */ __name((tableName, schemaName) => {
|
|
323
|
+
const schemaPart = !schemaName || isCurrentSchema(schemaName) ? "" : schemaName;
|
|
324
|
+
return `${schemaPart}.${tableName}`.toLowerCase();
|
|
325
|
+
}, "tableKey");
|
|
326
|
+
const listedTables = await schemaHelper.getAllTables(connection);
|
|
327
|
+
const listedTableKeys = new Set(
|
|
328
|
+
listedTables.map((table) => tableKey(table.table_name, table.schema_name))
|
|
329
|
+
);
|
|
330
|
+
const seenTableKeys = /* @__PURE__ */ new Set();
|
|
331
|
+
const existingTableNames = [];
|
|
332
|
+
let missingCount = 0;
|
|
333
|
+
for (const meta of entityMetadata) {
|
|
334
|
+
const schemaName = (_a = meta.schema) != null ? _a : configSchema;
|
|
335
|
+
const key = tableKey(meta.tableName, schemaName);
|
|
336
|
+
if (seenTableKeys.has(key)) {
|
|
337
|
+
continue;
|
|
338
|
+
}
|
|
339
|
+
seenTableKeys.add(key);
|
|
340
|
+
let exists = listedTableKeys.has(key);
|
|
341
|
+
if (!exists && defaultSchema === void 0 && !isCurrentSchema(schemaName) && typeof schemaHelper.tableExists === "function") {
|
|
342
|
+
exists = await schemaHelper.tableExists(
|
|
343
|
+
connection,
|
|
344
|
+
meta.tableName,
|
|
345
|
+
schemaName
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
if (exists) {
|
|
349
|
+
existingTableNames.push(
|
|
350
|
+
schemaName && schemaName !== defaultSchema ? `${schemaName}.${meta.tableName}` : meta.tableName
|
|
351
|
+
);
|
|
352
|
+
} else {
|
|
353
|
+
missingCount++;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (missingCount === 0) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (existingTableNames.length === 0) {
|
|
360
|
+
await orm.schema.create();
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
const schemaGenConfig = orm.config.get("schemaGenerator");
|
|
364
|
+
const previousSkipTables = schemaGenConfig.skipTables;
|
|
365
|
+
schemaGenConfig.skipTables = [
|
|
366
|
+
...previousSkipTables != null ? previousSkipTables : [],
|
|
367
|
+
...existingTableNames
|
|
368
|
+
];
|
|
369
|
+
try {
|
|
370
|
+
await orm.schema.create();
|
|
371
|
+
} finally {
|
|
372
|
+
schemaGenConfig.skipTables = previousSkipTables;
|
|
373
|
+
}
|
|
305
374
|
}
|
|
306
375
|
__name(ensureDatabaseCreated, "ensureDatabaseCreated");
|
|
307
376
|
async function validateDatabaseSchemaVersion(orm) {
|
|
@@ -65,6 +65,7 @@ const storageAppStateSchema = new EntitySchema({
|
|
|
65
65
|
state: { type: "json" },
|
|
66
66
|
updateTime: {
|
|
67
67
|
type: "datetime",
|
|
68
|
+
length: EVENT_TIMESTAMP_PRECISION,
|
|
68
69
|
fieldName: "update_time",
|
|
69
70
|
onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate"),
|
|
70
71
|
onUpdate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onUpdate")
|
|
@@ -88,6 +89,7 @@ const storageUserStateSchema = new EntitySchema({
|
|
|
88
89
|
state: { type: "json" },
|
|
89
90
|
updateTime: {
|
|
90
91
|
type: "datetime",
|
|
92
|
+
length: EVENT_TIMESTAMP_PRECISION,
|
|
91
93
|
fieldName: "update_time",
|
|
92
94
|
onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate"),
|
|
93
95
|
onUpdate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onUpdate")
|
|
@@ -113,11 +115,13 @@ const storageSessionSchema = new EntitySchema({
|
|
|
113
115
|
state: { type: "json" },
|
|
114
116
|
createTime: {
|
|
115
117
|
type: "datetime",
|
|
118
|
+
length: EVENT_TIMESTAMP_PRECISION,
|
|
116
119
|
fieldName: "create_time",
|
|
117
120
|
onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate")
|
|
118
121
|
},
|
|
119
122
|
updateTime: {
|
|
120
123
|
type: "datetime",
|
|
124
|
+
length: EVENT_TIMESTAMP_PRECISION,
|
|
121
125
|
fieldName: "update_time",
|
|
122
126
|
onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate")
|
|
123
127
|
}
|
|
@@ -8,7 +8,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
8
8
|
* SPDX-License-Identifier: Apache-2.0
|
|
9
9
|
*/
|
|
10
10
|
import { cloneDeep } from "lodash-es";
|
|
11
|
-
import {
|
|
11
|
+
import { newId } from "../utils/id_provider.js";
|
|
12
12
|
import { logger } from "../utils/logger.js";
|
|
13
13
|
import {
|
|
14
14
|
BaseSessionService,
|
|
@@ -49,7 +49,7 @@ const _InMemorySessionService = class _InMemorySessionService extends BaseSessio
|
|
|
49
49
|
const session = createSession({
|
|
50
50
|
// Surrounding whitespace is dropped so that a later lookup by the bare
|
|
51
51
|
// id finds the session, and a blank id gets a generated one.
|
|
52
|
-
id: (sessionId == null ? void 0 : sessionId.trim()) ||
|
|
52
|
+
id: (sessionId == null ? void 0 : sessionId.trim()) || newId(),
|
|
53
53
|
appName,
|
|
54
54
|
userId,
|
|
55
55
|
state: filteredState,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {createRequire as topLevelCreateRequire} from 'module';
|
|
2
|
+
const require = topLevelCreateRequire(import.meta.url);
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
* Copyright 2026 Google LLC
|
|
8
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
*/
|
|
10
|
+
var _a, _b;
|
|
11
|
+
const STALE_SESSION_ERROR_SIGNATURE_SYMBOL = /* @__PURE__ */ Symbol.for(
|
|
12
|
+
"google.adk.staleSessionError"
|
|
13
|
+
);
|
|
14
|
+
const _StaleSessionError = class _StaleSessionError extends (_b = Error, _a = STALE_SESSION_ERROR_SIGNATURE_SYMBOL, _b) {
|
|
15
|
+
constructor(message) {
|
|
16
|
+
super(message);
|
|
17
|
+
this[_a] = true;
|
|
18
|
+
this.name = "StaleSessionError";
|
|
19
|
+
Object.setPrototypeOf(this, _StaleSessionError.prototype);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
__name(_StaleSessionError, "StaleSessionError");
|
|
23
|
+
let StaleSessionError = _StaleSessionError;
|
|
24
|
+
function isStaleSessionError(obj) {
|
|
25
|
+
return typeof obj === "object" && obj !== null && (STALE_SESSION_ERROR_SIGNATURE_SYMBOL in obj || obj instanceof Error && obj.name === "StaleSessionError");
|
|
26
|
+
}
|
|
27
|
+
__name(isStaleSessionError, "isStaleSessionError");
|
|
28
|
+
export {
|
|
29
|
+
StaleSessionError,
|
|
30
|
+
isStaleSessionError
|
|
31
|
+
};
|
|
@@ -19,6 +19,7 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
19
19
|
import { Client } from "@google-cloud/vertexai";
|
|
20
20
|
import { isCompactedEvent } from "../events/compacted_event.js";
|
|
21
21
|
import { experimental } from "../utils/experimental.js";
|
|
22
|
+
import { formatError } from "../utils/error_utils.js";
|
|
22
23
|
import { logger } from "../utils/logger.js";
|
|
23
24
|
import {
|
|
24
25
|
EXPRESS_MODE_UNSUPPORTED_MESSAGE,
|
|
@@ -314,9 +315,16 @@ let VertexAiSessionService = class extends BaseSessionService {
|
|
|
314
315
|
if (!session) {
|
|
315
316
|
return;
|
|
316
317
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
318
|
+
try {
|
|
319
|
+
await this.sessions.delete({
|
|
320
|
+
name: `reasoningEngines/${reasoningEngineId}/sessions/${sessionId}`
|
|
321
|
+
});
|
|
322
|
+
} catch (error) {
|
|
323
|
+
logger.error(
|
|
324
|
+
`Error deleting session ${sessionId}: ${formatError(error)}`
|
|
325
|
+
);
|
|
326
|
+
throw error;
|
|
327
|
+
}
|
|
320
328
|
}
|
|
321
329
|
async appendEvent({
|
|
322
330
|
session,
|