@google/adk 2.4.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 +282 -55
- package/dist/cjs/agents/base_agent.js +111 -68
- package/dist/cjs/agents/functions.js +62 -85
- package/dist/cjs/agents/instructions.js +7 -6
- package/dist/cjs/agents/invocation_context.js +2 -2
- package/dist/cjs/agents/llm_agent.js +105 -95
- package/dist/cjs/agents/processors/content_processor_utils.js +42 -15
- package/dist/cjs/agents/processors/content_request_processor.js +28 -11
- 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 +2 -1
- 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 +128 -9
- package/dist/cjs/cli/utils/path_validation.js +83 -0
- package/dist/cjs/code_executors/container_code_executor.js +158 -36
- package/dist/cjs/common.js +50 -12
- package/dist/cjs/context/compaction_utils.js +19 -0
- package/dist/cjs/events/event.js +7 -3
- package/dist/cjs/features/feature_registry.js +5 -0
- package/dist/cjs/index.js +29 -14
- 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 +45 -21
- 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 +1 -4
- package/dist/cjs/sessions/database_session_service.js +191 -19
- 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/vertex_ai_session_service.js +11 -3
- package/dist/cjs/skills/loader.js +29 -28
- 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 -5
- package/dist/cjs/tools/agent_tool.js +9 -1
- package/dist/cjs/tools/application_integration_tool/application_integration_toolset.js +22 -34
- package/dist/cjs/tools/application_integration_tool/clients/connections_client.js +60 -20
- package/dist/cjs/tools/application_integration_tool/clients/integration_client.js +26 -10
- package/dist/cjs/tools/application_integration_tool/integration_connector_tool.js +14 -23
- 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_toolset.js +3 -2
- package/dist/cjs/tools/google_api_tool/googleapi_to_openapi_converter.js +3 -1
- package/dist/cjs/tools/load_artifacts_tool.js +15 -5
- package/dist/cjs/tools/load_memory_tool.js +2 -5
- 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 +18 -6
- package/dist/cjs/tools/openapi_tool/auth/auth_helpers.js +30 -29
- package/dist/cjs/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
- package/dist/cjs/tools/openapi_tool/rest_api_tool.js +45 -14
- 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 +47 -28
- package/dist/cjs/utils/async_queue.js +37 -3
- package/dist/cjs/utils/client_labels.js +9 -11
- 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 +10 -9
- package/dist/cjs/utils/gemini_schema_util.js +125 -12
- package/dist/cjs/utils/id_provider.js +63 -0
- package/dist/cjs/utils/model_name.js +15 -0
- package/dist/cjs/utils/simple_zod_to_json.js +13 -31
- package/dist/cjs/utils/ssrf_guard.js +46 -16
- 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 +293 -55
- package/dist/esm/agents/base_agent.js +111 -72
- package/dist/esm/agents/functions.js +67 -89
- package/dist/esm/agents/instructions.js +7 -6
- package/dist/esm/agents/invocation_context.js +2 -2
- package/dist/esm/agents/llm_agent.js +111 -100
- package/dist/esm/agents/processors/content_processor_utils.js +42 -15
- package/dist/esm/agents/processors/content_request_processor.js +28 -11
- 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 +2 -1
- 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 +128 -9
- package/dist/esm/cli/utils/path_validation.js +45 -0
- package/dist/esm/code_executors/container_code_executor.js +158 -36
- package/dist/esm/common.js +49 -6
- package/dist/esm/context/compaction_utils.js +19 -0
- package/dist/esm/events/event.js +7 -3
- package/dist/esm/features/feature_registry.js +5 -0
- package/dist/esm/index.js +27 -15
- 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 +45 -21
- 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 +1 -4
- package/dist/esm/sessions/database_session_service.js +191 -19
- 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/vertex_ai_session_service.js +11 -3
- package/dist/esm/skills/loader.js +29 -28
- 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/application_integration_tool/application_integration_toolset.js +23 -35
- package/dist/esm/tools/application_integration_tool/clients/connections_client.js +64 -21
- package/dist/esm/tools/application_integration_tool/clients/integration_client.js +26 -10
- package/dist/esm/tools/application_integration_tool/integration_connector_tool.js +14 -23
- 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_toolset.js +3 -2
- package/dist/esm/tools/google_api_tool/googleapi_to_openapi_converter.js +3 -1
- package/dist/esm/tools/load_artifacts_tool.js +15 -5
- package/dist/esm/tools/load_memory_tool.js +2 -5
- 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 +18 -6
- package/dist/esm/tools/openapi_tool/auth/auth_helpers.js +27 -26
- package/dist/esm/tools/openapi_tool/auth/credential_exchangers/oauth2_exchanger.js +2 -2
- package/dist/esm/tools/openapi_tool/rest_api_tool.js +45 -14
- 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 +47 -28
- package/dist/esm/utils/async_queue.js +37 -3
- package/dist/esm/utils/client_labels.js +9 -11
- 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 +10 -9
- package/dist/esm/utils/gemini_schema_util.js +124 -11
- package/dist/esm/utils/id_provider.js +33 -0
- package/dist/esm/utils/model_name.js +14 -0
- package/dist/esm/utils/simple_zod_to_json.js +13 -31
- package/dist/esm/utils/ssrf_guard.js +55 -15
- 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 +121 -3
- package/dist/types/agents/base_agent.d.ts +2 -0
- package/dist/types/agents/processors/content_processor_utils.d.ts +9 -9
- 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 +19 -2
- package/dist/types/cli/utils/path_validation.d.ts +30 -0
- package/dist/types/code_executors/container_code_executor.d.ts +49 -8
- package/dist/types/common.d.ts +16 -9
- package/dist/types/context/compaction_utils.d.ts +13 -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 +9 -6
- package/dist/types/plugins/base_plugin.d.ts +50 -21
- 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 +0 -2
- package/dist/types/sessions/db/operations.d.ts +2 -1
- package/dist/types/sessions/db/schema.d.ts +5 -3
- 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/application_integration_tool/clients/connections_client.d.ts +13 -4
- package/dist/types/tools/base_toolset.d.ts +1 -1
- 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_toolset.d.ts +2 -0
- package/dist/types/tools/load_artifacts_tool.d.ts +5 -1
- package/dist/types/tools/load_memory_tool.d.ts +13 -7
- 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/operation_parser.d.ts +7 -3
- package/dist/types/tools/toolbox_toolset.d.ts +15 -20
- package/dist/types/utils/async_queue.d.ts +14 -0
- 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 +27 -6
- package/dist/types/utils/id_provider.d.ts +43 -0
- package/dist/types/utils/model_name.d.ts +8 -0
- 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 +86 -88
- package/dist/web/index_web.js.map +4 -4
- package/package.json +13 -15
- package/dist/cjs/telemetry/google_cloud.js +0 -116
- package/dist/cjs/telemetry/tracing.js +0 -393
- package/dist/esm/telemetry/google_cloud.js +0 -99
- package/dist/esm/telemetry/setup.js +0 -88
- package/dist/esm/telemetry/tracing.js +0 -361
- package/dist/types/telemetry/google_cloud.d.ts +0 -9
- package/dist/types/telemetry/tracing.d.ts +0 -143
|
@@ -41,7 +41,7 @@ __export(database_session_service_exports, {
|
|
|
41
41
|
isStaleSessionError: () => import_stale_session_error2.isStaleSessionError
|
|
42
42
|
});
|
|
43
43
|
module.exports = __toCommonJS(database_session_service_exports);
|
|
44
|
-
var
|
|
44
|
+
var import_id_provider = require("../utils/id_provider.js");
|
|
45
45
|
var import_logger = require("../utils/logger.js");
|
|
46
46
|
var import_base_session_service = require("./base_session_service.js");
|
|
47
47
|
var import_session = require("./session.js");
|
|
@@ -84,9 +84,82 @@ async function importMikroOrm() {
|
|
|
84
84
|
} = operations);
|
|
85
85
|
}
|
|
86
86
|
__name(importMikroOrm, "importMikroOrm");
|
|
87
|
+
const STORAGE_UPDATE_MARKER_SYMBOL = /* @__PURE__ */ Symbol.for(
|
|
88
|
+
"google.adk.session.storageUpdateMarker"
|
|
89
|
+
);
|
|
90
|
+
function setStorageRevisionMarker(session, revision) {
|
|
91
|
+
Object.defineProperty(session, STORAGE_UPDATE_MARKER_SYMBOL, {
|
|
92
|
+
value: revision,
|
|
93
|
+
writable: true,
|
|
94
|
+
configurable: true,
|
|
95
|
+
enumerable: false
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
__name(setStorageRevisionMarker, "setStorageRevisionMarker");
|
|
99
|
+
function getStorageRevisionMarker(session) {
|
|
100
|
+
return session[STORAGE_UPDATE_MARKER_SYMBOL];
|
|
101
|
+
}
|
|
102
|
+
__name(getStorageRevisionMarker, "getStorageRevisionMarker");
|
|
103
|
+
const MAX_IN_QUERY_IDS = 500;
|
|
104
|
+
async function sessionMatchesStorageRevision(txEm, session, eventsComplete, totalEventCount) {
|
|
105
|
+
const sessionWhere = {
|
|
106
|
+
appName: session.appName,
|
|
107
|
+
userId: session.userId,
|
|
108
|
+
sessionId: session.id
|
|
109
|
+
};
|
|
110
|
+
const latestStorageEvent = await txEm.findOne(StorageEvent, sessionWhere, {
|
|
111
|
+
orderBy: { timestamp: "DESC", id: "DESC" }
|
|
112
|
+
});
|
|
113
|
+
if (session.events.length === 0) {
|
|
114
|
+
if (latestStorageEvent !== null) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
if (totalEventCount !== void 0 && totalEventCount !== 0) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
if ((latestStorageEvent == null ? void 0 : latestStorageEvent.id) !== session.events[session.events.length - 1].id) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
if (totalEventCount !== void 0) {
|
|
126
|
+
const totalStored = await txEm.count(StorageEvent, sessionWhere);
|
|
127
|
+
if (totalStored !== totalEventCount) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const knownIds = session.events.map((e) => e.id);
|
|
132
|
+
if (knownIds.length <= MAX_IN_QUERY_IDS) {
|
|
133
|
+
const unknownEventWhere = {
|
|
134
|
+
...sessionWhere,
|
|
135
|
+
id: { $nin: knownIds }
|
|
136
|
+
};
|
|
137
|
+
if (!eventsComplete) {
|
|
138
|
+
unknownEventWhere.timestamp = {
|
|
139
|
+
$gte: new Date(session.events[0].timestamp)
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return await txEm.count(StorageEvent, unknownEventWhere) === 0;
|
|
143
|
+
}
|
|
144
|
+
const filter = { ...sessionWhere };
|
|
145
|
+
if (!eventsComplete) {
|
|
146
|
+
filter.timestamp = { $gte: new Date(session.events[0].timestamp) };
|
|
147
|
+
}
|
|
148
|
+
const storedEvents = await txEm.find(StorageEvent, filter, {
|
|
149
|
+
fields: ["id"]
|
|
150
|
+
});
|
|
151
|
+
const knownSet = new Set(knownIds);
|
|
152
|
+
for (const stored of storedEvents) {
|
|
153
|
+
if (!knownSet.has(stored.id)) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
__name(sessionMatchesStorageRevision, "sessionMatchesStorageRevision");
|
|
87
160
|
function formatDateTime(dateOrEpochMs) {
|
|
88
161
|
const date = typeof dateOrEpochMs === "number" ? new Date(dateOrEpochMs) : dateOrEpochMs;
|
|
89
|
-
return date.toISOString().replace("T", " ").
|
|
162
|
+
return date.toISOString().replace("T", " ").replace("Z", "");
|
|
90
163
|
}
|
|
91
164
|
__name(formatDateTime, "formatDateTime");
|
|
92
165
|
function isDatabaseConnectionString(uri) {
|
|
@@ -103,14 +176,25 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
103
176
|
this.initialized = false;
|
|
104
177
|
if (typeof connectionStringOrOptions === "string") {
|
|
105
178
|
this.connectionString = connectionStringOrOptions;
|
|
106
|
-
|
|
179
|
+
if (options) {
|
|
180
|
+
const { staleSession, ...mikroOptions } = options;
|
|
181
|
+
this.options = mikroOptions;
|
|
182
|
+
this.staleSession = staleSession != null ? staleSession : "reject";
|
|
183
|
+
} else {
|
|
184
|
+
this.staleSession = "reject";
|
|
185
|
+
}
|
|
107
186
|
} else {
|
|
108
|
-
|
|
187
|
+
const { staleSession: firstStaleSession, ...firstMikroOptions } = connectionStringOrOptions;
|
|
188
|
+
const { staleSession: secondStaleSession, ...secondMikroOptions } = options != null ? options : {};
|
|
189
|
+
const mergedMikroOptions = {
|
|
190
|
+
...firstMikroOptions,
|
|
191
|
+
...secondMikroOptions
|
|
192
|
+
};
|
|
193
|
+
if (!mergedMikroOptions.driver) {
|
|
109
194
|
throw new Error("Driver is required when passing options object.");
|
|
110
195
|
}
|
|
111
|
-
|
|
112
|
-
this.
|
|
113
|
-
this.staleSession = staleSession != null ? staleSession : "reject";
|
|
196
|
+
this.options = mergedMikroOptions;
|
|
197
|
+
this.staleSession = (_a = secondStaleSession != null ? secondStaleSession : firstStaleSession) != null ? _a : "reject";
|
|
114
198
|
}
|
|
115
199
|
}
|
|
116
200
|
async init() {
|
|
@@ -118,7 +202,11 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
118
202
|
return;
|
|
119
203
|
}
|
|
120
204
|
await loadMikroOrm();
|
|
121
|
-
const options = this.connectionString ?
|
|
205
|
+
const options = this.connectionString ? {
|
|
206
|
+
...await getConnectionOptionsFromUri(this.connectionString),
|
|
207
|
+
...this.options,
|
|
208
|
+
entities: ENTITIES
|
|
209
|
+
} : { ...this.options, entities: ENTITIES };
|
|
122
210
|
this.options = options;
|
|
123
211
|
this.orm = await MikroORM.init(options);
|
|
124
212
|
await ensureDatabaseCreated(this.orm);
|
|
@@ -133,7 +221,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
133
221
|
}) {
|
|
134
222
|
await this.init();
|
|
135
223
|
const em = this.orm.em.fork();
|
|
136
|
-
const id = sessionId || (0,
|
|
224
|
+
const id = sessionId || (0, import_id_provider.newId)();
|
|
137
225
|
const now = /* @__PURE__ */ new Date();
|
|
138
226
|
const existing = await em.findOne(StorageSession, {
|
|
139
227
|
id,
|
|
@@ -196,14 +284,22 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
196
284
|
userStateModel.state,
|
|
197
285
|
sessionState
|
|
198
286
|
);
|
|
199
|
-
|
|
287
|
+
const session = (0, import_session.createSession)({
|
|
200
288
|
id,
|
|
201
289
|
appName,
|
|
202
290
|
userId,
|
|
203
291
|
state: mergedState,
|
|
204
292
|
events: [],
|
|
205
|
-
lastUpdateTime: storageSession.
|
|
293
|
+
lastUpdateTime: storageSession.updateTime.getTime()
|
|
294
|
+
});
|
|
295
|
+
setStorageRevisionMarker(session, {
|
|
296
|
+
marker: storageSession.updateTime.toISOString(),
|
|
297
|
+
recordedLastUpdateTime: session.lastUpdateTime,
|
|
298
|
+
unverifiedWrite: true,
|
|
299
|
+
eventsComplete: true,
|
|
300
|
+
totalEventCount: 0
|
|
206
301
|
});
|
|
302
|
+
return session;
|
|
207
303
|
}
|
|
208
304
|
async getSession({
|
|
209
305
|
appName,
|
|
@@ -244,7 +340,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
244
340
|
(userStateModel == null ? void 0 : userStateModel.state) || {},
|
|
245
341
|
storageSession.state
|
|
246
342
|
);
|
|
247
|
-
|
|
343
|
+
const session = (0, import_session.createSession)({
|
|
248
344
|
id: sessionId,
|
|
249
345
|
appName,
|
|
250
346
|
userId,
|
|
@@ -252,6 +348,16 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
252
348
|
events: storageEvents.map((se) => se.eventData),
|
|
253
349
|
lastUpdateTime: storageSession.updateTime.getTime()
|
|
254
350
|
});
|
|
351
|
+
const eventsComplete = (config == null ? void 0 : config.numRecentEvents) === void 0 && (config == null ? void 0 : config.afterTimestamp) === void 0;
|
|
352
|
+
const totalEventCount = eventsComplete ? session.events.length : await em.count(StorageEvent, { appName, userId, sessionId });
|
|
353
|
+
setStorageRevisionMarker(session, {
|
|
354
|
+
marker: storageSession.updateTime.toISOString(),
|
|
355
|
+
recordedLastUpdateTime: session.lastUpdateTime,
|
|
356
|
+
unverifiedWrite: false,
|
|
357
|
+
eventsComplete,
|
|
358
|
+
totalEventCount
|
|
359
|
+
});
|
|
360
|
+
return session;
|
|
255
361
|
}
|
|
256
362
|
async listSessions({
|
|
257
363
|
appName,
|
|
@@ -264,7 +370,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
264
370
|
await this.init();
|
|
265
371
|
const em = this.orm.em.fork();
|
|
266
372
|
const where = { appName };
|
|
267
|
-
if (userId) {
|
|
373
|
+
if (userId !== void 0) {
|
|
268
374
|
where.userId = userId;
|
|
269
375
|
}
|
|
270
376
|
const orderBy = order === "asc" ? { updateTime: "ASC", id: "ASC" } : order === "desc" ? { updateTime: "DESC", id: "ASC" } : void 0;
|
|
@@ -313,7 +419,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
313
419
|
const appStateModel = await em.findOne(StorageAppState, { appName });
|
|
314
420
|
const appState = (appStateModel == null ? void 0 : appStateModel.state) || {};
|
|
315
421
|
const userStateMap = {};
|
|
316
|
-
if (userId) {
|
|
422
|
+
if (userId !== void 0) {
|
|
317
423
|
const u = await em.findOne(StorageUserState, { appName, userId });
|
|
318
424
|
if (u) userStateMap[userId] = u.state;
|
|
319
425
|
} else {
|
|
@@ -325,7 +431,7 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
325
431
|
const sessions = storageSessions.map((ss) => {
|
|
326
432
|
const uState = userStateMap[ss.userId] || {};
|
|
327
433
|
const merged = (0, import_base_session_service.mergeStates)(appState, uState, ss.state);
|
|
328
|
-
|
|
434
|
+
const session = (0, import_session.createSession)({
|
|
329
435
|
id: ss.id,
|
|
330
436
|
appName: ss.appName,
|
|
331
437
|
userId: ss.userId,
|
|
@@ -333,6 +439,13 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
333
439
|
events: [],
|
|
334
440
|
lastUpdateTime: ss.updateTime.getTime()
|
|
335
441
|
});
|
|
442
|
+
setStorageRevisionMarker(session, {
|
|
443
|
+
marker: ss.updateTime.toISOString(),
|
|
444
|
+
recordedLastUpdateTime: session.lastUpdateTime,
|
|
445
|
+
unverifiedWrite: false,
|
|
446
|
+
eventsComplete: false
|
|
447
|
+
});
|
|
448
|
+
return session;
|
|
336
449
|
});
|
|
337
450
|
return { sessions, ...paginationMeta };
|
|
338
451
|
}
|
|
@@ -350,11 +463,13 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
350
463
|
session,
|
|
351
464
|
event
|
|
352
465
|
}) {
|
|
466
|
+
var _a, _b;
|
|
353
467
|
await this.init();
|
|
354
468
|
const em = this.orm.em.fork();
|
|
355
469
|
if (event.partial) {
|
|
356
470
|
return event;
|
|
357
471
|
}
|
|
472
|
+
const stateDelta = (_b = (_a = event.actions) == null ? void 0 : _a.stateDelta) != null ? _b : {};
|
|
358
473
|
const trimmedEvent = (0, import_base_session_service.trimTempDeltaState)(event);
|
|
359
474
|
let sessionWasStale = false;
|
|
360
475
|
await em.transactional(async (txEm) => {
|
|
@@ -370,11 +485,37 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
370
485
|
if (!storageSession) {
|
|
371
486
|
throw new Error(`Session ${session.id} not found for appendEvent`);
|
|
372
487
|
}
|
|
373
|
-
|
|
488
|
+
const storageUpdateTime = storageSession.updateTime.getTime();
|
|
489
|
+
const storageUpdateMarker = storageSession.updateTime.toISOString();
|
|
490
|
+
const rev = getStorageRevisionMarker(session);
|
|
491
|
+
const callerMutatedLastUpdateTime = rev !== void 0 && rev.recordedLastUpdateTime !== session.lastUpdateTime;
|
|
492
|
+
let isStale = false;
|
|
493
|
+
if (rev !== void 0 && !callerMutatedLastUpdateTime) {
|
|
494
|
+
if (rev.marker === storageUpdateMarker) {
|
|
495
|
+
session.lastUpdateTime = storageUpdateTime;
|
|
496
|
+
} else if (rev.unverifiedWrite && storageUpdateTime % 1e3 === 0 && Math.abs(storageUpdateTime - rev.recordedLastUpdateTime) < 1e3 && await sessionMatchesStorageRevision(
|
|
497
|
+
txEm,
|
|
498
|
+
session,
|
|
499
|
+
rev.eventsComplete,
|
|
500
|
+
rev.totalEventCount
|
|
501
|
+
)) {
|
|
502
|
+
session.lastUpdateTime = storageUpdateTime;
|
|
503
|
+
} else {
|
|
504
|
+
isStale = true;
|
|
505
|
+
}
|
|
506
|
+
} else if (rev !== void 0) {
|
|
507
|
+
isStale = storageUpdateTime > session.lastUpdateTime;
|
|
508
|
+
} else if (storageUpdateTime > session.lastUpdateTime) {
|
|
509
|
+
if (await sessionMatchesStorageRevision(txEm, session, false)) {
|
|
510
|
+
session.lastUpdateTime = storageUpdateTime;
|
|
511
|
+
} else {
|
|
512
|
+
isStale = true;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
if (isStale) {
|
|
374
516
|
if (this.staleSession === "reject") {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
);
|
|
517
|
+
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.`;
|
|
518
|
+
throw new import_stale_session_error.StaleSessionError(message);
|
|
378
519
|
}
|
|
379
520
|
sessionWasStale = true;
|
|
380
521
|
}
|
|
@@ -453,9 +594,32 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
453
594
|
userStateModel.state,
|
|
454
595
|
storageSession.state
|
|
455
596
|
);
|
|
597
|
+
for (const source of [session.state, stateDelta]) {
|
|
598
|
+
for (const [key, value] of Object.entries(source)) {
|
|
599
|
+
if (key.startsWith(import_state.State.TEMP_PREFIX)) {
|
|
600
|
+
newMergedState[key] = value;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
}
|
|
456
604
|
session.state = newMergedState;
|
|
605
|
+
const isNewEvent = !existingStorageEvent;
|
|
457
606
|
(0, import_base_session_service.upsertSessionEvent)(session, event);
|
|
458
607
|
session.lastUpdateTime = storageSession.updateTime.getTime();
|
|
608
|
+
let nextTotalEventCount;
|
|
609
|
+
if (!callerMutatedLastUpdateTime && !isStale) {
|
|
610
|
+
if ((rev == null ? void 0 : rev.totalEventCount) !== void 0) {
|
|
611
|
+
nextTotalEventCount = rev.totalEventCount + (isNewEvent ? 1 : 0);
|
|
612
|
+
} else if ((rev == null ? void 0 : rev.eventsComplete) === true) {
|
|
613
|
+
nextTotalEventCount = session.events.length;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
setStorageRevisionMarker(session, {
|
|
617
|
+
marker: storageSession.updateTime.toISOString(),
|
|
618
|
+
recordedLastUpdateTime: session.lastUpdateTime,
|
|
619
|
+
unverifiedWrite: true,
|
|
620
|
+
eventsComplete: !callerMutatedLastUpdateTime && (rev == null ? void 0 : rev.eventsComplete) === true && !isStale,
|
|
621
|
+
totalEventCount: nextTotalEventCount
|
|
622
|
+
});
|
|
459
623
|
});
|
|
460
624
|
if (sessionWasStale) {
|
|
461
625
|
try {
|
|
@@ -470,6 +634,14 @@ const _DatabaseSessionService = class _DatabaseSessionService extends import_bas
|
|
|
470
634
|
);
|
|
471
635
|
session.events = storageEvents.map((se) => se.eventData);
|
|
472
636
|
(0, import_base_session_service.upsertSessionEvent)(session, event);
|
|
637
|
+
const lastRev = getStorageRevisionMarker(session);
|
|
638
|
+
if (lastRev) {
|
|
639
|
+
setStorageRevisionMarker(session, {
|
|
640
|
+
...lastRev,
|
|
641
|
+
eventsComplete: true,
|
|
642
|
+
totalEventCount: session.events.length
|
|
643
|
+
});
|
|
644
|
+
}
|
|
473
645
|
} catch (e) {
|
|
474
646
|
const message = e instanceof Error ? e.message : String(e);
|
|
475
647
|
import_logger.logger.warn(
|
|
@@ -312,8 +312,77 @@ async function getConnectionOptionsFromUri(uri) {
|
|
|
312
312
|
}
|
|
313
313
|
__name(getConnectionOptionsFromUri, "getConnectionOptionsFromUri");
|
|
314
314
|
async function ensureDatabaseCreated(orm) {
|
|
315
|
+
var _a;
|
|
315
316
|
await orm.schema.ensureDatabase();
|
|
316
|
-
|
|
317
|
+
const entityMetadata = [...orm.getMetadata().getAll().values()].filter(
|
|
318
|
+
(meta) => !meta.embeddable && !meta.virtual && !meta.view
|
|
319
|
+
);
|
|
320
|
+
if (entityMetadata.length === 0) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
const platform = orm.driver.getPlatform();
|
|
324
|
+
const schemaHelper = platform.getSchemaHelper();
|
|
325
|
+
if (typeof (schemaHelper == null ? void 0 : schemaHelper.getAllTables) !== "function") {
|
|
326
|
+
await orm.schema.create();
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
329
|
+
const connection = orm.driver.getConnection();
|
|
330
|
+
const defaultSchema = platform.getDefaultSchemaName();
|
|
331
|
+
const configSchema = orm.config.get("schema");
|
|
332
|
+
const dbName = orm.config.get("dbName");
|
|
333
|
+
const isCurrentSchema = /* @__PURE__ */ __name((schemaName) => !schemaName || schemaName === defaultSchema || defaultSchema === void 0 && schemaName === dbName, "isCurrentSchema");
|
|
334
|
+
const tableKey = /* @__PURE__ */ __name((tableName, schemaName) => {
|
|
335
|
+
const schemaPart = !schemaName || isCurrentSchema(schemaName) ? "" : schemaName;
|
|
336
|
+
return `${schemaPart}.${tableName}`.toLowerCase();
|
|
337
|
+
}, "tableKey");
|
|
338
|
+
const listedTables = await schemaHelper.getAllTables(connection);
|
|
339
|
+
const listedTableKeys = new Set(
|
|
340
|
+
listedTables.map((table) => tableKey(table.table_name, table.schema_name))
|
|
341
|
+
);
|
|
342
|
+
const seenTableKeys = /* @__PURE__ */ new Set();
|
|
343
|
+
const existingTableNames = [];
|
|
344
|
+
let missingCount = 0;
|
|
345
|
+
for (const meta of entityMetadata) {
|
|
346
|
+
const schemaName = (_a = meta.schema) != null ? _a : configSchema;
|
|
347
|
+
const key = tableKey(meta.tableName, schemaName);
|
|
348
|
+
if (seenTableKeys.has(key)) {
|
|
349
|
+
continue;
|
|
350
|
+
}
|
|
351
|
+
seenTableKeys.add(key);
|
|
352
|
+
let exists = listedTableKeys.has(key);
|
|
353
|
+
if (!exists && defaultSchema === void 0 && !isCurrentSchema(schemaName) && typeof schemaHelper.tableExists === "function") {
|
|
354
|
+
exists = await schemaHelper.tableExists(
|
|
355
|
+
connection,
|
|
356
|
+
meta.tableName,
|
|
357
|
+
schemaName
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
if (exists) {
|
|
361
|
+
existingTableNames.push(
|
|
362
|
+
schemaName && schemaName !== defaultSchema ? `${schemaName}.${meta.tableName}` : meta.tableName
|
|
363
|
+
);
|
|
364
|
+
} else {
|
|
365
|
+
missingCount++;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
if (missingCount === 0) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
if (existingTableNames.length === 0) {
|
|
372
|
+
await orm.schema.create();
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
const schemaGenConfig = orm.config.get("schemaGenerator");
|
|
376
|
+
const previousSkipTables = schemaGenConfig.skipTables;
|
|
377
|
+
schemaGenConfig.skipTables = [
|
|
378
|
+
...previousSkipTables != null ? previousSkipTables : [],
|
|
379
|
+
...existingTableNames
|
|
380
|
+
];
|
|
381
|
+
try {
|
|
382
|
+
await orm.schema.create();
|
|
383
|
+
} finally {
|
|
384
|
+
schemaGenConfig.skipTables = previousSkipTables;
|
|
385
|
+
}
|
|
317
386
|
}
|
|
318
387
|
__name(ensureDatabaseCreated, "ensureDatabaseCreated");
|
|
319
388
|
async function validateDatabaseSchemaVersion(orm) {
|
|
@@ -98,6 +98,7 @@ const storageAppStateSchema = new import_core.EntitySchema({
|
|
|
98
98
|
state: { type: "json" },
|
|
99
99
|
updateTime: {
|
|
100
100
|
type: "datetime",
|
|
101
|
+
length: EVENT_TIMESTAMP_PRECISION,
|
|
101
102
|
fieldName: "update_time",
|
|
102
103
|
onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate"),
|
|
103
104
|
onUpdate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onUpdate")
|
|
@@ -121,6 +122,7 @@ const storageUserStateSchema = new import_core.EntitySchema({
|
|
|
121
122
|
state: { type: "json" },
|
|
122
123
|
updateTime: {
|
|
123
124
|
type: "datetime",
|
|
125
|
+
length: EVENT_TIMESTAMP_PRECISION,
|
|
124
126
|
fieldName: "update_time",
|
|
125
127
|
onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate"),
|
|
126
128
|
onUpdate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onUpdate")
|
|
@@ -146,11 +148,13 @@ const storageSessionSchema = new import_core.EntitySchema({
|
|
|
146
148
|
state: { type: "json" },
|
|
147
149
|
createTime: {
|
|
148
150
|
type: "datetime",
|
|
151
|
+
length: EVENT_TIMESTAMP_PRECISION,
|
|
149
152
|
fieldName: "create_time",
|
|
150
153
|
onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate")
|
|
151
154
|
},
|
|
152
155
|
updateTime: {
|
|
153
156
|
type: "datetime",
|
|
157
|
+
length: EVENT_TIMESTAMP_PRECISION,
|
|
154
158
|
fieldName: "update_time",
|
|
155
159
|
onCreate: /* @__PURE__ */ __name(() => /* @__PURE__ */ new Date(), "onCreate")
|
|
156
160
|
}
|
|
@@ -30,7 +30,7 @@ __export(in_memory_session_service_exports, {
|
|
|
30
30
|
});
|
|
31
31
|
module.exports = __toCommonJS(in_memory_session_service_exports);
|
|
32
32
|
var import_lodash_es = require("lodash-es");
|
|
33
|
-
var
|
|
33
|
+
var import_id_provider = require("../utils/id_provider.js");
|
|
34
34
|
var import_logger = require("../utils/logger.js");
|
|
35
35
|
var import_base_session_service = require("./base_session_service.js");
|
|
36
36
|
var import_session = require("./session.js");
|
|
@@ -72,7 +72,7 @@ const _InMemorySessionService = class _InMemorySessionService extends import_bas
|
|
|
72
72
|
const session = (0, import_session.createSession)({
|
|
73
73
|
// Surrounding whitespace is dropped so that a later lookup by the bare
|
|
74
74
|
// id finds the session, and a blank id gets a generated one.
|
|
75
|
-
id: (sessionId == null ? void 0 : sessionId.trim()) || (0,
|
|
75
|
+
id: (sessionId == null ? void 0 : sessionId.trim()) || (0, import_id_provider.newId)(),
|
|
76
76
|
appName,
|
|
77
77
|
userId,
|
|
78
78
|
state: filteredState,
|
|
@@ -41,6 +41,7 @@ module.exports = __toCommonJS(vertex_ai_session_service_exports);
|
|
|
41
41
|
var import_vertexai = require("@google-cloud/vertexai");
|
|
42
42
|
var import_compacted_event = require("../events/compacted_event.js");
|
|
43
43
|
var import_experimental = require("../utils/experimental.js");
|
|
44
|
+
var import_error_utils = require("../utils/error_utils.js");
|
|
44
45
|
var import_logger = require("../utils/logger.js");
|
|
45
46
|
var import_vertex_ai_utils = require("../utils/vertex_ai_utils.js");
|
|
46
47
|
var import_partial_copy = require("../utils/partial_copy.js");
|
|
@@ -335,9 +336,16 @@ let VertexAiSessionService = class extends import_base_session_service.BaseSessi
|
|
|
335
336
|
if (!session) {
|
|
336
337
|
return;
|
|
337
338
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
339
|
+
try {
|
|
340
|
+
await this.sessions.delete({
|
|
341
|
+
name: `reasoningEngines/${reasoningEngineId}/sessions/${sessionId}`
|
|
342
|
+
});
|
|
343
|
+
} catch (error) {
|
|
344
|
+
import_logger.logger.error(
|
|
345
|
+
`Error deleting session ${sessionId}: ${(0, import_error_utils.formatError)(error)}`
|
|
346
|
+
);
|
|
347
|
+
throw error;
|
|
348
|
+
}
|
|
341
349
|
}
|
|
342
350
|
async appendEvent({
|
|
343
351
|
session,
|
|
@@ -105,7 +105,7 @@ async function loadDir(directoryPath) {
|
|
|
105
105
|
}
|
|
106
106
|
await walk(fullPath);
|
|
107
107
|
} else if (entry.isFile()) {
|
|
108
|
-
const relativePath = path.relative(directoryPath, fullPath);
|
|
108
|
+
const relativePath = path.relative(directoryPath, fullPath).split(path.sep).join("/");
|
|
109
109
|
if (IGNORED_EXTENSIONS.has(path.extname(entry.name))) {
|
|
110
110
|
continue;
|
|
111
111
|
}
|
|
@@ -133,7 +133,7 @@ const FRONTMATTER_PATTERN = /^---[ \t]*\r?\n(?:([\s\S]*?)\r?\n)??---[ \t]*(?:\r?
|
|
|
133
133
|
function parseFrontmatterYaml(content) {
|
|
134
134
|
var _a;
|
|
135
135
|
const text = content.startsWith(FRONTMATTER_BOM) ? content.slice(FRONTMATTER_BOM.length) : content;
|
|
136
|
-
if (
|
|
136
|
+
if (!/^---[ \t]*(?:\r?\n|$)/.test(text)) {
|
|
137
137
|
throw new import_input_validation_error.InputValidationError(
|
|
138
138
|
"SKILL.md must start with YAML frontmatter (---)"
|
|
139
139
|
);
|
|
@@ -146,20 +146,27 @@ function parseFrontmatterYaml(content) {
|
|
|
146
146
|
}
|
|
147
147
|
const frontmatterStr = (_a = match[1]) != null ? _a : "";
|
|
148
148
|
const body = text.slice(match[0].length).trim();
|
|
149
|
-
|
|
150
|
-
const
|
|
151
|
-
|
|
149
|
+
const hasYamlContent = frontmatterStr.split(/\r?\n/).some((line) => {
|
|
150
|
+
const trimmed = line.trim();
|
|
151
|
+
return trimmed.length > 0 && !trimmed.startsWith("#");
|
|
152
|
+
});
|
|
153
|
+
let parsed = null;
|
|
154
|
+
if (hasYamlContent) {
|
|
155
|
+
try {
|
|
156
|
+
parsed = yaml.load(frontmatterStr);
|
|
157
|
+
} catch (e) {
|
|
152
158
|
throw new import_input_validation_error.InputValidationError(
|
|
153
|
-
|
|
159
|
+
`Invalid YAML in frontmatter: ${e.message}`,
|
|
160
|
+
{ cause: e }
|
|
154
161
|
);
|
|
155
162
|
}
|
|
156
|
-
|
|
157
|
-
|
|
163
|
+
}
|
|
164
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
158
165
|
throw new import_input_validation_error.InputValidationError(
|
|
159
|
-
|
|
160
|
-
{ cause: e }
|
|
166
|
+
"Invalid YAML in frontmatter: SKILL.md frontmatter must be a YAML mapping"
|
|
161
167
|
);
|
|
162
168
|
}
|
|
169
|
+
return { raw: parsed, body };
|
|
163
170
|
}
|
|
164
171
|
__name(parseFrontmatterYaml, "parseFrontmatterYaml");
|
|
165
172
|
function validateFrontmatter(raw) {
|
|
@@ -234,22 +241,16 @@ async function validateSkillDir(skillDir) {
|
|
|
234
241
|
} catch (e) {
|
|
235
242
|
return [e.message];
|
|
236
243
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
problems.push(
|
|
248
|
-
`Skill name '${skill.frontmatter.name}' does not match directory name '${dirName}'.`
|
|
249
|
-
);
|
|
250
|
-
}
|
|
251
|
-
} catch (e) {
|
|
252
|
-
problems.push(e.message);
|
|
244
|
+
const keys = Object.keys(skill.frontmatter);
|
|
245
|
+
const unknown = keys.filter((k) => !ALLOWED_FRONTMATTER_KEYS.has(k));
|
|
246
|
+
if (unknown.length > 0) {
|
|
247
|
+
problems.push(`Unknown frontmatter fields: [${unknown.sort().join(", ")}]`);
|
|
248
|
+
}
|
|
249
|
+
const dirName = path.basename(resolvedDir);
|
|
250
|
+
if (dirName !== skill.frontmatter.name) {
|
|
251
|
+
problems.push(
|
|
252
|
+
`Skill name '${skill.frontmatter.name}' does not match directory name '${dirName}'.`
|
|
253
|
+
);
|
|
253
254
|
}
|
|
254
255
|
return problems;
|
|
255
256
|
}
|
|
@@ -352,7 +353,7 @@ function loadSkillFromZipBuffer(zipBuffer) {
|
|
|
352
353
|
);
|
|
353
354
|
}
|
|
354
355
|
}
|
|
355
|
-
let skillMdContent
|
|
356
|
+
let skillMdContent;
|
|
356
357
|
for (const entry of entries) {
|
|
357
358
|
if (entry.isDirectory) continue;
|
|
358
359
|
if (entry.entryName.toLowerCase() === "skill.md") {
|
|
@@ -360,7 +361,7 @@ function loadSkillFromZipBuffer(zipBuffer) {
|
|
|
360
361
|
break;
|
|
361
362
|
}
|
|
362
363
|
}
|
|
363
|
-
if (
|
|
364
|
+
if (skillMdContent === void 0) {
|
|
364
365
|
throw new import_not_found_error.NotFoundError("SKILL.md not found in zipped filesystem.");
|
|
365
366
|
}
|
|
366
367
|
const { raw, body } = parseFrontmatterYaml(skillMdContent);
|