@google/adk 2.2.1 → 2.4.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 +4 -1
- package/dist/cjs/a2a/agent_card.js +102 -26
- package/dist/cjs/a2a/agent_to_a2a.js +1 -1
- package/dist/cjs/agents/agent_engine_client.js +172 -0
- package/dist/cjs/agents/base_agent.js +20 -4
- package/dist/cjs/agents/functions.js +227 -25
- package/dist/cjs/agents/instructions.js +6 -2
- package/dist/cjs/agents/invocation_context.js +26 -4
- package/dist/cjs/agents/langgraph_agent.js +152 -0
- package/dist/cjs/agents/llm_agent.js +194 -107
- package/dist/cjs/agents/processors/basic_llm_request_processor.js +1 -1
- package/dist/cjs/agents/processors/code_execution_request_processor.js +18 -6
- package/dist/cjs/agents/processors/content_processor_utils.js +38 -10
- package/dist/cjs/agents/processors/content_request_processor.js +34 -2
- package/dist/cjs/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/cjs/agents/processors/nl_planning_processor.js +12 -3
- package/dist/cjs/artifacts/in_memory_artifact_service.js +14 -0
- package/dist/cjs/auth/auth_handler.js +37 -5
- package/dist/cjs/auth/auth_schemes.js +9 -0
- package/dist/cjs/cli/cli_eval.js +532 -0
- package/dist/cjs/cli/utils/envs.js +116 -0
- package/dist/cjs/cli/utils/evals.js +137 -0
- package/dist/cjs/cli/utils/logs.js +150 -0
- package/dist/cjs/code_executors/agent_engine_sandbox_code_executor.js +7 -2
- package/dist/cjs/code_executors/code_execution_utils.js +48 -16
- package/dist/cjs/code_executors/code_executor_context.js +6 -2
- package/dist/cjs/code_executors/container_code_executor.js +27 -16
- package/dist/cjs/code_executors/unsafe_local_code_executor.js +6 -1
- package/dist/cjs/common.js +61 -0
- package/dist/cjs/context/summarizers/llm_summarizer.js +12 -10
- package/dist/cjs/context/token_based_context_compactor.js +2 -1
- package/dist/cjs/errors/input_validation_error.js +3 -2
- package/dist/cjs/events/event.js +4 -2
- package/dist/cjs/examples/example_util.js +23 -2
- package/dist/cjs/flows/llm_flows/audio_transcriber.js +170 -0
- package/dist/cjs/index.js +104 -1
- package/dist/cjs/integrations/agent_registry/helpers.js +1 -1
- package/dist/cjs/models/gemini_llm_connection.js +16 -8
- package/dist/cjs/models/google_llm.js +13 -16
- package/dist/cjs/models/llm_response.js +9 -1
- package/dist/cjs/models/registry.js +1 -1
- package/dist/cjs/models/routed_llm.js +9 -8
- package/dist/cjs/planners/plan_re_act_planner.js +1 -1
- package/dist/cjs/plugins/base_plugin.js +13 -23
- package/dist/cjs/runner/in_memory_runner.js +6 -11
- package/dist/cjs/runner/runner.js +105 -33
- package/dist/cjs/sessions/base_session_service.js +14 -8
- package/dist/cjs/sessions/database_session_service.js +50 -28
- package/dist/cjs/sessions/db/operations.js +1 -1
- package/dist/cjs/sessions/in_memory_session_service.js +3 -1
- package/dist/cjs/sessions/stale_session_error.js +59 -0
- package/dist/cjs/sessions/state.js +8 -4
- package/dist/cjs/sessions/vertex_ai_session_service.js +34 -15
- package/dist/cjs/skills/loader.js +52 -18
- package/dist/cjs/telemetry/setup.js +0 -1
- package/dist/cjs/telemetry/tracing.js +147 -73
- package/dist/cjs/tools/agent_tool.js +44 -0
- package/dist/cjs/tools/apihub_tool/apihub_toolset.js +137 -0
- package/dist/cjs/tools/apihub_tool/clients/apihub_client.js +272 -0
- package/dist/cjs/tools/apihub_tool/clients/secret_client.js +148 -0
- package/dist/cjs/tools/apihub_tool/clients/service_account.js +48 -0
- package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +263 -0
- package/dist/cjs/tools/application_integration_tool/clients/cloud_request.js +133 -0
- package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +671 -0
- package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +223 -0
- package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +184 -0
- package/dist/cjs/tools/example_tool.js +10 -0
- package/dist/cjs/tools/function_tool.js +319 -0
- package/dist/cjs/tools/google_api_tool/google_api_tool.js +100 -0
- package/dist/cjs/tools/google_api_tool/google_api_toolset.js +173 -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 +440 -0
- package/dist/cjs/tools/google_api_tool/index.js +61 -0
- package/dist/cjs/tools/load_artifacts_tool.js +12 -6
- package/dist/cjs/tools/load_memory_tool.js +12 -10
- package/dist/cjs/tools/mcp/index.js +12 -0
- package/dist/cjs/tools/mcp/mcp_session_manager.js +25 -0
- package/dist/cjs/tools/mcp/mcp_toolset.js +1 -14
- package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +1 -2
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +46 -2
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -3
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
- 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_spec_parser/tool_auth_handler.js +14 -2
- package/dist/cjs/tools/openapi_tool/openapi_toolset.js +7 -13
- package/dist/cjs/tools/openapi_tool/rest_api_tool.js +17 -1
- package/dist/cjs/tools/retrieval/base_retrieval_tool.js +18 -3
- package/dist/cjs/tools/toolbox_toolset.js +174 -0
- package/dist/cjs/tools/webmcp/webmcp_toolset.js +1 -14
- package/dist/cjs/utils/client_labels.js +19 -2
- package/dist/cjs/utils/env_aware_utils.js +6 -8
- package/dist/cjs/utils/error_utils.js +11 -11
- package/dist/cjs/utils/failover_utils.js +1 -1
- package/dist/cjs/utils/file_extension_utils.js +11 -0
- package/dist/cjs/utils/file_utils.js +2 -24
- package/dist/cjs/utils/gemini_schema_util.js +28 -7
- package/dist/cjs/utils/json_utils.js +49 -0
- package/dist/cjs/utils/live_connection_utils.js +4 -5
- package/dist/cjs/utils/logger_node.js +11 -1
- package/dist/cjs/utils/object_notation_utils.js +6 -3
- package/dist/cjs/utils/output_schema_utils.js +5 -2
- package/dist/cjs/utils/streaming_utils.js +12 -12
- package/dist/cjs/utils/task.js +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/a2a/a2a_remote_agent.js +4 -1
- package/dist/esm/a2a/agent_card.js +103 -27
- package/dist/esm/a2a/agent_to_a2a.js +5 -2
- package/dist/esm/agents/agent_engine_client.js +144 -0
- package/dist/esm/agents/base_agent.js +20 -4
- package/dist/esm/agents/functions.js +226 -25
- package/dist/esm/agents/instructions.js +6 -2
- package/dist/esm/agents/invocation_context.js +24 -4
- package/dist/esm/agents/langgraph_agent.js +123 -0
- package/dist/esm/agents/llm_agent.js +204 -110
- package/dist/esm/agents/processors/basic_llm_request_processor.js +1 -1
- package/dist/esm/agents/processors/code_execution_request_processor.js +21 -8
- package/dist/esm/agents/processors/content_processor_utils.js +38 -10
- package/dist/esm/agents/processors/content_request_processor.js +34 -2
- package/dist/esm/agents/processors/instructions_llm_request_processor.js +1 -1
- package/dist/esm/agents/processors/nl_planning_processor.js +12 -3
- package/dist/esm/artifacts/in_memory_artifact_service.js +14 -0
- package/dist/esm/auth/auth_handler.js +37 -5
- package/dist/esm/auth/auth_schemes.js +8 -0
- package/dist/esm/cli/cli_eval.js +510 -0
- package/dist/esm/cli/utils/envs.js +78 -0
- package/dist/esm/cli/utils/evals.js +109 -0
- package/dist/esm/cli/utils/logs.js +111 -0
- package/dist/esm/code_executors/agent_engine_sandbox_code_executor.js +7 -2
- package/dist/esm/code_executors/code_execution_utils.js +46 -16
- package/dist/esm/code_executors/code_executor_context.js +5 -2
- package/dist/esm/code_executors/container_code_executor.js +27 -16
- package/dist/esm/code_executors/unsafe_local_code_executor.js +6 -1
- package/dist/esm/common.js +65 -4
- package/dist/esm/context/summarizers/llm_summarizer.js +12 -10
- package/dist/esm/context/token_based_context_compactor.js +2 -1
- package/dist/esm/errors/input_validation_error.js +3 -2
- package/dist/esm/events/event.js +4 -2
- package/dist/esm/examples/example_util.js +21 -1
- package/dist/esm/flows/llm_flows/audio_transcriber.js +142 -0
- package/dist/esm/index.js +114 -2
- package/dist/esm/integrations/agent_registry/helpers.js +1 -1
- package/dist/esm/models/gemini_llm_connection.js +16 -8
- package/dist/esm/models/google_llm.js +14 -17
- package/dist/esm/models/llm_response.js +9 -1
- package/dist/esm/models/registry.js +1 -1
- package/dist/esm/models/routed_llm.js +9 -8
- package/dist/esm/planners/plan_re_act_planner.js +1 -1
- package/dist/esm/plugins/base_plugin.js +13 -23
- package/dist/esm/runner/in_memory_runner.js +6 -11
- package/dist/esm/runner/runner.js +105 -33
- package/dist/esm/sessions/base_session_service.js +12 -7
- package/dist/esm/sessions/database_session_service.js +49 -28
- package/dist/esm/sessions/db/operations.js +1 -1
- package/dist/esm/sessions/in_memory_session_service.js +3 -1
- package/dist/esm/sessions/stale_session_error.js +31 -0
- package/dist/esm/sessions/state.js +8 -4
- package/dist/esm/sessions/vertex_ai_session_service.js +34 -15
- package/dist/esm/skills/loader.js +51 -17
- package/dist/esm/telemetry/setup.js +1 -2
- package/dist/esm/telemetry/tracing.js +151 -74
- package/dist/esm/tools/agent_tool.js +44 -0
- package/dist/esm/tools/apihub_tool/apihub_toolset.js +101 -0
- package/dist/esm/tools/apihub_tool/clients/apihub_client.js +244 -0
- package/dist/esm/tools/apihub_tool/clients/secret_client.js +132 -0
- package/dist/esm/tools/apihub_tool/clients/service_account.js +21 -0
- package/dist/esm/tools/application_integration_tool/application_integration_toolset.js +245 -0
- package/dist/esm/tools/application_integration_tool/clients/cloud_request.js +103 -0
- package/dist/esm/tools/application_integration_tool/clients/connections_client.js +629 -0
- package/dist/esm/tools/application_integration_tool/clients/integration_client.js +219 -0
- package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +158 -0
- package/dist/esm/tools/example_tool.js +13 -1
- package/dist/esm/tools/function_tool.js +316 -0
- package/dist/esm/tools/google_api_tool/google_api_tool.js +73 -0
- package/dist/esm/tools/google_api_tool/google_api_toolset.js +146 -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 +393 -0
- package/dist/esm/tools/google_api_tool/index.js +31 -0
- package/dist/esm/tools/load_artifacts_tool.js +10 -5
- package/dist/esm/tools/load_memory_tool.js +12 -10
- package/dist/esm/tools/mcp/index.js +6 -0
- package/dist/esm/tools/mcp/mcp_session_manager.js +25 -0
- package/dist/esm/tools/mcp/mcp_toolset.js +1 -14
- package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +1 -2
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.js +50 -3
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +4 -3
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/service_account_exchanger.js +94 -10
- 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_spec_parser/tool_auth_handler.js +15 -2
- package/dist/esm/tools/openapi_tool/openapi_toolset.js +6 -12
- package/dist/esm/tools/openapi_tool/rest_api_tool.js +17 -1
- package/dist/esm/tools/retrieval/base_retrieval_tool.js +16 -2
- package/dist/esm/tools/toolbox_toolset.js +148 -0
- package/dist/esm/tools/webmcp/webmcp_toolset.js +1 -14
- package/dist/esm/utils/client_labels.js +19 -2
- package/dist/esm/utils/env_aware_utils.js +6 -8
- package/dist/esm/utils/error_utils.js +9 -10
- package/dist/esm/utils/failover_utils.js +1 -1
- package/dist/esm/utils/file_extension_utils.js +11 -0
- package/dist/esm/utils/file_utils.js +2 -23
- package/dist/esm/utils/gemini_schema_util.js +27 -7
- package/dist/esm/utils/json_utils.js +21 -0
- package/dist/esm/utils/live_connection_utils.js +4 -5
- package/dist/esm/utils/logger_node.js +11 -1
- package/dist/esm/utils/object_notation_utils.js +4 -2
- package/dist/esm/utils/output_schema_utils.js +5 -2
- package/dist/esm/utils/streaming_utils.js +11 -11
- package/dist/esm/utils/task.js +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/types/a2a/a2a_remote_agent.d.ts +9 -0
- package/dist/types/a2a/agent_card.d.ts +44 -1
- package/dist/types/a2a/agent_to_a2a.d.ts +9 -0
- package/dist/types/a2a/index.d.ts +1 -0
- package/dist/types/agents/agent_engine_client.d.ts +37 -0
- package/dist/types/agents/base_agent.d.ts +12 -0
- package/dist/types/agents/functions.d.ts +33 -1
- package/dist/types/agents/invocation_context.d.ts +20 -1
- package/dist/types/agents/langgraph_agent.d.ts +153 -0
- package/dist/types/agents/llm_agent.d.ts +5 -1
- package/dist/types/agents/processors/content_processor_utils.d.ts +4 -2
- package/dist/types/agents/processors/nl_planning_processor.d.ts +2 -1
- package/dist/types/auth/auth_handler.d.ts +28 -1
- package/dist/types/auth/auth_schemes.d.ts +13 -0
- package/dist/types/cli/cli_eval.d.ts +173 -0
- package/dist/types/cli/utils/envs.d.ts +23 -0
- package/dist/types/cli/utils/evals.d.ts +47 -0
- package/dist/types/cli/utils/logs.d.ts +38 -0
- package/dist/types/code_executors/code_execution_utils.d.ts +39 -0
- package/dist/types/code_executors/code_executor_context.d.ts +1 -0
- package/dist/types/code_executors/container_code_executor.d.ts +17 -5
- package/dist/types/common.d.ts +24 -5
- package/dist/types/errors/input_validation_error.d.ts +2 -1
- package/dist/types/events/event.d.ts +4 -0
- package/dist/types/examples/example_util.d.ts +17 -0
- package/dist/types/flows/llm_flows/audio_transcriber.d.ts +85 -0
- package/dist/types/index.d.ts +19 -2
- package/dist/types/models/gemini_llm_connection.d.ts +6 -7
- package/dist/types/models/routed_llm.d.ts +1 -1
- package/dist/types/plugins/base_plugin.d.ts +0 -10
- package/dist/types/runner/in_memory_runner.d.ts +2 -1
- package/dist/types/runner/runner.d.ts +34 -0
- package/dist/types/sessions/base_session_service.d.ts +5 -0
- package/dist/types/sessions/database_session_service.d.ts +17 -1
- package/dist/types/sessions/stale_session_error.d.ts +21 -0
- package/dist/types/sessions/state.d.ts +5 -1
- package/dist/types/sessions/vertex_ai_session_service.d.ts +8 -0
- package/dist/types/skills/loader.d.ts +3 -2
- package/dist/types/skills/skill.d.ts +1 -1
- package/dist/types/telemetry/tracing.d.ts +20 -4
- package/dist/types/tools/apihub_tool/apihub_toolset.d.ts +115 -0
- package/dist/types/tools/apihub_tool/clients/apihub_client.d.ts +142 -0
- package/dist/types/tools/apihub_tool/clients/secret_client.d.ts +55 -0
- package/dist/types/tools/apihub_tool/clients/service_account.d.ts +11 -0
- package/dist/types/tools/application_integration_tool/application_integration_toolset.d.ts +109 -0
- package/dist/types/tools/application_integration_tool/clients/cloud_request.d.ts +53 -0
- package/dist/types/tools/application_integration_tool/clients/connections_client.d.ts +229 -0
- package/dist/types/tools/application_integration_tool/clients/integration_client.d.ts +72 -0
- package/dist/types/tools/application_integration_tool/integration_connector_tool.d.ts +70 -0
- package/dist/types/tools/base_toolset.d.ts +6 -5
- package/dist/types/tools/example_tool.d.ts +10 -0
- package/dist/types/tools/function_tool.d.ts +32 -0
- package/dist/types/tools/google_api_tool/google_api_tool.d.ts +37 -0
- package/dist/types/tools/google_api_tool/google_api_toolset.d.ts +55 -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 +165 -0
- package/dist/types/tools/google_api_tool/index.d.ts +10 -0
- package/dist/types/tools/load_artifacts_tool.d.ts +14 -1
- package/dist/types/tools/load_memory_tool.d.ts +23 -1
- package/dist/types/tools/mcp/index.d.ts +3 -0
- package/dist/types/tools/mcp/mcp_session_manager.d.ts +34 -1
- package/dist/types/tools/mcp/mcp_toolset.d.ts +15 -0
- package/dist/types/tools/openapi_tool/auth/auth_helpers.d.ts +19 -0
- package/dist/types/tools/openapi_tool/auth/credential_exchangers/auto_auth_credential_exchanger.d.ts +18 -1
- 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 +8 -0
- package/dist/types/tools/openapi_tool/openapi_spec_parser/tool_auth_handler.d.ts +2 -1
- 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/retrieval/base_retrieval_tool.d.ts +15 -0
- package/dist/types/tools/toolbox_toolset.d.ts +159 -0
- package/dist/types/utils/client_labels.d.ts +2 -1
- package/dist/types/utils/env_aware_utils.d.ts +18 -2
- package/dist/types/utils/error_utils.d.ts +7 -0
- package/dist/types/utils/file_utils.d.ts +6 -1
- package/dist/types/utils/gemini_schema_util.d.ts +9 -2
- package/dist/types/utils/json_utils.d.ts +11 -0
- package/dist/types/utils/object_notation_utils.d.ts +7 -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/streaming_utils.d.ts +11 -4
- package/dist/types/version.d.ts +1 -1
- package/dist/web/index_web.js +117 -110
- package/dist/web/index_web.js.map +4 -4
- package/package.json +38 -26
- package/dist/cjs/models/gemini_continuation.js +0 -232
- package/dist/esm/models/gemini_continuation.js +0 -205
- package/dist/types/models/gemini_continuation.d.ts +0 -59
|
@@ -43,6 +43,7 @@ var import_run_config = require("../agents/run_config.js");
|
|
|
43
43
|
var import_scoped_artifact_service = require("../artifacts/scoped_artifact_service.js");
|
|
44
44
|
var import_session_artifact_service = require("../artifacts/session_artifact_service.js");
|
|
45
45
|
var import_built_in_code_executor = require("../code_executors/built_in_code_executor.js");
|
|
46
|
+
var import_abort_events = require("../events/abort_events.js");
|
|
46
47
|
var import_event = require("../events/event.js");
|
|
47
48
|
var import_event_actions = require("../events/event_actions.js");
|
|
48
49
|
var import_internal_metadata = require("../events/internal_metadata.js");
|
|
@@ -73,8 +74,8 @@ const _Runner = class _Runner {
|
|
|
73
74
|
*/
|
|
74
75
|
constructor(input) {
|
|
75
76
|
this[_a] = true;
|
|
76
|
-
var _a2, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
77
|
-
const appName = (_b = (_a2 = input.app) == null ? void 0 : _a2.name
|
|
77
|
+
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
78
|
+
const appName = (_b = input.appName) != null ? _b : (_a2 = input.app) == null ? void 0 : _a2.name;
|
|
78
79
|
const agent = (_d = (_c = input.app) == null ? void 0 : _c.rootAgent) != null ? _d : input.agent;
|
|
79
80
|
if (!agent) {
|
|
80
81
|
throw new Error(
|
|
@@ -91,6 +92,20 @@ const _Runner = class _Runner {
|
|
|
91
92
|
this.memoryService = input.memoryService;
|
|
92
93
|
this.credentialService = input.credentialService;
|
|
93
94
|
this.resumabilityConfig = (_i = (_h = input.app) == null ? void 0 : _h.resumabilityConfig) != null ? _i : input.resumabilityConfig;
|
|
95
|
+
this.autoCreateSession = (_j = input.autoCreateSession) != null ? _j : false;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Looks the session up, creating it first when `autoCreateSession` is set.
|
|
99
|
+
*
|
|
100
|
+
* A runner with no `appName` cannot address a session, so it falls through to
|
|
101
|
+
* the plain lookup rather than creating one under an undefined app name.
|
|
102
|
+
*/
|
|
103
|
+
async resolveSession(userId, sessionId) {
|
|
104
|
+
const key = { appName: this.appName, userId, sessionId };
|
|
105
|
+
if (this.autoCreateSession && this.appName) {
|
|
106
|
+
return this.sessionService.getOrCreateSession(key);
|
|
107
|
+
}
|
|
108
|
+
return this.sessionService.getSession(key);
|
|
94
109
|
}
|
|
95
110
|
/**
|
|
96
111
|
* Runs the agent with a new, ephemeral session.
|
|
@@ -151,12 +166,8 @@ const _Runner = class _Runner {
|
|
|
151
166
|
ctx,
|
|
152
167
|
this,
|
|
153
168
|
async function* () {
|
|
154
|
-
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
155
|
-
const session = await this.
|
|
156
|
-
appName: this.appName,
|
|
157
|
-
userId,
|
|
158
|
-
sessionId
|
|
159
|
-
});
|
|
169
|
+
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
170
|
+
const session = await this.resolveSession(userId, sessionId);
|
|
160
171
|
if ((_a2 = params.abortSignal) == null ? void 0 : _a2.aborted) {
|
|
161
172
|
return;
|
|
162
173
|
}
|
|
@@ -267,35 +278,45 @@ const _Runner = class _Runner {
|
|
|
267
278
|
}
|
|
268
279
|
yield earlyExitEvent;
|
|
269
280
|
} else {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
session,
|
|
289
|
-
event: outputEvent
|
|
290
|
-
});
|
|
281
|
+
let abortSealed = false;
|
|
282
|
+
const sealAbortedInvocation = /* @__PURE__ */ __name(() => {
|
|
283
|
+
abortSealed = true;
|
|
284
|
+
return this.synthesizeAbortEvents(invocationContext);
|
|
285
|
+
}, "sealAbortedInvocation");
|
|
286
|
+
try {
|
|
287
|
+
for await (const event of this.runRoot(invocationContext)) {
|
|
288
|
+
if ((_h = params.abortSignal) == null ? void 0 : _h.aborted) {
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
const outputEvent = await this.processAndAppendEvent(
|
|
292
|
+
invocationContext,
|
|
293
|
+
event
|
|
294
|
+
);
|
|
295
|
+
if ((_i = params.abortSignal) == null ? void 0 : _i.aborted) {
|
|
296
|
+
break;
|
|
297
|
+
}
|
|
298
|
+
yield outputEvent;
|
|
291
299
|
}
|
|
292
300
|
if ((_j = params.abortSignal) == null ? void 0 : _j.aborted) {
|
|
301
|
+
for (const abortEvent of await sealAbortedInvocation()) {
|
|
302
|
+
yield abortEvent;
|
|
303
|
+
}
|
|
293
304
|
return;
|
|
294
305
|
}
|
|
295
|
-
|
|
306
|
+
} finally {
|
|
307
|
+
if (((_k = params.abortSignal) == null ? void 0 : _k.aborted) && !abortSealed) {
|
|
308
|
+
try {
|
|
309
|
+
await sealAbortedInvocation();
|
|
310
|
+
} catch (e) {
|
|
311
|
+
import_logger.logger.error(
|
|
312
|
+
`Failed to seal aborted invocation ${invocationContext.invocationId}.`,
|
|
313
|
+
e
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
296
317
|
}
|
|
297
318
|
await this.pluginManager.runAfterRunCallback({ invocationContext });
|
|
298
|
-
if ((
|
|
319
|
+
if ((_l = params.abortSignal) == null ? void 0 : _l.aborted) {
|
|
299
320
|
return;
|
|
300
321
|
}
|
|
301
322
|
}
|
|
@@ -327,6 +348,56 @@ const _Runner = class _Runner {
|
|
|
327
348
|
}
|
|
328
349
|
yield* (0, import_run_node_as_invocation.runNodeAsInvocation)(this.agent, invocationContext);
|
|
329
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* Runs the on_event plugin callbacks on an event and appends the result to
|
|
353
|
+
* the session unless it is partial.
|
|
354
|
+
*
|
|
355
|
+
* @returns The event as streamed to the caller.
|
|
356
|
+
*/
|
|
357
|
+
async processAndAppendEvent(invocationContext, event) {
|
|
358
|
+
var _a2;
|
|
359
|
+
const modifiedEvent = await this.pluginManager.runOnEventCallback({
|
|
360
|
+
invocationContext,
|
|
361
|
+
event
|
|
362
|
+
});
|
|
363
|
+
const outputEvent = modifiedEvent ? {
|
|
364
|
+
...withInternalMetadataOf(event, modifiedEvent),
|
|
365
|
+
id: event.id,
|
|
366
|
+
invocationId: event.invocationId,
|
|
367
|
+
timestamp: event.timestamp,
|
|
368
|
+
author: modifiedEvent.author || event.author,
|
|
369
|
+
branch: (_a2 = modifiedEvent.branch) != null ? _a2 : event.branch
|
|
370
|
+
} : event;
|
|
371
|
+
if (!event.partial) {
|
|
372
|
+
await this.sessionService.appendEvent({
|
|
373
|
+
session: invocationContext.session,
|
|
374
|
+
event: outputEvent
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
return outputEvent;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Seals an aborted invocation in session history: answers its dangling
|
|
381
|
+
* function calls with error responses, or records a plain abort event when
|
|
382
|
+
* there is nothing to answer.
|
|
383
|
+
*
|
|
384
|
+
* @returns The synthetic events after plugin processing and persistence.
|
|
385
|
+
*/
|
|
386
|
+
async synthesizeAbortEvents(invocationContext) {
|
|
387
|
+
const abortEvents = (0, import_abort_events.buildAbortEvents)({
|
|
388
|
+
events: invocationContext.session.events,
|
|
389
|
+
invocationId: invocationContext.invocationId,
|
|
390
|
+
rootAgentName: this.agent.name,
|
|
391
|
+
branch: invocationContext.branch
|
|
392
|
+
});
|
|
393
|
+
const outputEvents = [];
|
|
394
|
+
for (const event of abortEvents) {
|
|
395
|
+
outputEvents.push(
|
|
396
|
+
await this.processAndAppendEvent(invocationContext, event)
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
return outputEvents;
|
|
400
|
+
}
|
|
330
401
|
/**
|
|
331
402
|
* Saves artifacts from the message parts and replaces the inline data with
|
|
332
403
|
* a file name placeholder and optional file reference.
|
|
@@ -573,7 +644,8 @@ function isLiveModelMediaEventWithInlineData(event) {
|
|
|
573
644
|
}
|
|
574
645
|
__name(isLiveModelMediaEventWithInlineData, "isLiveModelMediaEventWithInlineData");
|
|
575
646
|
function determineAgentForResumption(session, rootAgent, resumabilityConfig) {
|
|
576
|
-
const
|
|
647
|
+
const lastEvent = session.events[session.events.length - 1];
|
|
648
|
+
const event = lastEvent && !(0, import_abort_events.isAbortEvent)(lastEvent) ? findEventByLastFunctionResponseId(session.events) : null;
|
|
577
649
|
const isResumable = Boolean(resumabilityConfig == null ? void 0 : resumabilityConfig.isResumable);
|
|
578
650
|
if (event && event.author && isResumable) {
|
|
579
651
|
const conflictingAuthors = (0, import_functions.getConflictingFunctionResponseAuthors)(
|
|
@@ -597,7 +669,7 @@ function determineAgentForResumption(session, rootAgent, resumabilityConfig) {
|
|
|
597
669
|
for (let i = session.events.length - 1; i >= 0; i--) {
|
|
598
670
|
import_logger.logger.debug("event:", (0, import_redact_inline_data.stringifyWithRedactedInlineData)(session.events[i]));
|
|
599
671
|
const event2 = session.events[i];
|
|
600
|
-
if (event2.author === "user" || !event2.author) {
|
|
672
|
+
if (event2.author === "user" || !event2.author || (0, import_abort_events.isAbortEvent)(event2)) {
|
|
601
673
|
continue;
|
|
602
674
|
}
|
|
603
675
|
if (event2.author === rootAgent.name) {
|
|
@@ -28,7 +28,8 @@ __export(base_session_service_exports, {
|
|
|
28
28
|
BaseSessionService: () => BaseSessionService,
|
|
29
29
|
mergeStates: () => mergeStates,
|
|
30
30
|
trimTempDeltaState: () => trimTempDeltaState,
|
|
31
|
-
trimTempState: () => trimTempState
|
|
31
|
+
trimTempState: () => trimTempState,
|
|
32
|
+
upsertSessionEvent: () => upsertSessionEvent
|
|
32
33
|
});
|
|
33
34
|
module.exports = __toCommonJS(base_session_service_exports);
|
|
34
35
|
var import_lodash_es = require("lodash-es");
|
|
@@ -72,12 +73,7 @@ const _BaseSessionService = class _BaseSessionService {
|
|
|
72
73
|
}
|
|
73
74
|
event = trimTempDeltaState(event);
|
|
74
75
|
this.updateSessionState({ session, event });
|
|
75
|
-
|
|
76
|
-
if (index >= 0) {
|
|
77
|
-
session.events[index] = event;
|
|
78
|
-
} else {
|
|
79
|
-
session.events.push(event);
|
|
80
|
-
}
|
|
76
|
+
upsertSessionEvent(session, event);
|
|
81
77
|
return event;
|
|
82
78
|
}
|
|
83
79
|
/**
|
|
@@ -107,6 +103,15 @@ const _BaseSessionService = class _BaseSessionService {
|
|
|
107
103
|
};
|
|
108
104
|
__name(_BaseSessionService, "BaseSessionService");
|
|
109
105
|
let BaseSessionService = _BaseSessionService;
|
|
106
|
+
function upsertSessionEvent(session, event) {
|
|
107
|
+
const index = session.events.findIndex((e) => e.id === event.id);
|
|
108
|
+
if (index >= 0) {
|
|
109
|
+
session.events[index] = event;
|
|
110
|
+
} else {
|
|
111
|
+
session.events.push(event);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
__name(upsertSessionEvent, "upsertSessionEvent");
|
|
110
115
|
function trimTempDeltaState(event) {
|
|
111
116
|
if (!event.actions || !event.actions.stateDelta) {
|
|
112
117
|
return event;
|
|
@@ -149,5 +154,6 @@ __name(mergeStates, "mergeStates");
|
|
|
149
154
|
BaseSessionService,
|
|
150
155
|
mergeStates,
|
|
151
156
|
trimTempDeltaState,
|
|
152
|
-
trimTempState
|
|
157
|
+
trimTempState,
|
|
158
|
+
upsertSessionEvent
|
|
153
159
|
});
|
|
@@ -36,13 +36,18 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
36
36
|
var database_session_service_exports = {};
|
|
37
37
|
__export(database_session_service_exports, {
|
|
38
38
|
DatabaseSessionService: () => DatabaseSessionService,
|
|
39
|
-
|
|
39
|
+
StaleSessionError: () => import_stale_session_error2.StaleSessionError,
|
|
40
|
+
isDatabaseConnectionString: () => isDatabaseConnectionString,
|
|
41
|
+
isStaleSessionError: () => import_stale_session_error2.isStaleSessionError
|
|
40
42
|
});
|
|
41
43
|
module.exports = __toCommonJS(database_session_service_exports);
|
|
42
44
|
var import_env_aware_utils = require("../utils/env_aware_utils.js");
|
|
45
|
+
var import_logger = require("../utils/logger.js");
|
|
43
46
|
var import_base_session_service = require("./base_session_service.js");
|
|
44
47
|
var import_session = require("./session.js");
|
|
48
|
+
var import_stale_session_error = require("./stale_session_error.js");
|
|
45
49
|
var import_state = require("./state.js");
|
|
50
|
+
var import_stale_session_error2 = require("./stale_session_error.js");
|
|
46
51
|
/**
|
|
47
52
|
* @license
|
|
48
53
|
* Copyright 2026 Google LLC
|
|
@@ -79,6 +84,11 @@ async function importMikroOrm() {
|
|
|
79
84
|
} = operations);
|
|
80
85
|
}
|
|
81
86
|
__name(importMikroOrm, "importMikroOrm");
|
|
87
|
+
function formatDateTime(dateOrEpochMs) {
|
|
88
|
+
const date = typeof dateOrEpochMs === "number" ? new Date(dateOrEpochMs) : dateOrEpochMs;
|
|
89
|
+
return date.toISOString().replace("T", " ").slice(0, 19);
|
|
90
|
+
}
|
|
91
|
+
__name(formatDateTime, "formatDateTime");
|
|
82
92
|
function isDatabaseConnectionString(uri) {
|
|
83
93
|
if (!uri) {
|
|
84
94
|
return false;
|
|
@@ -87,16 +97,20 @@ function isDatabaseConnectionString(uri) {
|
|
|
87
97
|
}
|
|
88
98
|
__name(isDatabaseConnectionString, "isDatabaseConnectionString");
|
|
89
99
|
const _DatabaseSessionService = class _DatabaseSessionService extends import_base_session_service.BaseSessionService {
|
|
90
|
-
constructor(connectionStringOrOptions) {
|
|
100
|
+
constructor(connectionStringOrOptions, options) {
|
|
101
|
+
var _a;
|
|
91
102
|
super();
|
|
92
103
|
this.initialized = false;
|
|
93
104
|
if (typeof connectionStringOrOptions === "string") {
|
|
94
105
|
this.connectionString = connectionStringOrOptions;
|
|
106
|
+
this.staleSession = (_a = options == null ? void 0 : options.staleSession) != null ? _a : "reject";
|
|
95
107
|
} else {
|
|
96
108
|
if (!connectionStringOrOptions.driver) {
|
|
97
109
|
throw new Error("Driver is required when passing options object.");
|
|
98
110
|
}
|
|
99
|
-
|
|
111
|
+
const { staleSession, ...mikroOptions } = connectionStringOrOptions;
|
|
112
|
+
this.options = mikroOptions;
|
|
113
|
+
this.staleSession = staleSession != null ? staleSession : "reject";
|
|
100
114
|
}
|
|
101
115
|
}
|
|
102
116
|
async init() {
|
|
@@ -342,6 +356,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
342
356
|
return event;
|
|
343
357
|
}
|
|
344
358
|
const trimmedEvent = (0, import_base_session_service.trimTempDeltaState)(event);
|
|
359
|
+
let sessionWasStale = false;
|
|
345
360
|
await em.transactional(async (txEm) => {
|
|
346
361
|
const storageSession = await txEm.findOne(
|
|
347
362
|
StorageSession,
|
|
@@ -355,6 +370,14 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
355
370
|
if (!storageSession) {
|
|
356
371
|
throw new Error(`Session ${session.id} not found for appendEvent`);
|
|
357
372
|
}
|
|
373
|
+
if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
|
|
374
|
+
if (this.staleSession === "reject") {
|
|
375
|
+
throw new import_stale_session_error.StaleSessionError(
|
|
376
|
+
`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.`
|
|
377
|
+
);
|
|
378
|
+
}
|
|
379
|
+
sessionWasStale = true;
|
|
380
|
+
}
|
|
358
381
|
let appStateModel = await txEm.findOne(StorageAppState, {
|
|
359
382
|
appName: session.appName
|
|
360
383
|
});
|
|
@@ -378,24 +401,6 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
378
401
|
});
|
|
379
402
|
txEm.persist(userStateModel);
|
|
380
403
|
}
|
|
381
|
-
if (storageSession.updateTime.getTime() > session.lastUpdateTime) {
|
|
382
|
-
const events = await txEm.find(
|
|
383
|
-
StorageEvent,
|
|
384
|
-
{
|
|
385
|
-
appName: session.appName,
|
|
386
|
-
userId: session.userId,
|
|
387
|
-
sessionId: session.id
|
|
388
|
-
},
|
|
389
|
-
{ orderBy: { timestamp: "ASC" } }
|
|
390
|
-
);
|
|
391
|
-
const mergedState = (0, import_base_session_service.mergeStates)(
|
|
392
|
-
appStateModel.state,
|
|
393
|
-
userStateModel.state,
|
|
394
|
-
storageSession.state
|
|
395
|
-
);
|
|
396
|
-
session.state = mergedState;
|
|
397
|
-
session.events = events.map((e) => e.eventData);
|
|
398
|
-
}
|
|
399
404
|
if (event.actions && event.actions.stateDelta) {
|
|
400
405
|
const appDelta = {};
|
|
401
406
|
const userDelta = {};
|
|
@@ -449,14 +454,29 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
449
454
|
storageSession.state
|
|
450
455
|
);
|
|
451
456
|
session.state = newMergedState;
|
|
452
|
-
|
|
453
|
-
if (index >= 0) {
|
|
454
|
-
session.events[index] = event;
|
|
455
|
-
} else {
|
|
456
|
-
session.events.push(event);
|
|
457
|
-
}
|
|
457
|
+
(0, import_base_session_service.upsertSessionEvent)(session, event);
|
|
458
458
|
session.lastUpdateTime = storageSession.updateTime.getTime();
|
|
459
459
|
});
|
|
460
|
+
if (sessionWasStale) {
|
|
461
|
+
try {
|
|
462
|
+
const storageEvents = await em.find(
|
|
463
|
+
StorageEvent,
|
|
464
|
+
{
|
|
465
|
+
appName: session.appName,
|
|
466
|
+
userId: session.userId,
|
|
467
|
+
sessionId: session.id
|
|
468
|
+
},
|
|
469
|
+
{ orderBy: { timestamp: "ASC" } }
|
|
470
|
+
);
|
|
471
|
+
session.events = storageEvents.map((se) => se.eventData);
|
|
472
|
+
(0, import_base_session_service.upsertSessionEvent)(session, event);
|
|
473
|
+
} catch (e) {
|
|
474
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
475
|
+
import_logger.logger.warn(
|
|
476
|
+
`Failed to reload events for stale session ${session.id} after appendEvent; the event was persisted but session.events may be missing concurrent appends: ${message}`
|
|
477
|
+
);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
460
480
|
return event;
|
|
461
481
|
}
|
|
462
482
|
};
|
|
@@ -465,5 +485,7 @@ let DatabaseSessionService = _DatabaseSessionService;
|
|
|
465
485
|
// Annotate the CommonJS export names for ESM import in node:
|
|
466
486
|
0 && (module.exports = {
|
|
467
487
|
DatabaseSessionService,
|
|
468
|
-
|
|
488
|
+
StaleSessionError,
|
|
489
|
+
isDatabaseConnectionString,
|
|
490
|
+
isStaleSessionError
|
|
469
491
|
});
|
|
@@ -293,7 +293,7 @@ async function getConnectionOptionsFromUri(uri) {
|
|
|
293
293
|
);
|
|
294
294
|
return {
|
|
295
295
|
entities: import_schema.ENTITIES,
|
|
296
|
-
dbName: uri === "sqlite://:memory:" ? ":memory:" : uri.substring("sqlite://".length),
|
|
296
|
+
dbName: uri === "sqlite://:memory:" || uri === "sqlite:///:memory:" ? ":memory:" : uri.substring("sqlite://".length),
|
|
297
297
|
driver: SqliteDriver
|
|
298
298
|
};
|
|
299
299
|
}
|
|
@@ -70,7 +70,9 @@ const _InMemorySessionService = class _InMemorySessionService extends import_bas
|
|
|
70
70
|
var _a;
|
|
71
71
|
const filteredState = state ? (0, import_base_session_service.trimTempState)(state) : void 0;
|
|
72
72
|
const session = (0, import_session.createSession)({
|
|
73
|
-
|
|
73
|
+
// Surrounding whitespace is dropped so that a later lookup by the bare
|
|
74
|
+
// id finds the session, and a blank id gets a generated one.
|
|
75
|
+
id: (sessionId == null ? void 0 : sessionId.trim()) || (0, import_env_aware_utils.randomUUID)(),
|
|
74
76
|
appName,
|
|
75
77
|
userId,
|
|
76
78
|
state: filteredState,
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
"use strict";
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
10
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
11
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
|
+
var __export = (target, all) => {
|
|
14
|
+
for (var name in all)
|
|
15
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
16
|
+
};
|
|
17
|
+
var __copyProps = (to, from, except, desc) => {
|
|
18
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
19
|
+
for (let key of __getOwnPropNames(from))
|
|
20
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
21
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
22
|
+
}
|
|
23
|
+
return to;
|
|
24
|
+
};
|
|
25
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
26
|
+
var stale_session_error_exports = {};
|
|
27
|
+
__export(stale_session_error_exports, {
|
|
28
|
+
StaleSessionError: () => StaleSessionError,
|
|
29
|
+
isStaleSessionError: () => isStaleSessionError
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(stale_session_error_exports);
|
|
32
|
+
/**
|
|
33
|
+
* @license
|
|
34
|
+
* Copyright 2026 Google LLC
|
|
35
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
36
|
+
*/
|
|
37
|
+
var _a, _b;
|
|
38
|
+
const STALE_SESSION_ERROR_SIGNATURE_SYMBOL = /* @__PURE__ */ Symbol.for(
|
|
39
|
+
"google.adk.staleSessionError"
|
|
40
|
+
);
|
|
41
|
+
const _StaleSessionError = class _StaleSessionError extends (_b = Error, _a = STALE_SESSION_ERROR_SIGNATURE_SYMBOL, _b) {
|
|
42
|
+
constructor(message) {
|
|
43
|
+
super(message);
|
|
44
|
+
this[_a] = true;
|
|
45
|
+
this.name = "StaleSessionError";
|
|
46
|
+
Object.setPrototypeOf(this, _StaleSessionError.prototype);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
__name(_StaleSessionError, "StaleSessionError");
|
|
50
|
+
let StaleSessionError = _StaleSessionError;
|
|
51
|
+
function isStaleSessionError(obj) {
|
|
52
|
+
return typeof obj === "object" && obj !== null && (STALE_SESSION_ERROR_SIGNATURE_SYMBOL in obj || obj instanceof Error && obj.name === "StaleSessionError");
|
|
53
|
+
}
|
|
54
|
+
__name(isStaleSessionError, "isStaleSessionError");
|
|
55
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
56
|
+
0 && (module.exports = {
|
|
57
|
+
StaleSessionError,
|
|
58
|
+
isStaleSessionError
|
|
59
|
+
});
|
|
@@ -102,16 +102,19 @@ const _State = class _State {
|
|
|
102
102
|
/**
|
|
103
103
|
* Returns the value of the state dict for the given key.
|
|
104
104
|
*
|
|
105
|
+
* Only keys the state holds itself are found. Names inherited from
|
|
106
|
+
* `Object.prototype`, such as `toString`, are treated as missing.
|
|
107
|
+
*
|
|
105
108
|
* @param key The key to get the value for.
|
|
106
109
|
* @param defaultValue The default value to return if the key is not found.
|
|
107
110
|
* @return The value of the state for the given key, or the default value if
|
|
108
111
|
* not found.
|
|
109
112
|
*/
|
|
110
113
|
get(key, defaultValue) {
|
|
111
|
-
if (
|
|
114
|
+
if (Object.hasOwn(this.delta, key)) {
|
|
112
115
|
return this.delta[key];
|
|
113
116
|
}
|
|
114
|
-
if (
|
|
117
|
+
if (Object.hasOwn(this.value, key)) {
|
|
115
118
|
return this.value[key];
|
|
116
119
|
}
|
|
117
120
|
return defaultValue;
|
|
@@ -129,10 +132,11 @@ const _State = class _State {
|
|
|
129
132
|
(0, import_state_write_order.recordStateWrite)(this.value, this.delta, key);
|
|
130
133
|
}
|
|
131
134
|
/**
|
|
132
|
-
* Whether the state
|
|
135
|
+
* Whether the state holds the given key, either as a stored value or as a
|
|
136
|
+
* pending delta. Names inherited from `Object.prototype` are not keys.
|
|
133
137
|
*/
|
|
134
138
|
has(key) {
|
|
135
|
-
return
|
|
139
|
+
return Object.hasOwn(this.value, key) || Object.hasOwn(this.delta, key);
|
|
136
140
|
}
|
|
137
141
|
/**
|
|
138
142
|
* Whether the state has pending delta.
|
|
@@ -65,17 +65,22 @@ function quoteFilterLiteral(value) {
|
|
|
65
65
|
return `"${escaped}"`;
|
|
66
66
|
}
|
|
67
67
|
__name(quoteFilterLiteral, "quoteFilterLiteral");
|
|
68
|
+
function toStateMap(state) {
|
|
69
|
+
return Object.assign(/* @__PURE__ */ Object.create(null), state);
|
|
70
|
+
}
|
|
71
|
+
__name(toStateMap, "toStateMap");
|
|
68
72
|
let VertexAiSessionService = class extends import_base_session_service.BaseSessionService {
|
|
69
73
|
constructor(options) {
|
|
70
74
|
super();
|
|
71
75
|
this.agentEngineId = options.agentEngineId;
|
|
72
|
-
this.projectId = options.projectId;
|
|
73
|
-
this.location = options.location;
|
|
74
76
|
this.expressModeApiKey = (0, import_vertex_ai_utils.getExpressModeApiKey)(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
options.projectId,
|
|
78
|
+
options.location,
|
|
77
79
|
options.expressModeApiKey
|
|
78
80
|
);
|
|
81
|
+
const useEnvironment = !options.expressModeApiKey;
|
|
82
|
+
this.projectId = options.projectId || (useEnvironment ? process.env["GOOGLE_CLOUD_PROJECT"] : void 0);
|
|
83
|
+
this.location = options.location || (useEnvironment ? process.env["GOOGLE_CLOUD_LOCATION"] : void 0);
|
|
79
84
|
if (options.sessions) {
|
|
80
85
|
this.sessions = options.sessions;
|
|
81
86
|
} else {
|
|
@@ -161,7 +166,7 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
|
|
|
161
166
|
id,
|
|
162
167
|
appName,
|
|
163
168
|
userId,
|
|
164
|
-
state: getSessionResponse.sessionState,
|
|
169
|
+
state: toStateMap(getSessionResponse.sessionState),
|
|
165
170
|
events: [],
|
|
166
171
|
lastUpdateTime: getSessionResponse.updateTime ? Date.parse(getSessionResponse.updateTime) : Date.now()
|
|
167
172
|
});
|
|
@@ -176,13 +181,14 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
|
|
|
176
181
|
const sessionResourceName = `reasoningEngines/${reasoningEngineId}/sessions/${sessionId}`;
|
|
177
182
|
try {
|
|
178
183
|
let getSessionResponse;
|
|
179
|
-
|
|
184
|
+
const eventsIterator = [];
|
|
185
|
+
const listConfig = {};
|
|
186
|
+
let pageToken;
|
|
180
187
|
if (config && config.numRecentEvents === 0) {
|
|
181
188
|
getSessionResponse = await this.sessions.get({
|
|
182
189
|
name: sessionResourceName
|
|
183
190
|
});
|
|
184
191
|
} else {
|
|
185
|
-
const listConfig = {};
|
|
186
192
|
if (config && config.afterTimestamp) {
|
|
187
193
|
listConfig.filter = `timestamp>="${new Date(
|
|
188
194
|
config.afterTimestamp
|
|
@@ -196,7 +202,9 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
|
|
|
196
202
|
})
|
|
197
203
|
]);
|
|
198
204
|
getSessionResponse = sessionRes;
|
|
199
|
-
|
|
205
|
+
const firstPage = eventsRes;
|
|
206
|
+
eventsIterator.push(...firstPage.sessionEvents || []);
|
|
207
|
+
pageToken = firstPage.nextPageToken;
|
|
200
208
|
}
|
|
201
209
|
const sessionObj = getSessionResponse;
|
|
202
210
|
if (sessionObj.userId !== userId) {
|
|
@@ -204,20 +212,29 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
|
|
|
204
212
|
`Session ${sessionId} does not belong to user ${userId}.`
|
|
205
213
|
);
|
|
206
214
|
}
|
|
215
|
+
while (pageToken) {
|
|
216
|
+
const eventsRes = await this.sessions.events.listInternal({
|
|
217
|
+
name: sessionResourceName,
|
|
218
|
+
config: {
|
|
219
|
+
...listConfig,
|
|
220
|
+
pageToken
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
eventsIterator.push(...eventsRes.sessionEvents || []);
|
|
224
|
+
pageToken = eventsRes.nextPageToken;
|
|
225
|
+
}
|
|
207
226
|
const session = (0, import_session.createSession)({
|
|
208
227
|
id: sessionId,
|
|
209
228
|
appName,
|
|
210
229
|
userId,
|
|
211
|
-
state: sessionObj.sessionState,
|
|
230
|
+
state: toStateMap(sessionObj.sessionState),
|
|
212
231
|
events: [],
|
|
213
232
|
lastUpdateTime: sessionObj.updateTime ? Date.parse(sessionObj.updateTime) : Date.now()
|
|
214
233
|
});
|
|
215
|
-
|
|
234
|
+
const recentEvents = config && config.numRecentEvents ? eventsIterator.slice(-config.numRecentEvents) : eventsIterator;
|
|
235
|
+
for (const event of recentEvents) {
|
|
216
236
|
session.events.push(_fromApiEvent(event));
|
|
217
237
|
}
|
|
218
|
-
if (config && config.numRecentEvents) {
|
|
219
|
-
session.events = session.events.slice(-config.numRecentEvents);
|
|
220
|
-
}
|
|
221
238
|
return session;
|
|
222
239
|
} catch (error) {
|
|
223
240
|
const err = error;
|
|
@@ -256,7 +273,7 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
|
|
|
256
273
|
id,
|
|
257
274
|
appName,
|
|
258
275
|
userId: sessionObj.userId,
|
|
259
|
-
state: sessionObj.sessionState,
|
|
276
|
+
state: toStateMap(sessionObj.sessionState),
|
|
260
277
|
events: [],
|
|
261
278
|
lastUpdateTime: sessionObj.updateTime ? new Date(sessionObj.updateTime).getTime() : Date.now()
|
|
262
279
|
})
|
|
@@ -502,7 +519,9 @@ function _fromApiEvent(apiEventObj) {
|
|
|
502
519
|
}
|
|
503
520
|
}
|
|
504
521
|
const eventActions = {
|
|
505
|
-
stateDelta:
|
|
522
|
+
stateDelta: toStateMap(
|
|
523
|
+
actions["stateDelta"]
|
|
524
|
+
),
|
|
506
525
|
artifactDelta: actions["artifactDelta"] || {},
|
|
507
526
|
requestedAuthConfigs: actions.requestedAuthConfigs || {},
|
|
508
527
|
requestedToolConfirmations: actions["requestedToolConfirmations"] || {},
|