@google/adk 0.4.0 → 0.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_event.js +290 -0
- package/dist/cjs/a2a/event_converter_utils.js +201 -0
- package/dist/cjs/a2a/executor_context.js +53 -0
- package/dist/cjs/a2a/metadata_converter_utils.js +125 -0
- package/dist/cjs/a2a/part_converter_utils.js +23 -21
- package/dist/cjs/agents/base_agent.js +3 -3
- package/dist/cjs/{tools/tool_context.js → agents/context.js} +70 -15
- package/dist/cjs/agents/functions.js +2 -2
- package/dist/cjs/agents/llm_agent.js +21 -674
- package/dist/cjs/agents/processors/agent_transfer_llm_request_processor.js +132 -0
- package/dist/cjs/agents/processors/basic_llm_request_processor.js +68 -0
- package/dist/cjs/agents/processors/code_execution_request_processor.js +389 -0
- package/dist/cjs/agents/processors/content_request_processor.js +66 -0
- package/dist/cjs/agents/processors/identity_llm_request_processor.js +54 -0
- package/dist/cjs/agents/processors/instructions_llm_request_processor.js +85 -0
- package/dist/cjs/agents/processors/request_confirmation_llm_request_processor.js +165 -0
- package/dist/cjs/common.js +11 -7
- package/dist/cjs/index.js +89 -53
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/models/llm_response.js +2 -0
- package/dist/cjs/plugins/base_plugin.js +1 -1
- package/dist/cjs/runner/runner.js +1 -1
- package/dist/cjs/sessions/database_session_service.js +4 -1
- package/dist/cjs/sessions/db/operations.js +24 -12
- package/dist/cjs/tools/base_tool.js +3 -0
- package/dist/cjs/tools/base_toolset.js +13 -3
- package/dist/cjs/tools/exit_loop_tool.js +63 -0
- package/dist/cjs/tools/mcp/mcp_toolset.js +9 -5
- package/dist/cjs/utils/logger.js +61 -54
- package/dist/cjs/version.js +1 -1
- package/dist/esm/a2a/a2a_event.js +243 -0
- package/dist/esm/a2a/event_converter_utils.js +187 -0
- package/dist/esm/a2a/executor_context.js +23 -0
- package/dist/esm/a2a/metadata_converter_utils.js +90 -0
- package/dist/esm/a2a/part_converter_utils.js +25 -21
- package/dist/esm/agents/base_agent.js +3 -3
- package/dist/esm/{tools/tool_context.js → agents/context.js} +66 -11
- package/dist/esm/agents/functions.js +2 -2
- package/dist/esm/agents/llm_agent.js +14 -683
- package/dist/esm/agents/processors/agent_transfer_llm_request_processor.js +101 -0
- package/dist/esm/agents/processors/basic_llm_request_processor.js +37 -0
- package/dist/esm/agents/processors/code_execution_request_processor.js +363 -0
- package/dist/esm/agents/processors/content_request_processor.js +38 -0
- package/dist/esm/agents/processors/identity_llm_request_processor.js +23 -0
- package/dist/esm/agents/processors/instructions_llm_request_processor.js +54 -0
- package/dist/esm/agents/processors/request_confirmation_llm_request_processor.js +140 -0
- package/dist/esm/common.js +11 -9
- package/dist/esm/index.js +95 -18
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/models/llm_response.js +2 -0
- package/dist/esm/plugins/base_plugin.js +1 -1
- package/dist/esm/runner/runner.js +1 -1
- package/dist/esm/sessions/database_session_service.js +4 -1
- package/dist/esm/sessions/db/operations.js +31 -7
- package/dist/esm/tools/base_tool.js +3 -0
- package/dist/esm/tools/base_toolset.js +11 -2
- package/dist/esm/tools/exit_loop_tool.js +32 -0
- package/dist/esm/tools/mcp/mcp_toolset.js +9 -5
- package/dist/esm/utils/logger.js +51 -54
- package/dist/esm/version.js +1 -1
- package/dist/types/a2a/a2a_event.d.ts +122 -0
- package/dist/types/a2a/event_converter_utils.d.ts +20 -0
- package/dist/types/a2a/executor_context.d.ts +33 -0
- package/dist/types/a2a/metadata_converter_utils.d.ts +62 -0
- package/dist/types/a2a/part_converter_utils.d.ts +4 -3
- package/dist/types/agents/base_agent.d.ts +2 -2
- package/dist/types/{tools/tool_context.d.ts → agents/context.d.ts} +43 -8
- package/dist/types/agents/llm_agent.d.ts +8 -31
- package/dist/types/agents/processors/agent_transfer_llm_request_processor.d.ts +18 -0
- package/dist/types/agents/{base_llm_processor.d.ts → processors/base_llm_processor.d.ts} +4 -4
- package/dist/types/agents/processors/basic_llm_request_processor.d.ts +13 -0
- package/dist/types/agents/processors/code_execution_request_processor.d.ts +34 -0
- package/dist/types/agents/processors/content_request_processor.d.ts +13 -0
- package/dist/types/agents/processors/identity_llm_request_processor.d.ts +13 -0
- package/dist/types/agents/processors/instructions_llm_request_processor.d.ts +16 -0
- package/dist/types/agents/processors/request_confirmation_llm_request_processor.d.ts +13 -0
- package/dist/types/auth/credential_service/base_credential_service.d.ts +3 -3
- package/dist/types/auth/credential_service/in_memory_credential_service.d.ts +3 -3
- package/dist/types/common.d.ts +4 -4
- package/dist/types/models/llm_response.d.ts +5 -1
- package/dist/types/plugins/base_plugin.d.ts +12 -13
- package/dist/types/plugins/logging_plugin.d.ts +9 -10
- package/dist/types/plugins/plugin_manager.d.ts +9 -10
- package/dist/types/plugins/security_plugin.d.ts +2 -2
- package/dist/types/sessions/database_session_service.d.ts +2 -1
- package/dist/types/sessions/db/operations.d.ts +1 -1
- package/dist/types/tools/base_tool.d.ts +3 -3
- package/dist/types/tools/base_toolset.d.ts +12 -3
- package/dist/types/tools/exit_loop_tool.d.ts +24 -0
- package/dist/types/tools/forwarding_artifact_service.d.ts +2 -2
- package/dist/types/tools/function_tool.d.ts +2 -2
- package/dist/types/tools/mcp/mcp_toolset.d.ts +1 -1
- package/dist/types/utils/logger.d.ts +5 -9
- package/dist/types/version.d.ts +1 -1
- package/dist/web/a2a/a2a_event.js +243 -0
- package/dist/web/a2a/event_converter_utils.js +201 -0
- package/dist/web/a2a/executor_context.js +23 -0
- package/dist/web/a2a/metadata_converter_utils.js +107 -0
- package/dist/web/a2a/part_converter_utils.js +25 -21
- package/dist/web/agents/base_agent.js +3 -3
- package/dist/web/{tools/tool_context.js → agents/context.js} +66 -11
- package/dist/web/agents/functions.js +2 -2
- package/dist/web/agents/llm_agent.js +14 -661
- package/dist/web/agents/processors/agent_transfer_llm_request_processor.js +100 -0
- package/dist/web/agents/processors/basic_llm_request_processor.js +71 -0
- package/dist/web/agents/processors/code_execution_request_processor.js +365 -0
- package/dist/web/agents/processors/content_request_processor.js +56 -0
- package/dist/web/agents/processors/identity_llm_request_processor.js +41 -0
- package/dist/web/agents/processors/instructions_llm_request_processor.js +72 -0
- package/dist/web/agents/processors/request_confirmation_llm_request_processor.js +158 -0
- package/dist/web/common.js +11 -9
- package/dist/web/index.js +13 -18
- package/dist/web/index.js.map +7 -0
- package/dist/web/models/llm_response.js +2 -0
- package/dist/web/plugins/base_plugin.js +1 -1
- package/dist/web/runner/runner.js +1 -1
- package/dist/web/sessions/database_session_service.js +4 -1
- package/dist/web/sessions/db/operations.js +31 -7
- package/dist/web/tools/base_tool.js +3 -0
- package/dist/web/tools/base_toolset.js +11 -2
- package/dist/web/tools/exit_loop_tool.js +32 -0
- package/dist/web/tools/mcp/mcp_toolset.js +27 -5
- package/dist/web/utils/logger.js +51 -54
- package/dist/web/version.js +1 -1
- package/package.json +3 -2
- package/dist/cjs/agents/callback_context.js +0 -101
- package/dist/esm/agents/callback_context.js +0 -71
- package/dist/types/agents/callback_context.d.ts +0 -42
- package/dist/web/agents/callback_context.js +0 -71
- /package/dist/cjs/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
- /package/dist/esm/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
- /package/dist/web/agents/{base_llm_processor.js → processors/base_llm_processor.js} +0 -0
|
@@ -12,6 +12,7 @@ function createLlmResponse(response) {
|
|
|
12
12
|
return {
|
|
13
13
|
content: candidate.content,
|
|
14
14
|
groundingMetadata: candidate.groundingMetadata,
|
|
15
|
+
citationMetadata: candidate.citationMetadata,
|
|
15
16
|
usageMetadata,
|
|
16
17
|
finishReason: candidate.finishReason
|
|
17
18
|
};
|
|
@@ -20,6 +21,7 @@ function createLlmResponse(response) {
|
|
|
20
21
|
errorCode: candidate.finishReason,
|
|
21
22
|
errorMessage: candidate.finishMessage,
|
|
22
23
|
usageMetadata,
|
|
24
|
+
citationMetadata: candidate.citationMetadata,
|
|
23
25
|
finishReason: candidate.finishReason
|
|
24
26
|
};
|
|
25
27
|
}
|
|
@@ -198,7 +198,7 @@ class BasePlugin {
|
|
|
198
198
|
* Callback executed when a tool call encounters an error.
|
|
199
199
|
tool: BaseTool;
|
|
200
200
|
toolArgs: Record<string, unknown>;
|
|
201
|
-
toolContext:
|
|
201
|
+
toolContext: Context;
|
|
202
202
|
result: Record<string, unknown>;
|
|
203
203
|
}): Promise<Record<string, unknown> | undefined> {
|
|
204
204
|
return;
|
|
@@ -244,7 +244,7 @@ class Runner {
|
|
|
244
244
|
return rootAgent.findAgent(event.author) || rootAgent;
|
|
245
245
|
}
|
|
246
246
|
for (let i = session.events.length - 1; i >= 0; i--) {
|
|
247
|
-
logger.info("event:
|
|
247
|
+
logger.info("event:", JSON.stringify(session.events[i]));
|
|
248
248
|
const event2 = session.events[i];
|
|
249
249
|
if (event2.author === "user" || !event2.author) {
|
|
250
250
|
continue;
|
|
@@ -38,7 +38,7 @@ class DatabaseSessionService extends BaseSessionService {
|
|
|
38
38
|
super();
|
|
39
39
|
this.initialized = false;
|
|
40
40
|
if (typeof connectionStringOrOptions === "string") {
|
|
41
|
-
this.
|
|
41
|
+
this.connectionString = connectionStringOrOptions;
|
|
42
42
|
} else {
|
|
43
43
|
if (!connectionStringOrOptions.driver) {
|
|
44
44
|
throw new Error("Driver is required when passing options object.");
|
|
@@ -53,6 +53,9 @@ class DatabaseSessionService extends BaseSessionService {
|
|
|
53
53
|
if (this.initialized) {
|
|
54
54
|
return;
|
|
55
55
|
}
|
|
56
|
+
if (this.connectionString && (!this.options || !this.options.driver)) {
|
|
57
|
+
this.options = await getConnectionOptionsFromUri(this.connectionString);
|
|
58
|
+
}
|
|
56
59
|
this.orm = await MikroORM.init(this.options);
|
|
57
60
|
await ensureDatabaseCreated(this.orm);
|
|
58
61
|
await validateDatabaseSchemaVersion(this.orm);
|
|
@@ -1,31 +1,53 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
1
23
|
/**
|
|
2
24
|
* @license
|
|
3
25
|
* Copyright 2026 Google LLC
|
|
4
26
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
27
|
*/
|
|
6
28
|
import { MikroORM } from "@mikro-orm/core";
|
|
7
|
-
import { MariaDbDriver } from "@mikro-orm/mariadb";
|
|
8
|
-
import { MsSqlDriver } from "@mikro-orm/mssql";
|
|
9
|
-
import { MySqlDriver } from "@mikro-orm/mysql";
|
|
10
|
-
import { PostgreSqlDriver } from "@mikro-orm/postgresql";
|
|
11
|
-
import { SqliteDriver } from "@mikro-orm/sqlite";
|
|
12
29
|
import {
|
|
13
30
|
ENTITIES,
|
|
14
31
|
SCHEMA_VERSION_1_JSON,
|
|
15
32
|
SCHEMA_VERSION_KEY,
|
|
16
33
|
StorageMetadata
|
|
17
34
|
} from "./schema.js";
|
|
18
|
-
function getConnectionOptionsFromUri(uri) {
|
|
35
|
+
async function getConnectionOptionsFromUri(uri) {
|
|
19
36
|
let driver;
|
|
20
37
|
if (uri.startsWith("postgres://") || uri.startsWith("postgresql://")) {
|
|
38
|
+
const { PostgreSqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/postgresql"), 1));
|
|
21
39
|
driver = PostgreSqlDriver;
|
|
22
40
|
} else if (uri.startsWith("mysql://")) {
|
|
41
|
+
const { MySqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mysql"), 1));
|
|
23
42
|
driver = MySqlDriver;
|
|
24
43
|
} else if (uri.startsWith("mariadb://")) {
|
|
44
|
+
const { MariaDbDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mariadb"), 1));
|
|
25
45
|
driver = MariaDbDriver;
|
|
26
46
|
} else if (uri.startsWith("sqlite://")) {
|
|
47
|
+
const { SqliteDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/sqlite"), 1));
|
|
27
48
|
driver = SqliteDriver;
|
|
28
49
|
} else if (uri.startsWith("mssql://")) {
|
|
50
|
+
const { MsSqlDriver } = await Promise.resolve().then(() => __toESM(require("@mikro-orm/mssql"), 1));
|
|
29
51
|
driver = MsSqlDriver;
|
|
30
52
|
} else {
|
|
31
53
|
throw new Error(`Unsupported database URI: ${uri}`);
|
|
@@ -54,7 +76,9 @@ async function ensureDatabaseCreated(ormOrUrlOrOptions) {
|
|
|
54
76
|
if (ormOrUrlOrOptions instanceof MikroORM) {
|
|
55
77
|
orm = ormOrUrlOrOptions;
|
|
56
78
|
} else if (typeof ormOrUrlOrOptions === "string") {
|
|
57
|
-
orm = await MikroORM.init(
|
|
79
|
+
orm = await MikroORM.init(
|
|
80
|
+
await getConnectionOptionsFromUri(ormOrUrlOrOptions)
|
|
81
|
+
);
|
|
58
82
|
} else {
|
|
59
83
|
orm = await MikroORM.init(ormOrUrlOrOptions);
|
|
60
84
|
}
|
|
@@ -54,6 +54,9 @@ class BaseTool {
|
|
|
54
54
|
if (!functionDeclaration) {
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
|
+
if (this.name in llmRequest.toolsDict) {
|
|
58
|
+
throw new Error(`Duplicate tool name: ${this.name}`);
|
|
59
|
+
}
|
|
57
60
|
llmRequest.toolsDict[this.name] = this;
|
|
58
61
|
const tool = findToolWithFunctionDeclarations(llmRequest);
|
|
59
62
|
if (tool) {
|
|
@@ -3,9 +3,17 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
var _a;
|
|
7
|
+
const BASE_TOOLSET_SIGNATURE_SYMBOL = Symbol.for("google.adk.baseToolset");
|
|
8
|
+
function isBaseToolset(obj) {
|
|
9
|
+
return typeof obj === "object" && obj !== null && BASE_TOOLSET_SIGNATURE_SYMBOL in obj && obj[BASE_TOOLSET_SIGNATURE_SYMBOL] === true;
|
|
10
|
+
}
|
|
11
|
+
_a = BASE_TOOLSET_SIGNATURE_SYMBOL;
|
|
6
12
|
class BaseToolset {
|
|
7
|
-
constructor(toolFilter) {
|
|
13
|
+
constructor(toolFilter, prefix) {
|
|
8
14
|
this.toolFilter = toolFilter;
|
|
15
|
+
this.prefix = prefix;
|
|
16
|
+
this[_a] = true;
|
|
9
17
|
}
|
|
10
18
|
/**
|
|
11
19
|
* Returns whether the tool should be exposed to LLM.
|
|
@@ -42,5 +50,6 @@ class BaseToolset {
|
|
|
42
50
|
}
|
|
43
51
|
}
|
|
44
52
|
export {
|
|
45
|
-
BaseToolset
|
|
53
|
+
BaseToolset,
|
|
54
|
+
isBaseToolset
|
|
46
55
|
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { BaseTool } from "./base_tool.js";
|
|
7
|
+
class ExitLoopTool extends BaseTool {
|
|
8
|
+
constructor() {
|
|
9
|
+
super({
|
|
10
|
+
name: "exit_loop",
|
|
11
|
+
description: "Exits the loop.\n\nCall this function only when you are instructed to do so."
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
_getDeclaration() {
|
|
15
|
+
return {
|
|
16
|
+
name: this.name,
|
|
17
|
+
description: this.description
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
async runAsync({
|
|
21
|
+
toolContext
|
|
22
|
+
}) {
|
|
23
|
+
toolContext.actions.escalate = true;
|
|
24
|
+
toolContext.actions.skipSummarization = true;
|
|
25
|
+
return "";
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const EXIT_LOOP = new ExitLoopTool();
|
|
29
|
+
export {
|
|
30
|
+
EXIT_LOOP,
|
|
31
|
+
ExitLoopTool
|
|
32
|
+
};
|
|
@@ -8,8 +8,8 @@ import { BaseToolset } from "../base_toolset.js";
|
|
|
8
8
|
import { MCPSessionManager } from "./mcp_session_manager.js";
|
|
9
9
|
import { MCPTool } from "./mcp_tool.js";
|
|
10
10
|
class MCPToolset extends BaseToolset {
|
|
11
|
-
constructor(connectionParams, toolFilter = []) {
|
|
12
|
-
super(toolFilter);
|
|
11
|
+
constructor(connectionParams, toolFilter = [], prefix) {
|
|
12
|
+
super(toolFilter, prefix);
|
|
13
13
|
this.mcpSessionManager = new MCPSessionManager(connectionParams);
|
|
14
14
|
}
|
|
15
15
|
async getTools() {
|
|
@@ -19,9 +19,13 @@ class MCPToolset extends BaseToolset {
|
|
|
19
19
|
for (const tool of listResult.tools) {
|
|
20
20
|
logger.debug(`tool: ${tool.name}`);
|
|
21
21
|
}
|
|
22
|
-
return listResult.tools.map(
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
return listResult.tools.map((tool) => {
|
|
23
|
+
const toolWithPrefix = {
|
|
24
|
+
...tool,
|
|
25
|
+
name: this.prefix ? `${this.prefix}_${tool.name}` : tool.name
|
|
26
|
+
};
|
|
27
|
+
return new MCPTool(toolWithPrefix, this.mcpSessionManager);
|
|
28
|
+
});
|
|
25
29
|
}
|
|
26
30
|
async close() {
|
|
27
31
|
}
|
package/dist/esm/utils/logger.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import * as winston from "winston";
|
|
6
7
|
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
7
8
|
LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
|
|
8
9
|
LogLevel2[LogLevel2["INFO"] = 1] = "INFO";
|
|
@@ -10,58 +11,68 @@ var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
|
10
11
|
LogLevel2[LogLevel2["ERROR"] = 3] = "ERROR";
|
|
11
12
|
return LogLevel2;
|
|
12
13
|
})(LogLevel || {});
|
|
13
|
-
let logLevel = 1 /* INFO */;
|
|
14
|
-
function setLogLevel(level) {
|
|
15
|
-
logLevel = level;
|
|
16
|
-
}
|
|
17
14
|
class SimpleLogger {
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
constructor() {
|
|
16
|
+
this.logLevel = 1 /* INFO */;
|
|
17
|
+
this.logger = winston.createLogger({
|
|
18
|
+
levels: {
|
|
19
|
+
"debug": 0 /* DEBUG */,
|
|
20
|
+
"info": 1 /* INFO */,
|
|
21
|
+
"warn": 2 /* WARN */,
|
|
22
|
+
"error": 3 /* ERROR */
|
|
23
|
+
},
|
|
24
|
+
format: winston.format.combine(
|
|
25
|
+
winston.format.label({ label: "ADK" }),
|
|
26
|
+
winston.format((info) => {
|
|
27
|
+
info.level = info.level.toUpperCase();
|
|
28
|
+
return info;
|
|
29
|
+
})(),
|
|
30
|
+
winston.format.colorize(),
|
|
31
|
+
winston.format.timestamp(),
|
|
32
|
+
winston.format.printf((info) => {
|
|
33
|
+
return `${info.level}: [${info.label}] ${info.timestamp} ${info.message}`;
|
|
34
|
+
})
|
|
35
|
+
),
|
|
36
|
+
transports: [new winston.transports.Console()]
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
setLogLevel(level) {
|
|
40
|
+
this.logLevel = level;
|
|
41
|
+
}
|
|
42
|
+
log(level, ...messages) {
|
|
43
|
+
if (this.logLevel > level) {
|
|
20
44
|
return;
|
|
21
45
|
}
|
|
22
|
-
|
|
23
|
-
case 0 /* DEBUG */:
|
|
24
|
-
this.debug(...args);
|
|
25
|
-
break;
|
|
26
|
-
case 1 /* INFO */:
|
|
27
|
-
this.info(...args);
|
|
28
|
-
break;
|
|
29
|
-
case 2 /* WARN */:
|
|
30
|
-
this.warn(...args);
|
|
31
|
-
break;
|
|
32
|
-
case 3 /* ERROR */:
|
|
33
|
-
this.error(...args);
|
|
34
|
-
break;
|
|
35
|
-
default:
|
|
36
|
-
throw new Error(`Unsupported log level: ${level}`);
|
|
37
|
-
}
|
|
46
|
+
this.logger.log(level.toString(), messages.join(" "));
|
|
38
47
|
}
|
|
39
|
-
debug(...
|
|
40
|
-
if (logLevel > 0 /* DEBUG */) {
|
|
48
|
+
debug(...messages) {
|
|
49
|
+
if (this.logLevel > 0 /* DEBUG */) {
|
|
41
50
|
return;
|
|
42
51
|
}
|
|
43
|
-
|
|
52
|
+
this.logger.debug(messages.join(" "));
|
|
44
53
|
}
|
|
45
|
-
info(...
|
|
46
|
-
if (logLevel > 1 /* INFO */) {
|
|
54
|
+
info(...messages) {
|
|
55
|
+
if (this.logLevel > 1 /* INFO */) {
|
|
47
56
|
return;
|
|
48
57
|
}
|
|
49
|
-
|
|
58
|
+
this.logger.info(messages.join(" "));
|
|
50
59
|
}
|
|
51
|
-
warn(...
|
|
52
|
-
if (logLevel > 2 /* WARN */) {
|
|
60
|
+
warn(...messages) {
|
|
61
|
+
if (this.logLevel > 2 /* WARN */) {
|
|
53
62
|
return;
|
|
54
63
|
}
|
|
55
|
-
|
|
64
|
+
this.logger.warn(messages.join(" "));
|
|
56
65
|
}
|
|
57
|
-
error(...
|
|
58
|
-
if (logLevel > 3 /* ERROR */) {
|
|
66
|
+
error(...messages) {
|
|
67
|
+
if (this.logLevel > 3 /* ERROR */) {
|
|
59
68
|
return;
|
|
60
69
|
}
|
|
61
|
-
|
|
70
|
+
this.logger.error(messages.join(" "));
|
|
62
71
|
}
|
|
63
72
|
}
|
|
64
73
|
class NoOpLogger {
|
|
74
|
+
setLogLevel(_level) {
|
|
75
|
+
}
|
|
65
76
|
log(_level, ..._args) {
|
|
66
77
|
}
|
|
67
78
|
debug(..._args) {
|
|
@@ -73,26 +84,6 @@ class NoOpLogger {
|
|
|
73
84
|
error(..._args) {
|
|
74
85
|
}
|
|
75
86
|
}
|
|
76
|
-
const LOG_LEVEL_STR = {
|
|
77
|
-
[0 /* DEBUG */]: "DEBUG",
|
|
78
|
-
[1 /* INFO */]: "INFO",
|
|
79
|
-
[2 /* WARN */]: "WARN",
|
|
80
|
-
[3 /* ERROR */]: "ERROR"
|
|
81
|
-
};
|
|
82
|
-
const CONSOLE_COLOR_MAP = {
|
|
83
|
-
[0 /* DEBUG */]: "\x1B[34m",
|
|
84
|
-
// Blue
|
|
85
|
-
[1 /* INFO */]: "\x1B[32m",
|
|
86
|
-
// Green
|
|
87
|
-
[2 /* WARN */]: "\x1B[33m",
|
|
88
|
-
// Yellow
|
|
89
|
-
[3 /* ERROR */]: "\x1B[31m"
|
|
90
|
-
// Red
|
|
91
|
-
};
|
|
92
|
-
const RESET_COLOR = "\x1B[0m";
|
|
93
|
-
function getColoredPrefix(level) {
|
|
94
|
-
return `${CONSOLE_COLOR_MAP[level]}[ADK ${LOG_LEVEL_STR[level]}]:${RESET_COLOR}`;
|
|
95
|
-
}
|
|
96
87
|
let currentLogger = new SimpleLogger();
|
|
97
88
|
function setLogger(customLogger) {
|
|
98
89
|
currentLogger = customLogger != null ? customLogger : new NoOpLogger();
|
|
@@ -103,7 +94,13 @@ function getLogger() {
|
|
|
103
94
|
function resetLogger() {
|
|
104
95
|
currentLogger = new SimpleLogger();
|
|
105
96
|
}
|
|
97
|
+
function setLogLevel(level) {
|
|
98
|
+
logger.setLogLevel(level);
|
|
99
|
+
}
|
|
106
100
|
const logger = {
|
|
101
|
+
setLogLevel(level) {
|
|
102
|
+
currentLogger.setLogLevel(level);
|
|
103
|
+
},
|
|
107
104
|
log(level, ...args) {
|
|
108
105
|
currentLogger.log(level, ...args);
|
|
109
106
|
},
|
package/dist/esm/version.js
CHANGED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Part as A2APart, Message, Task, TaskArtifactUpdateEvent, TaskStatusUpdateEvent } from '@a2a-js/sdk';
|
|
7
|
+
/**
|
|
8
|
+
* Message roles.
|
|
9
|
+
*/
|
|
10
|
+
export declare enum MessageRole {
|
|
11
|
+
USER = "user",
|
|
12
|
+
AGENT = "agent"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A2A event.
|
|
16
|
+
*/
|
|
17
|
+
export type A2AEvent = Task | Message | TaskStatusUpdateEvent | TaskArtifactUpdateEvent;
|
|
18
|
+
/**
|
|
19
|
+
* Checks if the event is an A2A TaskStatusUpdateEvent.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isTaskStatusUpdateEvent(event: unknown): event is TaskStatusUpdateEvent;
|
|
22
|
+
/**
|
|
23
|
+
* Checks if the event is an A2A TaskArtifactUpdateEvent.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isTaskArtifactUpdateEvent(event: unknown): event is TaskArtifactUpdateEvent;
|
|
26
|
+
/**
|
|
27
|
+
* Checks if the event is an A2A Message.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isMessage(event: unknown): event is Message;
|
|
30
|
+
/**
|
|
31
|
+
* Checks if the event is an A2A Task.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isTask(event: unknown): event is Task;
|
|
34
|
+
/**
|
|
35
|
+
* Gets the metadata from an A2A event.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getEventMetadata(event: A2AEvent): Record<string, unknown>;
|
|
38
|
+
/**
|
|
39
|
+
* Checks if the event is a failed task status update event.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isFailedTaskStatusUpdateEvent(event: unknown): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Checks if the event is a terminal task status update event.
|
|
44
|
+
*/
|
|
45
|
+
export declare function isTerminalTaskStatusUpdateEvent(event: unknown): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Checks if the event is an input required task status update event.
|
|
48
|
+
*/
|
|
49
|
+
export declare function isInputRequiredTaskStatusUpdateEvent(event: unknown): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Gets the error message from a failed task status update event.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getFailedTaskStatusUpdateEventError(event: TaskStatusUpdateEvent | Task): string | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Creates a task submitted event.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createTaskSubmittedEvent({ taskId, contextId, message, }: {
|
|
58
|
+
taskId: string;
|
|
59
|
+
contextId: string;
|
|
60
|
+
message: Message;
|
|
61
|
+
}): TaskStatusUpdateEvent;
|
|
62
|
+
/**
|
|
63
|
+
* Creates a task with submitted status.
|
|
64
|
+
*/
|
|
65
|
+
export declare function createTask({ contextId, message, taskId, }: {
|
|
66
|
+
taskId: string;
|
|
67
|
+
contextId: string;
|
|
68
|
+
message: Message;
|
|
69
|
+
}): Task;
|
|
70
|
+
/**
|
|
71
|
+
* Creates a task working event.
|
|
72
|
+
*/
|
|
73
|
+
export declare function createTaskWorkingEvent({ taskId, contextId, message, }: {
|
|
74
|
+
taskId: string;
|
|
75
|
+
contextId: string;
|
|
76
|
+
message: Message;
|
|
77
|
+
}): TaskStatusUpdateEvent;
|
|
78
|
+
/**
|
|
79
|
+
* Creates a task completed event.
|
|
80
|
+
*/
|
|
81
|
+
export declare function createTaskCompletedEvent({ taskId, contextId, metadata, }: {
|
|
82
|
+
taskId: string;
|
|
83
|
+
contextId: string;
|
|
84
|
+
metadata?: Record<string, unknown>;
|
|
85
|
+
}): TaskStatusUpdateEvent;
|
|
86
|
+
/**
|
|
87
|
+
* Creates an artifact update event.
|
|
88
|
+
*/
|
|
89
|
+
export declare function createTaskArtifactUpdateEvent({ taskId, contextId, artifactId, parts, metadata, append, lastChunk, }: {
|
|
90
|
+
taskId: string;
|
|
91
|
+
contextId: string;
|
|
92
|
+
artifactId?: string;
|
|
93
|
+
parts?: A2APart[];
|
|
94
|
+
metadata?: Record<string, unknown>;
|
|
95
|
+
append?: boolean;
|
|
96
|
+
lastChunk?: boolean;
|
|
97
|
+
}): TaskArtifactUpdateEvent;
|
|
98
|
+
/**
|
|
99
|
+
* Creates an error message for task execution failure.
|
|
100
|
+
*/
|
|
101
|
+
export declare function createTaskFailedEvent({ taskId, contextId, error, metadata, }: {
|
|
102
|
+
taskId: string;
|
|
103
|
+
contextId: string;
|
|
104
|
+
error: Error;
|
|
105
|
+
metadata?: Record<string, unknown>;
|
|
106
|
+
}): TaskStatusUpdateEvent;
|
|
107
|
+
/**
|
|
108
|
+
* Creates an input required event.
|
|
109
|
+
*/
|
|
110
|
+
export declare function createTaskInputRequiredEvent({ taskId, contextId, parts, }: {
|
|
111
|
+
taskId: string;
|
|
112
|
+
contextId: string;
|
|
113
|
+
parts: A2APart[];
|
|
114
|
+
}): TaskStatusUpdateEvent;
|
|
115
|
+
/**
|
|
116
|
+
* Creates an error message for missing input for a function call.
|
|
117
|
+
*/
|
|
118
|
+
export declare function createInputMissingErrorEvent({ taskId, contextId, parts, }: {
|
|
119
|
+
parts: A2APart[];
|
|
120
|
+
taskId: string;
|
|
121
|
+
contextId: string;
|
|
122
|
+
}): TaskStatusUpdateEvent;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Message } from '@a2a-js/sdk';
|
|
7
|
+
import { Event as AdkEvent } from '../events/event.js';
|
|
8
|
+
import { A2AEvent } from './a2a_event.js';
|
|
9
|
+
/**
|
|
10
|
+
* Converts a session Event to an A2A Message.
|
|
11
|
+
*/
|
|
12
|
+
export declare function toA2AMessage(event: AdkEvent, { appName, userId, sessionId, }: {
|
|
13
|
+
appName: string;
|
|
14
|
+
userId: string;
|
|
15
|
+
sessionId: string;
|
|
16
|
+
}): Message;
|
|
17
|
+
/**
|
|
18
|
+
* Converts an A2A Event to a Session Event.
|
|
19
|
+
*/
|
|
20
|
+
export declare function toAdkEvent(event: A2AEvent, invocationId: string, agentName: string): AdkEvent | undefined;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { RequestContext } from '@a2a-js/sdk/server';
|
|
7
|
+
import { Content } from '@google/genai';
|
|
8
|
+
import { Event } from '../events/event.js';
|
|
9
|
+
import { Session } from '../sessions/session.js';
|
|
10
|
+
/**
|
|
11
|
+
* The A2A Agent Executor context.
|
|
12
|
+
*/
|
|
13
|
+
export interface ExecutorContext {
|
|
14
|
+
userId: string;
|
|
15
|
+
sessionId: string;
|
|
16
|
+
agentName: string;
|
|
17
|
+
readonlyState: Record<string, unknown>;
|
|
18
|
+
events: Event[];
|
|
19
|
+
userContent: Content;
|
|
20
|
+
requestContext: RequestContext;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Creates an A2A Agent Executor context from the given parameters.
|
|
24
|
+
* @param session The session.
|
|
25
|
+
* @param userContent The content of the user.
|
|
26
|
+
* @param requestContext The request context.
|
|
27
|
+
* @returns The A2A Agent Executor context.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createExecutorContext({ session, userContent, requestContext, }: {
|
|
30
|
+
session: Session;
|
|
31
|
+
userContent: Content;
|
|
32
|
+
requestContext: RequestContext;
|
|
33
|
+
}): ExecutorContext;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Event as AdkEvent } from '../events/event.js';
|
|
7
|
+
import { EventActions as AdkEventActions } from '../events/event_actions.js';
|
|
8
|
+
import { A2AEvent } from './a2a_event.js';
|
|
9
|
+
/**
|
|
10
|
+
* Keys for metadata that will be stored in A2A message metadata and related to ADK events.
|
|
11
|
+
*/
|
|
12
|
+
export declare enum A2AMetadataKeys {
|
|
13
|
+
APP_NAME = "adk_app_name",
|
|
14
|
+
USER_ID = "adk_user_id",
|
|
15
|
+
SESSION_ID = "adk_session_id",
|
|
16
|
+
INVOCATION_ID = "adk_invocation_id",
|
|
17
|
+
AUTHOR = "adk_author",
|
|
18
|
+
BRANCH = "adk_branch",
|
|
19
|
+
DATA_PART_TYPE = "adk_type",
|
|
20
|
+
PARTIAL = "adk_partial",
|
|
21
|
+
ESCALATE = "adk_escalate",
|
|
22
|
+
TRANSFER_TO_AGENT = "adk_transfer_to_agent",
|
|
23
|
+
IS_LONG_RUNNING = "adk_is_long_running",
|
|
24
|
+
THOUGHT = "adk_thought",
|
|
25
|
+
ERROR_CODE = "adk_error_code",
|
|
26
|
+
ERROR_MESSAGE = "adk_error_message",
|
|
27
|
+
CITATION_METADATA = "adk_citation_metadata",
|
|
28
|
+
GROUNDING_METADATA = "adk_grounding_metadata",
|
|
29
|
+
USAGE_METADATA = "adk_usage_metadata",
|
|
30
|
+
CUSTOM_METADATA = "adk_custom_metadata"
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Keys for metadata that will be stored in ADK event metadata and related to A2A messages.
|
|
34
|
+
*/
|
|
35
|
+
export declare enum AdkMetadataKeys {
|
|
36
|
+
TASK_ID = "a2a:task_id",
|
|
37
|
+
CONTEXT_ID = "a2a:context_id"
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates ADK Event metadata from an A2A Event.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getAdkEventMetadata(a2aEvent: A2AEvent): Record<string, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* Creates A2A Event metadata from an ADK Event.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getA2AEventMetadata(adkEvent: AdkEvent, { appName, userId, sessionId, }: {
|
|
47
|
+
appName: string;
|
|
48
|
+
userId: string;
|
|
49
|
+
sessionId: string;
|
|
50
|
+
}): Record<string, unknown>;
|
|
51
|
+
/**
|
|
52
|
+
* Creates A2A Session metadata from ADK Event invocation metadata.
|
|
53
|
+
*/
|
|
54
|
+
export declare function getA2ASessionMetadata({ appName, userId, sessionId, }: {
|
|
55
|
+
appName: string;
|
|
56
|
+
userId: string;
|
|
57
|
+
sessionId: string;
|
|
58
|
+
}): Record<string, unknown>;
|
|
59
|
+
/**
|
|
60
|
+
* Creates A2A Event metadata from ADK Event actions.
|
|
61
|
+
*/
|
|
62
|
+
export declare function getA2AEventMetadataFromActions(actions: AdkEventActions): Record<string, unknown>;
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* Copyright 2026 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { DataPart as A2ADataPart, FilePart as A2AFilePart, Part as A2APart, TextPart as A2ATextPart } from '@a2a-js/sdk';
|
|
7
|
-
import { Part as GenAIPart } from '@google/genai';
|
|
6
|
+
import { DataPart as A2ADataPart, FilePart as A2AFilePart, Part as A2APart, TextPart as A2ATextPart, Message } from '@a2a-js/sdk';
|
|
7
|
+
import { Content as GenAIContent, Part as GenAIPart } from '@google/genai';
|
|
8
8
|
/**
|
|
9
9
|
* Converts GenAI Parts to A2A Parts.
|
|
10
10
|
*/
|
|
11
|
-
export declare function toA2AParts(parts
|
|
11
|
+
export declare function toA2AParts(parts?: GenAIPart[], longRunningToolIDs?: string[]): A2APart[];
|
|
12
12
|
/**
|
|
13
13
|
* Converts a GenAI Part to an A2A Part.
|
|
14
14
|
*/
|
|
@@ -25,6 +25,7 @@ export declare function toA2AFilePart(part: GenAIPart): A2APart;
|
|
|
25
25
|
* Converts a GenAI Data Part to an A2A Data Part.
|
|
26
26
|
*/
|
|
27
27
|
export declare function toA2ADataPart(part: GenAIPart, longRunningToolIDs?: string[]): A2APart;
|
|
28
|
+
export declare function toGenAIContent(a2aMessage: Message): GenAIContent;
|
|
28
29
|
/**
|
|
29
30
|
* Converts an A2A Part to a GenAI Part.
|
|
30
31
|
*/
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { Content } from '@google/genai';
|
|
7
7
|
import { Event } from '../events/event.js';
|
|
8
|
-
import {
|
|
8
|
+
import { Context } from './context.js';
|
|
9
9
|
import { InvocationContext } from './invocation_context.js';
|
|
10
10
|
/**
|
|
11
11
|
* A single callback function for an agent.
|
|
12
12
|
*/
|
|
13
|
-
export type SingleAgentCallback = (context:
|
|
13
|
+
export type SingleAgentCallback = (context: Context) => Promise<Content | undefined> | (Content | undefined);
|
|
14
14
|
/**
|
|
15
15
|
* Type for before agent callbacks, which can be a single callback or
|
|
16
16
|
* an array of callbacks.
|