@google/adk 0.1.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/LICENSE +202 -0
- package/README.md +9 -0
- package/dist/cjs/agents/active_streaming_tool.js +44 -0
- package/dist/cjs/agents/base_agent.js +245 -0
- package/dist/cjs/agents/base_llm_processor.js +44 -0
- package/dist/cjs/agents/callback_context.js +98 -0
- package/dist/cjs/agents/content_processor_utils.js +299 -0
- package/dist/cjs/agents/functions.js +394 -0
- package/dist/cjs/agents/instructions.js +110 -0
- package/dist/cjs/agents/invocation_context.js +109 -0
- package/dist/cjs/agents/live_request_queue.js +136 -0
- package/dist/cjs/agents/llm_agent.js +859 -0
- package/dist/cjs/agents/loop_agent.js +68 -0
- package/dist/cjs/agents/parallel_agent.js +78 -0
- package/dist/cjs/agents/readonly_context.js +68 -0
- package/dist/cjs/agents/run_config.js +74 -0
- package/dist/cjs/agents/sequential_agent.js +84 -0
- package/dist/cjs/agents/transcription_entry.js +27 -0
- package/dist/cjs/artifacts/base_artifact_service.js +27 -0
- package/dist/cjs/artifacts/in_memory_artifact_service.js +119 -0
- package/dist/cjs/auth/auth_credential.js +46 -0
- package/dist/cjs/auth/auth_handler.js +92 -0
- package/dist/cjs/auth/auth_schemes.js +62 -0
- package/dist/cjs/auth/auth_tool.js +27 -0
- package/dist/cjs/auth/credential_service/base_credential_service.js +27 -0
- package/dist/cjs/auth/credential_service/in_memory_credential_service.js +63 -0
- package/dist/cjs/code_executors/base_code_executor.js +76 -0
- package/dist/cjs/code_executors/built_in_code_executor.js +58 -0
- package/dist/cjs/code_executors/code_execution_utils.js +142 -0
- package/dist/cjs/code_executors/code_executor_context.js +198 -0
- package/dist/cjs/common.js +161 -0
- package/dist/cjs/events/event.js +107 -0
- package/dist/cjs/events/event_actions.js +83 -0
- package/dist/cjs/examples/base_example_provider.js +40 -0
- package/dist/cjs/examples/example.js +27 -0
- package/dist/cjs/examples/example_util.js +107 -0
- package/dist/cjs/index.js +40 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/index_web.js +33 -0
- package/dist/cjs/memory/base_memory_service.js +27 -0
- package/dist/cjs/memory/in_memory_memory_service.js +97 -0
- package/dist/cjs/memory/memory_entry.js +27 -0
- package/dist/cjs/models/base_llm.js +77 -0
- package/dist/cjs/models/base_llm_connection.js +27 -0
- package/dist/cjs/models/gemini_llm_connection.js +132 -0
- package/dist/cjs/models/google_llm.js +321 -0
- package/dist/cjs/models/llm_request.js +82 -0
- package/dist/cjs/models/llm_response.js +71 -0
- package/dist/cjs/models/registry.js +121 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/plugins/base_plugin.js +236 -0
- package/dist/cjs/plugins/logging_plugin.js +222 -0
- package/dist/cjs/plugins/plugin_manager.js +239 -0
- package/dist/cjs/plugins/security_plugin.js +153 -0
- package/dist/cjs/runner/in_memory_runner.js +58 -0
- package/dist/cjs/runner/runner.js +276 -0
- package/dist/cjs/sessions/base_session_service.js +71 -0
- package/dist/cjs/sessions/in_memory_session_service.js +184 -0
- package/dist/cjs/sessions/session.js +48 -0
- package/dist/cjs/sessions/state.js +101 -0
- package/dist/cjs/tools/agent_tool.js +134 -0
- package/dist/cjs/tools/base_tool.js +107 -0
- package/dist/cjs/tools/base_toolset.js +76 -0
- package/dist/cjs/tools/forwarding_artifact_service.js +71 -0
- package/dist/cjs/tools/function_tool.js +101 -0
- package/dist/cjs/tools/google_search_tool.js +76 -0
- package/dist/cjs/tools/long_running_tool.js +63 -0
- package/dist/cjs/tools/mcp/mcp_session_manager.js +65 -0
- package/dist/cjs/tools/mcp/mcp_tool.js +65 -0
- package/dist/cjs/tools/mcp/mcp_toolset.js +61 -0
- package/dist/cjs/tools/tool_confirmation.js +49 -0
- package/dist/cjs/tools/tool_context.js +129 -0
- package/dist/cjs/utils/deep_clone.js +44 -0
- package/dist/cjs/utils/env_aware_utils.js +83 -0
- package/dist/cjs/utils/gemini_schema_util.js +88 -0
- package/dist/cjs/utils/logger.js +121 -0
- package/dist/cjs/utils/model_name.js +64 -0
- package/dist/cjs/utils/simple_zod_to_json.js +191 -0
- package/dist/cjs/utils/variant_utils.js +55 -0
- package/dist/cjs/version.js +39 -0
- package/dist/esm/agents/active_streaming_tool.js +14 -0
- package/dist/esm/agents/base_agent.js +214 -0
- package/dist/esm/agents/base_llm_processor.js +13 -0
- package/dist/esm/agents/callback_context.js +68 -0
- package/dist/esm/agents/content_processor_utils.js +268 -0
- package/dist/esm/agents/functions.js +353 -0
- package/dist/esm/agents/instructions.js +80 -0
- package/dist/esm/agents/invocation_context.js +78 -0
- package/dist/esm/agents/live_request_queue.js +106 -0
- package/dist/esm/agents/llm_agent.js +828 -0
- package/dist/esm/agents/loop_agent.js +38 -0
- package/dist/esm/agents/parallel_agent.js +48 -0
- package/dist/esm/agents/readonly_context.js +38 -0
- package/dist/esm/agents/run_config.js +43 -0
- package/dist/esm/agents/sequential_agent.js +54 -0
- package/dist/esm/agents/transcription_entry.js +5 -0
- package/dist/esm/artifacts/base_artifact_service.js +5 -0
- package/dist/esm/artifacts/in_memory_artifact_service.js +89 -0
- package/dist/esm/auth/auth_credential.js +16 -0
- package/dist/esm/auth/auth_handler.js +62 -0
- package/dist/esm/auth/auth_schemes.js +31 -0
- package/dist/esm/auth/auth_tool.js +5 -0
- package/dist/esm/auth/credential_service/base_credential_service.js +5 -0
- package/dist/esm/auth/credential_service/in_memory_credential_service.js +33 -0
- package/dist/esm/code_executors/base_code_executor.js +46 -0
- package/dist/esm/code_executors/built_in_code_executor.js +28 -0
- package/dist/esm/code_executors/code_execution_utils.js +108 -0
- package/dist/esm/code_executors/code_executor_context.js +168 -0
- package/dist/esm/common.js +85 -0
- package/dist/esm/events/event.js +72 -0
- package/dist/esm/events/event_actions.js +52 -0
- package/dist/esm/examples/base_example_provider.js +10 -0
- package/dist/esm/examples/example.js +5 -0
- package/dist/esm/examples/example_util.js +76 -0
- package/dist/esm/index.js +40 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/index_web.js +6 -0
- package/dist/esm/memory/base_memory_service.js +5 -0
- package/dist/esm/memory/in_memory_memory_service.js +67 -0
- package/dist/esm/memory/memory_entry.js +5 -0
- package/dist/esm/models/base_llm.js +47 -0
- package/dist/esm/models/base_llm_connection.js +5 -0
- package/dist/esm/models/gemini_llm_connection.js +102 -0
- package/dist/esm/models/google_llm.js +291 -0
- package/dist/esm/models/llm_request.js +50 -0
- package/dist/esm/models/llm_response.js +41 -0
- package/dist/esm/models/registry.js +91 -0
- package/dist/esm/plugins/base_plugin.js +206 -0
- package/dist/esm/plugins/logging_plugin.js +192 -0
- package/dist/esm/plugins/plugin_manager.js +209 -0
- package/dist/esm/plugins/security_plugin.js +119 -0
- package/dist/esm/runner/in_memory_runner.js +28 -0
- package/dist/esm/runner/runner.js +246 -0
- package/dist/esm/sessions/base_session_service.js +41 -0
- package/dist/esm/sessions/in_memory_session_service.js +154 -0
- package/dist/esm/sessions/session.js +18 -0
- package/dist/esm/sessions/state.js +71 -0
- package/dist/esm/tools/agent_tool.js +104 -0
- package/dist/esm/tools/base_tool.js +77 -0
- package/dist/esm/tools/base_toolset.js +46 -0
- package/dist/esm/tools/forwarding_artifact_service.js +41 -0
- package/dist/esm/tools/function_tool.js +71 -0
- package/dist/esm/tools/google_search_tool.js +46 -0
- package/dist/esm/tools/long_running_tool.js +33 -0
- package/dist/esm/tools/mcp/mcp_session_manager.js +35 -0
- package/dist/esm/tools/mcp/mcp_tool.js +35 -0
- package/dist/esm/tools/mcp/mcp_toolset.js +31 -0
- package/dist/esm/tools/tool_confirmation.js +19 -0
- package/dist/esm/tools/tool_context.js +99 -0
- package/dist/esm/utils/deep_clone.js +14 -0
- package/dist/esm/utils/env_aware_utils.js +49 -0
- package/dist/esm/utils/gemini_schema_util.js +58 -0
- package/dist/esm/utils/logger.js +89 -0
- package/dist/esm/utils/model_name.js +31 -0
- package/dist/esm/utils/simple_zod_to_json.js +160 -0
- package/dist/esm/utils/variant_utils.js +24 -0
- package/dist/esm/version.js +9 -0
- package/dist/types/agents/active_streaming_tool.d.ts +29 -0
- package/dist/types/agents/base_agent.d.ts +167 -0
- package/dist/types/agents/base_llm_processor.d.ts +27 -0
- package/dist/types/agents/callback_context.d.ts +42 -0
- package/dist/types/agents/content_processor_utils.d.ts +36 -0
- package/dist/types/agents/functions.d.ts +90 -0
- package/dist/types/agents/instructions.d.ts +32 -0
- package/dist/types/agents/invocation_context.d.ts +155 -0
- package/dist/types/agents/live_request_queue.d.ts +67 -0
- package/dist/types/agents/llm_agent.d.ts +333 -0
- package/dist/types/agents/loop_agent.d.ts +31 -0
- package/dist/types/agents/parallel_agent.d.ts +21 -0
- package/dist/types/agents/readonly_context.d.ts +31 -0
- package/dist/types/agents/run_config.d.ts +76 -0
- package/dist/types/agents/sequential_agent.d.ts +26 -0
- package/dist/types/agents/transcription_entry.d.ts +17 -0
- package/dist/types/artifacts/base_artifact_service.d.ts +127 -0
- package/dist/types/artifacts/in_memory_artifact_service.d.ts +18 -0
- package/dist/types/auth/auth_credential.d.ts +227 -0
- package/dist/types/auth/auth_handler.d.ts +27 -0
- package/dist/types/auth/auth_schemes.d.ts +36 -0
- package/dist/types/auth/auth_tool.d.ts +51 -0
- package/dist/types/auth/credential_service/base_credential_service.d.ts +27 -0
- package/dist/types/auth/credential_service/in_memory_credential_service.d.ts +19 -0
- package/dist/types/code_executors/base_code_executor.d.ts +60 -0
- package/dist/types/code_executors/built_in_code_executor.d.ts +13 -0
- package/dist/types/code_executors/code_execution_utils.d.ts +99 -0
- package/dist/types/code_executors/code_executor_context.d.ts +92 -0
- package/dist/types/common.d.ts +51 -0
- package/dist/types/events/event.d.ts +81 -0
- package/dist/types/events/event_actions.d.ts +74 -0
- package/dist/types/examples/base_example_provider.d.ts +20 -0
- package/dist/types/examples/example.d.ts +19 -0
- package/dist/types/examples/example_util.d.ts +13 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index_web.d.ts +6 -0
- package/dist/types/memory/base_memory_service.d.ts +47 -0
- package/dist/types/memory/in_memory_memory_service.d.ts +18 -0
- package/dist/types/memory/memory_entry.d.ts +24 -0
- package/dist/types/models/base_llm.d.ts +46 -0
- package/dist/types/models/base_llm_connection.d.ts +51 -0
- package/dist/types/models/gemini_llm_connection.d.ts +54 -0
- package/dist/types/models/google_llm.d.ts +88 -0
- package/dist/types/models/llm_request.d.ts +49 -0
- package/dist/types/models/llm_response.d.ts +79 -0
- package/dist/types/models/registry.d.ts +45 -0
- package/dist/types/plugins/base_plugin.d.ts +310 -0
- package/dist/types/plugins/logging_plugin.d.ts +104 -0
- package/dist/types/plugins/plugin_manager.d.ts +155 -0
- package/dist/types/plugins/security_plugin.d.ts +60 -0
- package/dist/types/runner/in_memory_runner.d.ts +15 -0
- package/dist/types/runner/runner.d.ts +80 -0
- package/dist/types/sessions/base_session_service.d.ts +129 -0
- package/dist/types/sessions/in_memory_session_service.d.ts +32 -0
- package/dist/types/sessions/session.d.ts +46 -0
- package/dist/types/sessions/state.d.ts +57 -0
- package/dist/types/tools/agent_tool.d.ts +37 -0
- package/dist/types/tools/base_tool.d.ts +84 -0
- package/dist/types/tools/base_toolset.d.ts +64 -0
- package/dist/types/tools/forwarding_artifact_service.d.ts +21 -0
- package/dist/types/tools/function_tool.d.ts +48 -0
- package/dist/types/tools/google_search_tool.d.ts +18 -0
- package/dist/types/tools/long_running_tool.d.ts +18 -0
- package/dist/types/tools/mcp/mcp_session_manager.d.ts +57 -0
- package/dist/types/tools/mcp/mcp_tool.d.ts +30 -0
- package/dist/types/tools/mcp/mcp_toolset.d.ts +39 -0
- package/dist/types/tools/tool_confirmation.d.ts +25 -0
- package/dist/types/tools/tool_context.d.ts +63 -0
- package/dist/types/utils/deep_clone.d.ts +1 -0
- package/dist/types/utils/env_aware_utils.d.ts +31 -0
- package/dist/types/utils/gemini_schema_util.d.ts +23 -0
- package/dist/types/utils/logger.d.ts +41 -0
- package/dist/types/utils/model_name.d.ts +34 -0
- package/dist/types/utils/simple_zod_to_json.d.ts +12 -0
- package/dist/types/utils/variant_utils.d.ts +24 -0
- package/dist/types/version.d.ts +6 -0
- package/dist/web/agents/active_streaming_tool.js +14 -0
- package/dist/web/agents/base_agent.js +265 -0
- package/dist/web/agents/base_llm_processor.js +13 -0
- package/dist/web/agents/callback_context.js +68 -0
- package/dist/web/agents/content_processor_utils.js +268 -0
- package/dist/web/agents/functions.js +353 -0
- package/dist/web/agents/instructions.js +80 -0
- package/dist/web/agents/invocation_context.js +78 -0
- package/dist/web/agents/live_request_queue.js +124 -0
- package/dist/web/agents/llm_agent.js +973 -0
- package/dist/web/agents/loop_agent.js +71 -0
- package/dist/web/agents/parallel_agent.js +83 -0
- package/dist/web/agents/readonly_context.js +38 -0
- package/dist/web/agents/run_config.js +43 -0
- package/dist/web/agents/sequential_agent.js +99 -0
- package/dist/web/agents/transcription_entry.js +5 -0
- package/dist/web/artifacts/base_artifact_service.js +5 -0
- package/dist/web/artifacts/in_memory_artifact_service.js +89 -0
- package/dist/web/auth/auth_credential.js +16 -0
- package/dist/web/auth/auth_handler.js +62 -0
- package/dist/web/auth/auth_schemes.js +31 -0
- package/dist/web/auth/auth_tool.js +5 -0
- package/dist/web/auth/credential_service/base_credential_service.js +5 -0
- package/dist/web/auth/credential_service/in_memory_credential_service.js +33 -0
- package/dist/web/code_executors/base_code_executor.js +46 -0
- package/dist/web/code_executors/built_in_code_executor.js +28 -0
- package/dist/web/code_executors/code_execution_utils.js +105 -0
- package/dist/web/code_executors/code_executor_context.js +168 -0
- package/dist/web/common.js +85 -0
- package/dist/web/events/event.js +90 -0
- package/dist/web/events/event_actions.js +67 -0
- package/dist/web/examples/base_example_provider.js +10 -0
- package/dist/web/examples/example.js +5 -0
- package/dist/web/examples/example_util.js +75 -0
- package/dist/web/index.js +13 -0
- package/dist/web/index.js.map +7 -0
- package/dist/web/index_web.js +6 -0
- package/dist/web/memory/base_memory_service.js +5 -0
- package/dist/web/memory/in_memory_memory_service.js +67 -0
- package/dist/web/memory/memory_entry.js +5 -0
- package/dist/web/models/base_llm.js +47 -0
- package/dist/web/models/base_llm_connection.js +5 -0
- package/dist/web/models/gemini_llm_connection.js +120 -0
- package/dist/web/models/google_llm.js +332 -0
- package/dist/web/models/llm_request.js +50 -0
- package/dist/web/models/llm_response.js +41 -0
- package/dist/web/models/registry.js +91 -0
- package/dist/web/plugins/base_plugin.js +206 -0
- package/dist/web/plugins/logging_plugin.js +192 -0
- package/dist/web/plugins/plugin_manager.js +209 -0
- package/dist/web/plugins/security_plugin.js +119 -0
- package/dist/web/runner/in_memory_runner.js +28 -0
- package/dist/web/runner/runner.js +277 -0
- package/dist/web/sessions/base_session_service.js +41 -0
- package/dist/web/sessions/in_memory_session_service.js +154 -0
- package/dist/web/sessions/session.js +18 -0
- package/dist/web/sessions/state.js +87 -0
- package/dist/web/tools/agent_tool.js +118 -0
- package/dist/web/tools/base_tool.js +77 -0
- package/dist/web/tools/base_toolset.js +46 -0
- package/dist/web/tools/forwarding_artifact_service.js +41 -0
- package/dist/web/tools/function_tool.js +71 -0
- package/dist/web/tools/google_search_tool.js +46 -0
- package/dist/web/tools/long_running_tool.js +50 -0
- package/dist/web/tools/mcp/mcp_session_manager.js +35 -0
- package/dist/web/tools/mcp/mcp_tool.js +35 -0
- package/dist/web/tools/mcp/mcp_toolset.js +31 -0
- package/dist/web/tools/tool_confirmation.js +19 -0
- package/dist/web/tools/tool_context.js +99 -0
- package/dist/web/utils/deep_clone.js +14 -0
- package/dist/web/utils/env_aware_utils.js +49 -0
- package/dist/web/utils/gemini_schema_util.js +58 -0
- package/dist/web/utils/logger.js +89 -0
- package/dist/web/utils/model_name.js +31 -0
- package/dist/web/utils/simple_zod_to_json.js +174 -0
- package/dist/web/utils/variant_utils.js +24 -0
- package/dist/web/version.js +9 -0
- package/package.json +61 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* @license
|
|
19
|
+
* Copyright 2025 Google LLC
|
|
20
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
21
|
+
*/
|
|
22
|
+
class State {
|
|
23
|
+
constructor(value, delta) {
|
|
24
|
+
this.value = value;
|
|
25
|
+
this.delta = delta;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Returns the value of the state dict for the given key.
|
|
29
|
+
*
|
|
30
|
+
* @param key The key to get the value for.
|
|
31
|
+
* @param defaultValue The default value to return if the key is not found.
|
|
32
|
+
* @return The value of the state for the given key, or the default value if
|
|
33
|
+
* not found.
|
|
34
|
+
*/
|
|
35
|
+
get(key, defaultValue) {
|
|
36
|
+
if (key in this.delta) {
|
|
37
|
+
return this.delta[key];
|
|
38
|
+
}
|
|
39
|
+
if (key in this.value) {
|
|
40
|
+
return this.value[key];
|
|
41
|
+
}
|
|
42
|
+
return defaultValue;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Sets the value of the state dict for the given key.
|
|
46
|
+
*
|
|
47
|
+
* @param key The key to set the value for.
|
|
48
|
+
* @param value The value to set.
|
|
49
|
+
*/
|
|
50
|
+
set(key, value) {
|
|
51
|
+
this.value[key] = value;
|
|
52
|
+
this.delta[key] = value;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Whether the state has pending delta.
|
|
56
|
+
*/
|
|
57
|
+
has(key) {
|
|
58
|
+
return key in this.value || key in this.delta;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Whether the state has pending delta.
|
|
62
|
+
*/
|
|
63
|
+
hasDelta() {
|
|
64
|
+
return Object.keys(this.delta).length > 0;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Updates the state dict with the given delta.
|
|
68
|
+
*
|
|
69
|
+
* @param delta The delta to update the state with.
|
|
70
|
+
*/
|
|
71
|
+
update(delta) {
|
|
72
|
+
this.delta = __spreadValues(__spreadValues({}, this.delta), delta);
|
|
73
|
+
this.value = __spreadValues(__spreadValues({}, this.value), delta);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Returns the state as a plain JSON object.
|
|
77
|
+
*/
|
|
78
|
+
toRecord() {
|
|
79
|
+
return __spreadValues(__spreadValues({}, this.value), this.delta);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
State.APP_PREFIX = "app:";
|
|
83
|
+
State.USER_PREFIX = "user:";
|
|
84
|
+
State.TEMP_PREFIX = "temp:";
|
|
85
|
+
export {
|
|
86
|
+
State
|
|
87
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
2
|
+
var __forAwait = (obj, it, method) => (it = obj[__knownSymbol("asyncIterator")]) ? it.call(obj) : (obj = obj[__knownSymbol("iterator")](), it = {}, method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((yes, no, done) => (arg = fn.call(obj, arg), done = arg.done, Promise.resolve(arg.value).then((value) => yes({ value, done }), no)))), method("next"), method("return"), it);
|
|
3
|
+
/**
|
|
4
|
+
* @license
|
|
5
|
+
* Copyright 2025 Google LLC
|
|
6
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
import { Type } from "@google/genai";
|
|
9
|
+
import { LlmAgent } from "../agents/llm_agent.js";
|
|
10
|
+
import { InMemoryMemoryService } from "../memory/in_memory_memory_service.js";
|
|
11
|
+
import { Runner } from "../runner/runner.js";
|
|
12
|
+
import { InMemorySessionService } from "../sessions/in_memory_session_service.js";
|
|
13
|
+
import { GoogleLLMVariant } from "../utils/variant_utils.js";
|
|
14
|
+
import { BaseTool } from "./base_tool.js";
|
|
15
|
+
import { ForwardingArtifactService } from "./forwarding_artifact_service.js";
|
|
16
|
+
class AgentTool extends BaseTool {
|
|
17
|
+
constructor(config) {
|
|
18
|
+
super(
|
|
19
|
+
{ name: config.agent.name, description: config.agent.description || "" }
|
|
20
|
+
);
|
|
21
|
+
this.agent = config.agent;
|
|
22
|
+
this.skipSummarization = config.skipSummarization || false;
|
|
23
|
+
}
|
|
24
|
+
_getDeclaration() {
|
|
25
|
+
let declaration;
|
|
26
|
+
if (this.agent instanceof LlmAgent && this.agent.inputSchema) {
|
|
27
|
+
declaration = {
|
|
28
|
+
name: this.name,
|
|
29
|
+
description: this.description,
|
|
30
|
+
// TODO(b/425992518): We should not use the agent's input schema as is.
|
|
31
|
+
// It should be validated and possibly transformed. Consider similar
|
|
32
|
+
// logic to one we have in Python ADK.
|
|
33
|
+
parameters: this.agent.inputSchema
|
|
34
|
+
};
|
|
35
|
+
} else {
|
|
36
|
+
declaration = {
|
|
37
|
+
name: this.name,
|
|
38
|
+
description: this.description,
|
|
39
|
+
parameters: {
|
|
40
|
+
type: Type.OBJECT,
|
|
41
|
+
properties: {
|
|
42
|
+
"request": {
|
|
43
|
+
type: Type.STRING
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
required: ["request"]
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (this.apiVariant !== GoogleLLMVariant.GEMINI_API) {
|
|
51
|
+
const hasOutputSchema = this.agent instanceof LlmAgent && this.agent.outputSchema;
|
|
52
|
+
declaration.response = hasOutputSchema ? { type: Type.OBJECT } : { type: Type.STRING };
|
|
53
|
+
}
|
|
54
|
+
return declaration;
|
|
55
|
+
}
|
|
56
|
+
async runAsync({ args, toolContext }) {
|
|
57
|
+
var _a, _b;
|
|
58
|
+
if (this.skipSummarization) {
|
|
59
|
+
toolContext.actions.skipSummarization = true;
|
|
60
|
+
}
|
|
61
|
+
const hasInputSchema = this.agent instanceof LlmAgent && this.agent.inputSchema;
|
|
62
|
+
const content = {
|
|
63
|
+
role: "user",
|
|
64
|
+
parts: [
|
|
65
|
+
{
|
|
66
|
+
// TODO(b/425992518): Should be validated. Consider similar
|
|
67
|
+
// logic to one we have in Python ADK.
|
|
68
|
+
text: hasInputSchema ? JSON.stringify(args) : args["request"]
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
};
|
|
72
|
+
const runner = new Runner({
|
|
73
|
+
appName: this.agent.name,
|
|
74
|
+
agent: this.agent,
|
|
75
|
+
artifactService: new ForwardingArtifactService(toolContext),
|
|
76
|
+
sessionService: new InMemorySessionService(),
|
|
77
|
+
memoryService: new InMemoryMemoryService(),
|
|
78
|
+
credentialService: toolContext.invocationContext.credentialService
|
|
79
|
+
});
|
|
80
|
+
const session = await runner.sessionService.createSession({
|
|
81
|
+
appName: this.agent.name,
|
|
82
|
+
userId: "tmp_user",
|
|
83
|
+
state: toolContext.state.toRecord()
|
|
84
|
+
});
|
|
85
|
+
let lastEvent;
|
|
86
|
+
try {
|
|
87
|
+
for (var iter = __forAwait(runner.runAsync({
|
|
88
|
+
userId: session.userId,
|
|
89
|
+
sessionId: session.id,
|
|
90
|
+
newMessage: content
|
|
91
|
+
})), more, temp, error; more = !(temp = await iter.next()).done; more = false) {
|
|
92
|
+
const event = temp.value;
|
|
93
|
+
if (event.actions.stateDelta) {
|
|
94
|
+
toolContext.state.update(event.actions.stateDelta);
|
|
95
|
+
}
|
|
96
|
+
lastEvent = event;
|
|
97
|
+
}
|
|
98
|
+
} catch (temp) {
|
|
99
|
+
error = [temp];
|
|
100
|
+
} finally {
|
|
101
|
+
try {
|
|
102
|
+
more && (temp = iter.return) && await temp.call(iter);
|
|
103
|
+
} finally {
|
|
104
|
+
if (error)
|
|
105
|
+
throw error[0];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (!((_b = (_a = lastEvent == null ? void 0 : lastEvent.content) == null ? void 0 : _a.parts) == null ? void 0 : _b.length)) {
|
|
109
|
+
return "";
|
|
110
|
+
}
|
|
111
|
+
const hasOutputSchema = this.agent instanceof LlmAgent && this.agent.outputSchema;
|
|
112
|
+
const mergetText = lastEvent.content.parts.map((part) => part.text).filter((text) => text).join("\n");
|
|
113
|
+
return hasOutputSchema ? JSON.parse(mergetText) : mergetText;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
export {
|
|
117
|
+
AgentTool
|
|
118
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { getGoogleLlmVariant } from "../utils/variant_utils.js";
|
|
7
|
+
class BaseTool {
|
|
8
|
+
/**
|
|
9
|
+
* Base constructor for a tool.
|
|
10
|
+
*
|
|
11
|
+
* @param params The parameters for `BaseTool`.
|
|
12
|
+
*/
|
|
13
|
+
constructor(params) {
|
|
14
|
+
var _a;
|
|
15
|
+
this.name = params.name;
|
|
16
|
+
this.description = params.description;
|
|
17
|
+
this.isLongRunning = (_a = params.isLongRunning) != null ? _a : false;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Gets the OpenAPI specification of this tool in the form of a
|
|
21
|
+
* FunctionDeclaration.
|
|
22
|
+
*
|
|
23
|
+
* NOTE
|
|
24
|
+
* - Required if subclass uses the default implementation of
|
|
25
|
+
* `processLlmRequest` to add function declaration to LLM request.
|
|
26
|
+
* - Otherwise, can be skipped, e.g. for a built-in GoogleSearch tool for
|
|
27
|
+
* Gemini.
|
|
28
|
+
*
|
|
29
|
+
* @return The FunctionDeclaration of this tool, or undefined if it doesn't
|
|
30
|
+
* need to be added to LlmRequest.config.
|
|
31
|
+
*/
|
|
32
|
+
_getDeclaration() {
|
|
33
|
+
return void 0;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Processes the outgoing LLM request for this tool.
|
|
37
|
+
*
|
|
38
|
+
* Use cases:
|
|
39
|
+
* - Most common use case is adding this tool to the LLM request.
|
|
40
|
+
* - Some tools may just preprocess the LLM request before it's sent out.
|
|
41
|
+
*
|
|
42
|
+
* @param request The request to process the LLM request.
|
|
43
|
+
*/
|
|
44
|
+
async processLlmRequest({ toolContext, llmRequest }) {
|
|
45
|
+
const functionDeclaration = this._getDeclaration();
|
|
46
|
+
if (!functionDeclaration) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
llmRequest.toolsDict[this.name] = this;
|
|
50
|
+
const tool = findToolWithFunctionDeclarations(llmRequest);
|
|
51
|
+
if (tool) {
|
|
52
|
+
if (!tool.functionDeclarations) {
|
|
53
|
+
tool.functionDeclarations = [];
|
|
54
|
+
}
|
|
55
|
+
tool.functionDeclarations.push(functionDeclaration);
|
|
56
|
+
} else {
|
|
57
|
+
llmRequest.config = llmRequest.config || {};
|
|
58
|
+
llmRequest.config.tools = llmRequest.config.tools || [];
|
|
59
|
+
llmRequest.config.tools.push({
|
|
60
|
+
functionDeclarations: [functionDeclaration]
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The Google API LLM variant to use.
|
|
66
|
+
*/
|
|
67
|
+
get apiVariant() {
|
|
68
|
+
return getGoogleLlmVariant();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function findToolWithFunctionDeclarations(llmRequest) {
|
|
72
|
+
var _a;
|
|
73
|
+
return (((_a = llmRequest.config) == null ? void 0 : _a.tools) || []).find((tool) => "functionDeclarations" in tool);
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
BaseTool
|
|
77
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
class BaseToolset {
|
|
7
|
+
constructor(toolFilter) {
|
|
8
|
+
this.toolFilter = toolFilter;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns whether the tool should be exposed to LLM.
|
|
12
|
+
*
|
|
13
|
+
* @param tool The tool to check.
|
|
14
|
+
* @param context Context used to filter tools available to the agent.
|
|
15
|
+
* @return Whether the tool should be exposed to LLM.
|
|
16
|
+
*/
|
|
17
|
+
isToolSelected(tool, context) {
|
|
18
|
+
if (!this.toolFilter) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
if (typeof this.toolFilter === "function") {
|
|
22
|
+
return this.toolFilter(tool, context);
|
|
23
|
+
}
|
|
24
|
+
if (Array.isArray(this.toolFilter)) {
|
|
25
|
+
return this.toolFilter.includes(tool.name);
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Processes the outgoing LLM request for this toolset. This method will be
|
|
31
|
+
* called before each tool processes the llm request.
|
|
32
|
+
*
|
|
33
|
+
* Use cases:
|
|
34
|
+
* - Instead of let each tool process the llm request, we can let the toolset
|
|
35
|
+
* process the llm request. e.g. ComputerUseToolset can add computer use
|
|
36
|
+
* tool to the llm request.
|
|
37
|
+
*
|
|
38
|
+
* @param toolContext The context of the tool.
|
|
39
|
+
* @param llmRequest The outgoing LLM request, mutable this method.
|
|
40
|
+
*/
|
|
41
|
+
async processLlmRequest(toolContext, llmRequest) {
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export {
|
|
45
|
+
BaseToolset
|
|
46
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
class ForwardingArtifactService {
|
|
7
|
+
constructor(toolContext) {
|
|
8
|
+
this.toolContext = toolContext;
|
|
9
|
+
this.invocationContext = toolContext.invocationContext;
|
|
10
|
+
}
|
|
11
|
+
// TODO - b/425992518: Remove unnecessary parameters. We should rethink the
|
|
12
|
+
// abstraction layer to make it more clear.
|
|
13
|
+
async saveArtifact(request) {
|
|
14
|
+
return this.toolContext.saveArtifact(request.filename, request.artifact);
|
|
15
|
+
}
|
|
16
|
+
async loadArtifact(request) {
|
|
17
|
+
return this.toolContext.loadArtifact(request.filename, request.version);
|
|
18
|
+
}
|
|
19
|
+
async listArtifactKeys(request) {
|
|
20
|
+
return this.toolContext.listArtifacts();
|
|
21
|
+
}
|
|
22
|
+
async deleteArtifact(request) {
|
|
23
|
+
if (!this.toolContext.invocationContext.artifactService) {
|
|
24
|
+
throw new Error("Artifact service is not initialized.");
|
|
25
|
+
}
|
|
26
|
+
return this.toolContext.invocationContext.artifactService.deleteArtifact(
|
|
27
|
+
request
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
async listVersions(request) {
|
|
31
|
+
if (!this.toolContext.invocationContext.artifactService) {
|
|
32
|
+
throw new Error("Artifact service is not initialized.");
|
|
33
|
+
}
|
|
34
|
+
return this.toolContext.invocationContext.artifactService.listVersions(
|
|
35
|
+
request
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
ForwardingArtifactService
|
|
41
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Type } from "@google/genai";
|
|
7
|
+
import { ZodObject } from "zod";
|
|
8
|
+
import { isZodObject, zodObjectToSchema } from "../utils/simple_zod_to_json.js";
|
|
9
|
+
import { BaseTool } from "./base_tool.js";
|
|
10
|
+
function toSchema(parameters) {
|
|
11
|
+
if (parameters === void 0) {
|
|
12
|
+
return { type: Type.OBJECT, properties: {} };
|
|
13
|
+
}
|
|
14
|
+
if (isZodObject(parameters)) {
|
|
15
|
+
return zodObjectToSchema(parameters);
|
|
16
|
+
}
|
|
17
|
+
return parameters;
|
|
18
|
+
}
|
|
19
|
+
class FunctionTool extends BaseTool {
|
|
20
|
+
/**
|
|
21
|
+
* The constructor acts as the user-friendly factory.
|
|
22
|
+
* @param options The configuration for the tool.
|
|
23
|
+
*/
|
|
24
|
+
constructor(options) {
|
|
25
|
+
var _a;
|
|
26
|
+
const name = (_a = options.name) != null ? _a : options.execute.name;
|
|
27
|
+
if (!name) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
"Tool name cannot be empty. Either name the `execute` function or provide a `name`."
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
super({
|
|
33
|
+
name,
|
|
34
|
+
description: options.description,
|
|
35
|
+
isLongRunning: options.isLongRunning
|
|
36
|
+
});
|
|
37
|
+
this.execute = options.execute;
|
|
38
|
+
this.parameters = options.parameters;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Provide a schema for the function.
|
|
42
|
+
*/
|
|
43
|
+
_getDeclaration() {
|
|
44
|
+
return {
|
|
45
|
+
name: this.name,
|
|
46
|
+
description: this.description,
|
|
47
|
+
parameters: toSchema(this.parameters)
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Logic for running the tool.
|
|
52
|
+
*/
|
|
53
|
+
async runAsync(req) {
|
|
54
|
+
try {
|
|
55
|
+
let validatedArgs = req.args;
|
|
56
|
+
if (this.parameters instanceof ZodObject) {
|
|
57
|
+
validatedArgs = this.parameters.parse(req.args);
|
|
58
|
+
}
|
|
59
|
+
return await this.execute(
|
|
60
|
+
validatedArgs,
|
|
61
|
+
req.toolContext
|
|
62
|
+
);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
65
|
+
throw new Error("Error in tool '".concat(this.name, "': ").concat(errorMessage));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
FunctionTool
|
|
71
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { isGemini1Model, isGeminiModel } from "../utils/model_name.js";
|
|
7
|
+
import { BaseTool } from "./base_tool.js";
|
|
8
|
+
class GoogleSearchTool extends BaseTool {
|
|
9
|
+
constructor() {
|
|
10
|
+
super({ name: "google_search", description: "Google Search Tool" });
|
|
11
|
+
}
|
|
12
|
+
runAsync(request) {
|
|
13
|
+
return Promise.resolve();
|
|
14
|
+
}
|
|
15
|
+
async processLlmRequest({ toolContext, llmRequest }) {
|
|
16
|
+
if (!llmRequest.model) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
llmRequest.config = llmRequest.config || {};
|
|
20
|
+
llmRequest.config.tools = llmRequest.config.tools || [];
|
|
21
|
+
if (isGemini1Model(llmRequest.model)) {
|
|
22
|
+
if (llmRequest.config.tools.length > 0) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
"Google search tool can not be used with other tools in Gemini 1.x."
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
llmRequest.config.tools.push({
|
|
28
|
+
googleSearchRetrieval: {}
|
|
29
|
+
});
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (isGeminiModel(llmRequest.model)) {
|
|
33
|
+
llmRequest.config.tools.push({
|
|
34
|
+
googleSearch: {}
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
throw new Error(
|
|
39
|
+
"Google search tool is not supported for model ".concat(llmRequest.model)
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const GOOGLE_SEARCH = new GoogleSearchTool();
|
|
44
|
+
export {
|
|
45
|
+
GOOGLE_SEARCH
|
|
46
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
/**
|
|
21
|
+
* @license
|
|
22
|
+
* Copyright 2025 Google LLC
|
|
23
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
24
|
+
*/
|
|
25
|
+
import { FunctionTool } from "./function_tool.js";
|
|
26
|
+
const LONG_RUNNING_INSTRUCTION = "\n\nNOTE: This is a long-running operation. Do not call this tool again if it has already returned some intermediate or pending status.";
|
|
27
|
+
class LongRunningFunctionTool extends FunctionTool {
|
|
28
|
+
/**
|
|
29
|
+
* The constructor acts as the user-friendly factory.
|
|
30
|
+
* @param options The configuration for the tool.
|
|
31
|
+
*/
|
|
32
|
+
constructor(options) {
|
|
33
|
+
super(__spreadProps(__spreadValues({}, options), { isLongRunning: true }));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Provide a schema for the function.
|
|
37
|
+
*/
|
|
38
|
+
_getDeclaration() {
|
|
39
|
+
const declaration = super._getDeclaration();
|
|
40
|
+
if (declaration.description) {
|
|
41
|
+
declaration.description += LONG_RUNNING_INSTRUCTION;
|
|
42
|
+
} else {
|
|
43
|
+
declaration.description = LONG_RUNNING_INSTRUCTION.trimStart();
|
|
44
|
+
}
|
|
45
|
+
return declaration;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
LongRunningFunctionTool
|
|
50
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
7
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
8
|
+
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
|
9
|
+
class MCPSessionManager {
|
|
10
|
+
constructor(connectionParams) {
|
|
11
|
+
this.connectionParams = connectionParams;
|
|
12
|
+
}
|
|
13
|
+
async createSession() {
|
|
14
|
+
const client = new Client({ name: "MCPClient", version: "1.0.0" });
|
|
15
|
+
switch (this.connectionParams.type) {
|
|
16
|
+
case "StdioConnectionParams":
|
|
17
|
+
await client.connect(
|
|
18
|
+
new StdioClientTransport(this.connectionParams.serverParams)
|
|
19
|
+
);
|
|
20
|
+
break;
|
|
21
|
+
case "StreamableHTTPConnectionParams":
|
|
22
|
+
await client.connect(new StreamableHTTPClientTransport(
|
|
23
|
+
new URL(this.connectionParams.url)
|
|
24
|
+
));
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
const _exhaustiveCheck = this.connectionParams;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
return client;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
MCPSessionManager
|
|
35
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { toGeminiSchema } from "../../utils/gemini_schema_util.js";
|
|
7
|
+
import { BaseTool } from "../base_tool.js";
|
|
8
|
+
class MCPTool extends BaseTool {
|
|
9
|
+
constructor(mcpTool, mcpSessionManager) {
|
|
10
|
+
super({ name: mcpTool.name, description: mcpTool.description || "" });
|
|
11
|
+
this.mcpTool = mcpTool;
|
|
12
|
+
this.mcpSessionManager = mcpSessionManager;
|
|
13
|
+
}
|
|
14
|
+
_getDeclaration() {
|
|
15
|
+
let declaration;
|
|
16
|
+
declaration = {
|
|
17
|
+
name: this.mcpTool.name,
|
|
18
|
+
description: this.mcpTool.description,
|
|
19
|
+
parameters: toGeminiSchema(this.mcpTool.inputSchema),
|
|
20
|
+
// TODO: need revisit, refer to this
|
|
21
|
+
// https://modelcontextprotocol.io/specification/2025-06-18/server/tools#tool-result
|
|
22
|
+
response: toGeminiSchema(this.mcpTool.outputSchema)
|
|
23
|
+
};
|
|
24
|
+
return declaration;
|
|
25
|
+
}
|
|
26
|
+
async runAsync(request) {
|
|
27
|
+
const session = await this.mcpSessionManager.createSession();
|
|
28
|
+
const callRequest = {};
|
|
29
|
+
callRequest.params = { name: this.mcpTool.name, arguments: request.args };
|
|
30
|
+
return await session.callTool(callRequest.params);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
MCPTool
|
|
35
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { logger } from "../../utils/logger.js";
|
|
7
|
+
import { BaseToolset } from "../base_toolset.js";
|
|
8
|
+
import { MCPSessionManager } from "./mcp_session_manager.js";
|
|
9
|
+
import { MCPTool } from "./mcp_tool.js";
|
|
10
|
+
class MCPToolset extends BaseToolset {
|
|
11
|
+
constructor(connectionParams, toolFilter = []) {
|
|
12
|
+
super(toolFilter);
|
|
13
|
+
this.mcpSessionManager = new MCPSessionManager(connectionParams);
|
|
14
|
+
}
|
|
15
|
+
async getTools(context) {
|
|
16
|
+
const session = await this.mcpSessionManager.createSession();
|
|
17
|
+
const listResult = await session.listTools();
|
|
18
|
+
logger.debug("number of tools: ".concat(listResult.tools.length));
|
|
19
|
+
for (const tool of listResult.tools) {
|
|
20
|
+
logger.debug("tool: ".concat(tool.name));
|
|
21
|
+
}
|
|
22
|
+
return listResult.tools.map(
|
|
23
|
+
(tool) => new MCPTool(tool, this.mcpSessionManager)
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
async close() {
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export {
|
|
30
|
+
MCPToolset
|
|
31
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
class ToolConfirmation {
|
|
7
|
+
constructor({
|
|
8
|
+
hint,
|
|
9
|
+
confirmed,
|
|
10
|
+
payload
|
|
11
|
+
}) {
|
|
12
|
+
this.hint = hint != null ? hint : "";
|
|
13
|
+
this.confirmed = confirmed;
|
|
14
|
+
this.payload = payload;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
ToolConfirmation
|
|
19
|
+
};
|