@microsoft/teams.a2a 2.0.0-preview.8 → 2.0.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.
Files changed (42) hide show
  1. package/dist/chat-prompt/plugin.d.ts +26 -14
  2. package/dist/chat-prompt/plugin.js +182 -115
  3. package/dist/chat-prompt/types.d.ts +43 -35
  4. package/dist/index.d.ts +0 -7
  5. package/dist/index.js +1 -31
  6. package/dist/server/plugin.d.ts +27 -24
  7. package/dist/server/plugin.js +70 -86
  8. package/package.json +8 -6
  9. package/dist/client/agent-client.d.ts +0 -58
  10. package/dist/client/agent-client.js +0 -177
  11. package/dist/client/agent-manager.d.ts +0 -57
  12. package/dist/client/agent-manager.js +0 -136
  13. package/dist/client/agent-task-store.d.ts +0 -25
  14. package/dist/client/agent-task-store.js +0 -47
  15. package/dist/common/schema.d.ts +0 -728
  16. package/dist/common/schema.js +0 -26
  17. package/dist/common/type-utils.d.ts +0 -11
  18. package/dist/common/type-utils.js +0 -3
  19. package/dist/common/uuid.d.ts +0 -1
  20. package/dist/common/uuid.js +0 -12
  21. package/dist/server/middleware/isTaskRequest.d.ts +0 -2
  22. package/dist/server/middleware/isTaskRequest.js +0 -32
  23. package/dist/server/plugin.on-get-request.d.ts +0 -3
  24. package/dist/server/plugin.on-get-request.js +0 -17
  25. package/dist/server/plugin.on-send-request.d.ts +0 -9
  26. package/dist/server/plugin.on-send-request.js +0 -107
  27. package/dist/server/serverUtils.d.ts +0 -13
  28. package/dist/server/serverUtils.js +0 -65
  29. package/dist/server/tasks/task-manager.d.ts +0 -22
  30. package/dist/server/tasks/task-manager.js +0 -205
  31. package/dist/server/tasks/task-store.d.ts +0 -8
  32. package/dist/server/tasks/task-store.js +0 -18
  33. package/dist/server/tasks/task-utilities.d.ts +0 -27
  34. package/dist/server/tasks/task-utilities.js +0 -139
  35. package/dist/server/tasks/task-utils.d.ts +0 -22
  36. package/dist/server/tasks/task-utils.js +0 -38
  37. package/dist/server/types/a2a-error.d.ts +0 -23
  38. package/dist/server/types/a2a-error.js +0 -95
  39. package/dist/server/types/a2a-types.d.ts +0 -56
  40. package/dist/server/types/a2a-types.js +0 -3
  41. package/dist/server/types/event-types.d.ts +0 -24
  42. package/dist/server/types/event-types.js +0 -3
@@ -1,15 +1,13 @@
1
+ import { AgentCard, Message, Task } from '@a2a-js/sdk';
2
+ import { A2ARequestHandler, AgentExecutor, ExecutionEventBus, RequestContext, TaskStore } from '@a2a-js/sdk/server';
3
+ import { RequestHandler } from 'express';
1
4
  import { EmitPluginEvent, HttpPlugin, IPlugin } from '@microsoft/teams.apps';
2
- import { ILogger, IStorage } from '@microsoft/teams.common';
3
- import { AgentManager, AgentManagerOptions } from '../client/agent-manager';
4
- import * as schema from '../common/schema';
5
- import { TaskManager } from './tasks/task-manager';
6
- import { TaskStore } from './tasks/task-store';
7
- import { A2AEvents } from './types/event-types';
5
+ import { ILogger } from '@microsoft/teams.common';
8
6
  interface IA2APluginOptions {
9
7
  /**
10
8
  * The agent card to be used for the A2A plugin.
11
9
  */
12
- agentCard: schema.AgentCard;
10
+ agentCard: AgentCard;
13
11
  /**
14
12
  * Path to the A2A server
15
13
  * @default '/a2a'
@@ -21,29 +19,34 @@ interface IA2APluginOptions {
21
19
  */
22
20
  taskStore?: TaskStore;
23
21
  /**
24
- * The agent manager options that can be used to configure the agent manager.
25
- * @default {}
26
- */
27
- managerOptions?: AgentManagerOptions;
22
+ * For a completely custom executor, you may provide your own executor that will
23
+ * get executed whenever the a2a agent is InMemoryTaskStore
24
+ */
25
+ agentExecutor?: AgentExecutor;
28
26
  }
27
+ export type Respond = (message: string | Message | Task) => Promise<void>;
28
+ export type A2AEvents = {
29
+ 'a2a:message': {
30
+ requestContext: RequestContext;
31
+ respond: Respond;
32
+ publishUpdate: ExecutionEventBus['publish'];
33
+ };
34
+ };
29
35
  export declare class A2APlugin implements IPlugin {
36
+ readonly log: ILogger;
30
37
  protected readonly emit: EmitPluginEvent<A2AEvents>;
31
38
  protected readonly _httpPlugin: HttpPlugin;
32
- protected readonly _storage: IStorage;
33
- protected readonly _logger: ILogger;
34
39
  __eventType: A2AEvents;
35
- protected _card: schema.AgentCard;
36
- protected _path: string;
37
- protected _taskManager: TaskManager;
38
- protected _taskStore: TaskStore;
39
- protected _clientManager: AgentManager;
40
- get clientManager(): AgentManager;
40
+ readonly card: AgentCard;
41
+ readonly path: string;
42
+ readonly taskStore: TaskStore;
43
+ readonly customExecutor?: AgentExecutor;
44
+ private readonly middlewares;
41
45
  constructor(options: IA2APluginOptions);
46
+ use(middleware: RequestHandler): void;
42
47
  onInit(): void;
43
- private onTaskRequest;
44
- private onSendRequest;
45
- private onGetTaskRequest;
46
- private onTaskGetRequest;
47
- private onTaskSendRequest;
48
+ _createLoggingMiddleware(): RequestHandler;
49
+ _setupExecutor(): AgentExecutor;
50
+ _setupRequestHandler(): A2ARequestHandler;
48
51
  }
49
52
  export {};
@@ -13,96 +13,88 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.A2APlugin = void 0;
16
- const express_1 = __importDefault(require("express"));
16
+ const node_crypto_1 = require("node:crypto");
17
+ const server_1 = require("@a2a-js/sdk/server");
18
+ const express_1 = require("@a2a-js/sdk/server/express");
19
+ const express_2 = __importDefault(require("express"));
17
20
  const teams_apps_1 = require("@microsoft/teams.apps");
18
- const agent_manager_1 = require("../client/agent-manager");
19
- const isTaskRequest_1 = require("./middleware/isTaskRequest");
20
- const plugin_on_get_request_1 = require("./plugin.on-get-request");
21
- const plugin_on_send_request_1 = require("./plugin.on-send-request");
22
- const task_manager_1 = require("./tasks/task-manager");
23
- const task_store_1 = require("./tasks/task-store");
24
- const a2a_error_1 = require("./types/a2a-error");
25
21
  let A2APlugin = class A2APlugin {
22
+ log;
26
23
  emit;
27
24
  _httpPlugin;
28
- _storage;
29
- _logger;
30
25
  __eventType;
31
- _card;
32
- _path;
33
- _taskManager;
34
- _taskStore;
35
- _clientManager;
36
- get clientManager() {
37
- return this._clientManager;
38
- }
26
+ card;
27
+ path;
28
+ taskStore;
29
+ customExecutor;
30
+ middlewares = [];
39
31
  constructor(options) {
40
- this._card = options.agentCard;
41
- if (this._card.capabilities.streaming) {
42
- this._logger.warn('A2APlugin does not support streaming yet, but the agent card indicates it does');
43
- }
44
- this._path = options.path || '/a2a';
45
- this._clientManager = new agent_manager_1.AgentManager(options.managerOptions);
46
- if (options.taskStore) {
47
- this._taskStore = options.taskStore;
48
- }
32
+ this.card = options.agentCard;
33
+ this.path = options.path ?? '/a2a';
34
+ this.taskStore = options.taskStore ?? new server_1.InMemoryTaskStore();
35
+ this.customExecutor = options.agentExecutor;
36
+ }
37
+ use(middleware) {
38
+ this.middlewares.push(middleware);
49
39
  }
50
40
  onInit() {
51
- this._taskStore = this._taskStore ?? new task_store_1.TaskStore(this._storage);
52
- this._taskManager = new task_manager_1.TaskManager(this._taskStore, this._logger);
53
- this._logger.info('A2APlugin agent card available at /.well-known/agent.json');
54
- this._httpPlugin.get('/.well-known/agent.json', (_req, res) => {
55
- res.json(this._card);
56
- });
57
- this._logger.info(`A2APlugin listening on ${this._path}`);
58
- this._httpPlugin.post(this._path, express_1.default.json(), (0, isTaskRequest_1.isTaskRequest)(), this.onTaskRequest.bind(this));
41
+ const a2aExpressApp = new express_1.A2AExpressApp(this._setupRequestHandler());
42
+ const expressApp = (0, express_2.default)();
43
+ // Combine logging middleware with custom middlewares
44
+ const allMiddlewares = [this._createLoggingMiddleware(), ...this.middlewares];
45
+ a2aExpressApp.setupRoutes(expressApp, this.path, allMiddlewares);
46
+ this._httpPlugin.use(expressApp);
59
47
  }
60
- async onTaskRequest(req, res, next) {
61
- const request = req.body;
62
- try {
63
- switch (request.method) {
64
- case 'tasks/send':
65
- return this.onTaskSendRequest(request, res, next);
66
- case 'tasks/sendSubscribe':
67
- throw new Error('sendSubscribe not implemented yet');
68
- case 'tasks/get':
69
- return this.onTaskGetRequest(request, res, next);
70
- case 'tasks/cancel':
71
- throw new Error('cancel not implemented yet');
72
- default:
73
- throw a2a_error_1.A2AError.methodNotFound(request.method);
74
- }
75
- }
76
- catch (err) {
77
- if (err instanceof a2a_error_1.A2AError) {
78
- err.taskId = request.id || undefined;
79
- }
80
- else {
81
- throw a2a_error_1.A2AError.internalError('internal error', err);
48
+ _createLoggingMiddleware() {
49
+ return (req, _res, next) => {
50
+ let logMessage = `A2A Request: ${req.method} ${req.url}`;
51
+ if (req.method === 'POST' && req.body) {
52
+ logMessage += ` - Body: ${JSON.stringify(req.body)}`;
82
53
  }
83
- next(err);
84
- }
54
+ this.log.debug(logMessage);
55
+ next();
56
+ };
85
57
  }
86
- onSendRequest = plugin_on_send_request_1.onSendRequest; // eslint-disable-line @typescript-eslint/member-ordering
87
- onGetTaskRequest = plugin_on_get_request_1.onGetTaskRequest; // eslint-disable-line @typescript-eslint/member-ordering
88
- async onTaskGetRequest(req, res, next) {
89
- await this.onGetTaskRequest(req, (result) => {
90
- res.json(result);
91
- if (result?.error) {
92
- next(result.error);
93
- }
94
- });
58
+ _setupExecutor() {
59
+ const executor = {
60
+ execute: async (requestContext, eventBus) => {
61
+ const ctx = {
62
+ requestContext,
63
+ respond: async (message) => {
64
+ let responseMessage;
65
+ if (typeof message === 'string') {
66
+ responseMessage = {
67
+ kind: 'message',
68
+ messageId: (0, node_crypto_1.randomUUID)(),
69
+ role: 'agent',
70
+ parts: [{ kind: 'text', text: message }],
71
+ // Associate the response with the incoming request's context.
72
+ contextId: requestContext.contextId,
73
+ };
74
+ }
75
+ else {
76
+ responseMessage = message;
77
+ }
78
+ eventBus.publish(responseMessage);
79
+ eventBus.finished();
80
+ },
81
+ publishUpdate: eventBus.publish.bind(eventBus)
82
+ };
83
+ this.emit('a2a:message', ctx);
84
+ },
85
+ cancelTask: async () => { }
86
+ };
87
+ return executor;
95
88
  }
96
- async onTaskSendRequest(req, res, next) {
97
- await this.onSendRequest(req, (result) => {
98
- res.json(result);
99
- if (result?.error) {
100
- next(result.error);
101
- }
102
- });
89
+ _setupRequestHandler() {
90
+ return new server_1.DefaultRequestHandler(this.card, this.taskStore, this.customExecutor ?? this._setupExecutor());
103
91
  }
104
92
  };
105
93
  exports.A2APlugin = A2APlugin;
94
+ __decorate([
95
+ (0, teams_apps_1.Logger)(),
96
+ __metadata("design:type", Object)
97
+ ], A2APlugin.prototype, "log", void 0);
106
98
  __decorate([
107
99
  (0, teams_apps_1.Event)('custom'),
108
100
  __metadata("design:type", Function)
@@ -111,20 +103,12 @@ __decorate([
111
103
  (0, teams_apps_1.Dependency)(),
112
104
  __metadata("design:type", teams_apps_1.HttpPlugin)
113
105
  ], A2APlugin.prototype, "_httpPlugin", void 0);
114
- __decorate([
115
- (0, teams_apps_1.Storage)(),
116
- __metadata("design:type", Object)
117
- ], A2APlugin.prototype, "_storage", void 0);
118
- __decorate([
119
- (0, teams_apps_1.Logger)(),
120
- __metadata("design:type", Object)
121
- ], A2APlugin.prototype, "_logger", void 0);
122
106
  exports.A2APlugin = A2APlugin = __decorate([
123
107
  (0, teams_apps_1.Plugin)({
124
108
  name: 'a2a',
125
- description: 'A2A Plugin',
126
- version: '1.0.0',
109
+ description: 'A2A Server Plugin',
110
+ version: '0.3.0'
127
111
  }),
128
112
  __metadata("design:paramtypes", [Object])
129
113
  ], A2APlugin);
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQThCO0FBRTlCLHNEQUF5SDtBQUd6SCwyREFBNEU7QUFHNUUsOERBQTJEO0FBQzNELG1FQUEyRDtBQUMzRCxxRUFBeUQ7QUFDekQsdURBQW1EO0FBQ25ELG1EQUErQztBQUMvQyxpREFBNkM7QUFpQ3RDLElBQU0sU0FBUyxHQUFmLE1BQU0sU0FBUztJQUVDLElBQUksQ0FBOEI7SUFHbEMsV0FBVyxDQUFjO0lBR3pCLFFBQVEsQ0FBWTtJQUdwQixPQUFPLENBQVc7SUFFckMsV0FBVyxDQUFhO0lBQ2QsS0FBSyxDQUFtQjtJQUN4QixLQUFLLENBQVM7SUFDZCxZQUFZLENBQWU7SUFDM0IsVUFBVSxDQUFhO0lBQ3ZCLGNBQWMsQ0FBZ0I7SUFDeEMsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWSxPQUEwQjtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSw0QkFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7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
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQXlDO0FBR3pDLCtDQUE4SjtBQUM5Six3REFBMkQ7QUFDM0Qsc0RBQWtEO0FBRWxELHNEQUFnSDtBQTJDekcsSUFBTSxTQUFTLEdBQWYsTUFBTSxTQUFTO0lBRUosR0FBRyxDQUFXO0lBR1gsSUFBSSxDQUE4QjtJQUdsQyxXQUFXLENBQWM7SUFDNUMsV0FBVyxDQUFhO0lBRVIsSUFBSSxDQUFZO0lBQ2hCLElBQUksQ0FBUztJQUNiLFNBQVMsQ0FBWTtJQUNyQixjQUFjLENBQWlCO0lBQzlCLFdBQVcsR0FBcUIsRUFBRSxDQUFDO0lBRXBELFlBQVksT0FBMEI7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksMEJBQWlCLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDOUMsQ0FBQztJQUVELEdBQUcsQ0FBQyxVQUEwQjtRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsTUFBTTtRQUNKLE1BQU0sYUFBYSxHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sVUFBVSxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFDO1FBRTdCLHFEQUFxRDtRQUNyRCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLEdBQUcsSUFBSSxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microsoft/teams.a2a",
3
- "version": "2.0.0-preview.8",
3
+ "version": "2.0.0",
4
4
  "license": "MIT",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -29,13 +29,15 @@
29
29
  "lint:fix": "npx eslint --fix"
30
30
  },
31
31
  "peerDependencies": {
32
- "@microsoft/teams.ai": "2.0.0-preview.8",
33
- "@microsoft/teams.apps": "2.0.0-preview.8",
34
- "@microsoft/teams.common": "2.0.0-preview.8"
32
+ "@a2a-js/sdk": "^0.3.4",
33
+ "@microsoft/teams.ai": "2.0.0",
34
+ "@microsoft/teams.apps": "2.0.0",
35
+ "@microsoft/teams.common": "2.0.0"
35
36
  },
36
37
  "devDependencies": {
37
- "@microsoft/teams.config": "2.0.0-preview.8",
38
+ "@microsoft/teams.config": "2.0.0",
38
39
  "@types/jest": "^29.5.12",
40
+ "@types/lodash.camelcase": "^4.3.9",
39
41
  "@types/node": "^22.0.2",
40
42
  "jest": "^29.7.0",
41
43
  "rimraf": "^6.0.1",
@@ -43,6 +45,6 @@
43
45
  "typescript": "^5.4.5"
44
46
  },
45
47
  "dependencies": {
46
- "camelcase": "^8.0.0"
48
+ "lodash.camelcase": "^4.3.0"
47
49
  }
48
50
  }
@@ -1,58 +0,0 @@
1
- import { ILogger } from '@microsoft/teams.common';
2
- import { type AgentCard, type Task, type TaskSendParams } from '../common/schema';
3
- /**
4
- * Options for constructing an A2AAgentClient.
5
- */
6
- export type A2AAgentClientOptions = {
7
- /**
8
- * The base URL of the A2A agent endpoint. The client will fetch the agent card from this URL if agentCard is not provided.
9
- */
10
- baseUrl: string;
11
- /**
12
- * The agent card object. If provided, the client will use this directly and will not fetch it from the network.
13
- */
14
- agentCard?: AgentCard;
15
- /**
16
- * Optional custom fetch implementation (e.g., for Node.js environments without global fetch). Defaults to global fetch.
17
- */
18
- fetchImpl?: typeof fetch;
19
- /**
20
- *
21
- */
22
- logger?: ILogger;
23
- };
24
- export declare class AgentCardNotFoundError extends Error {
25
- constructor(message: string);
26
- }
27
- /**
28
- * A2AAgentClient can be constructed with either a baseUrl (to fetch the agent card) or a direct AgentCard object.
29
- * Optionally, a custom fetch implementation can be provided.
30
- */
31
- export declare class AgentClient {
32
- private _agentCard;
33
- private _baseUrl;
34
- get baseUrl(): string;
35
- private _a2aUrl;
36
- get a2aUrl(): string | null;
37
- private _fetchImpl;
38
- private _logger;
39
- constructor(options: A2AAgentClientOptions);
40
- /**
41
- * Returns the agent card, fetching it if necessary.
42
- */
43
- agentCard(): Promise<AgentCard>;
44
- /**
45
- * Sends a task request to the agent (non-streaming).
46
- * @param params The parameters for the tasks/send method.
47
- * @returns A promise resolving to the Task object or null.
48
- */
49
- sendTask(params: TaskSendParams): Promise<Task | null>;
50
- /**
51
- * Internal helper to make JSON-RPC HTTP requests.
52
- */
53
- private _makeHttpRequest;
54
- /**
55
- * Handles standard JSON-RPC responses (non-streaming).
56
- */
57
- private _handleJsonResponse;
58
- }
@@ -1,177 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AgentClient = exports.AgentCardNotFoundError = void 0;
4
- const teams_common_1 = require("@microsoft/teams.common");
5
- const schema_1 = require("../common/schema");
6
- const uuid_1 = require("../common/uuid");
7
- /**
8
- * Error class for JSON-RPC errors, matching the old-client-impl behavior.
9
- */
10
- class RpcError extends Error {
11
- code;
12
- data;
13
- constructor(code, message, data) {
14
- super(message);
15
- this.name = 'RpcError';
16
- this.code = code;
17
- this.data = data;
18
- }
19
- }
20
- class AgentCardNotFoundError extends Error {
21
- constructor(message) {
22
- super(message);
23
- this.name = 'AgentCardNotFoundError';
24
- }
25
- }
26
- exports.AgentCardNotFoundError = AgentCardNotFoundError;
27
- /**
28
- * A2AAgentClient can be constructed with either a baseUrl (to fetch the agent card) or a direct AgentCard object.
29
- * Optionally, a custom fetch implementation can be provided.
30
- */
31
- class AgentClient {
32
- _agentCard;
33
- _baseUrl;
34
- get baseUrl() {
35
- return this._baseUrl;
36
- }
37
- _a2aUrl;
38
- get a2aUrl() {
39
- return this._a2aUrl;
40
- }
41
- _fetchImpl;
42
- _logger;
43
- constructor(options) {
44
- this._baseUrl = options.baseUrl;
45
- this._agentCard = options.agentCard ?? null;
46
- this._fetchImpl = options.fetchImpl ?? fetch;
47
- this._a2aUrl = this._agentCard?.url ?? null;
48
- this._logger = options.logger?.child('A2AAgentClient') ?? new teams_common_1.ConsoleLogger('A2AAgentClient');
49
- }
50
- /**
51
- * Returns the agent card, fetching it if necessary.
52
- */
53
- async agentCard() {
54
- if (this._agentCard) {
55
- return this._agentCard;
56
- }
57
- // Fetch from /.well-known/agent.json at the same origin as baseUrl
58
- const base = new URL(this._baseUrl).origin;
59
- const cardUrl = `${base}/.well-known/agent.json`;
60
- this._logger.debug(`Fetching agent card from ${cardUrl}`);
61
- try {
62
- const response = await this._fetchImpl(cardUrl, { method: 'GET', headers: { Accept: 'application/json' } });
63
- if (!response.ok) {
64
- this._logger.error(`Failed to fetch agent card: ${response.status} ${response.statusText}`);
65
- throw new AgentCardNotFoundError(`Failed to fetch agent card: ${response.status} ${response.statusText}`);
66
- }
67
- // TODO: validate using something like zod?
68
- const card = (await response.json());
69
- this._logger.debug(`Agent card fetched successfully from ${cardUrl}`, card);
70
- this._agentCard = card;
71
- this._a2aUrl = card.url;
72
- return card;
73
- }
74
- catch (error) {
75
- this._logger.error(`Failed to fetch agent card: ${error}`);
76
- throw new AgentCardNotFoundError(`Failed to fetch agent card: ${error}`);
77
- }
78
- }
79
- /**
80
- * Sends a task request to the agent (non-streaming).
81
- * @param params The parameters for the tasks/send method.
82
- * @returns A promise resolving to the Task object or null.
83
- */
84
- async sendTask(params) {
85
- const httpResponse = await this._makeHttpRequest('tasks/send', params);
86
- return this._handleJsonResponse(httpResponse, 'tasks/send');
87
- }
88
- /**
89
- * Internal helper to make JSON-RPC HTTP requests.
90
- */
91
- async _makeHttpRequest(method, params, acceptHeader = 'application/json') {
92
- if (!this._a2aUrl) {
93
- throw new Error('Agent URL is not set. Please call agentCard() to fetch the agent card.');
94
- }
95
- const requestId = (0, uuid_1.generateRequestId)();
96
- const requestBody = {
97
- jsonrpc: '2.0',
98
- id: requestId,
99
- method,
100
- params,
101
- };
102
- try {
103
- this._logger.debug(`Making JSON-RPC request to ${this._a2aUrl}:`, requestBody);
104
- const response = await this._fetchImpl(this._a2aUrl, {
105
- method: 'POST',
106
- headers: {
107
- 'Content-Type': 'application/json',
108
- Accept: acceptHeader,
109
- },
110
- body: JSON.stringify(requestBody),
111
- });
112
- return response;
113
- }
114
- catch (networkError) {
115
- this._logger.error('Network error while making JSON-RPC request:', networkError);
116
- throw new RpcError(schema_1.ErrorCodeInternalError, `Network error: ${networkError instanceof Error ? networkError.message : String(networkError)}`, networkError);
117
- }
118
- }
119
- /**
120
- * Handles standard JSON-RPC responses (non-streaming).
121
- */
122
- async _handleJsonResponse(response, expectedMethod) {
123
- // Return type is now the 'result' property of Res
124
- let responseBody = null;
125
- try {
126
- if (!response.ok) {
127
- this._logger.error(`HTTP error ${response.status}: ${response.statusText}`);
128
- // Attempt to read body even for non-ok responses for potential JSON errors
129
- responseBody = await response.text();
130
- let errorData = null;
131
- try {
132
- // Try parsing as JSON RPC Error response
133
- const parsedError = JSON.parse(responseBody);
134
- if (parsedError.error) {
135
- errorData = parsedError.error;
136
- throw new RpcError(errorData.code, errorData.message, errorData.data);
137
- }
138
- }
139
- catch (parseError) {
140
- // Ignore parsing error, fall through to generic HTTP error
141
- }
142
- // If not a JSON RPC error, throw generic HTTP error
143
- throw new Error(`HTTP error ${response.status}: ${response.statusText}${responseBody ? ` - ${responseBody}` : ''}`);
144
- }
145
- // Read and parse the successful JSON response
146
- responseBody = await response.text();
147
- // Parse as the specific JSONRPCResponse type Res
148
- const jsonResponse = JSON.parse(responseBody);
149
- // Basic validation of the JSON-RPC response structure
150
- if (typeof jsonResponse !== 'object' ||
151
- jsonResponse === null ||
152
- jsonResponse.jsonrpc !== '2.0') {
153
- throw new RpcError(schema_1.ErrorCodeInternalError, 'Invalid JSON-RPC response structure received from server.');
154
- }
155
- // Check for application-level errors within the JSON-RPC response
156
- if (jsonResponse.error) {
157
- throw new RpcError(jsonResponse.error.code, jsonResponse.error.message, jsonResponse.error.data);
158
- }
159
- // Optional: Validate response ID matches request ID if needed (requires passing request ID down)
160
- // Extract and return only the result payload
161
- return jsonResponse.result;
162
- }
163
- catch (error) {
164
- this._logger.error(`Error processing RPC response for method ${expectedMethod || 'unknown'}:`, error, responseBody ? `\nResponse Body: ${responseBody}` : '');
165
- // Re-throw RpcError instances directly, wrap others
166
- if (error instanceof RpcError) {
167
- throw error;
168
- }
169
- else {
170
- throw new RpcError(schema_1.ErrorCodeInternalError, // Use literal value for ErrorCodeInternalError
171
- `Failed to process response: ${error instanceof Error ? error.message : String(error)}`, error);
172
- }
173
- }
174
- }
175
- }
176
- exports.AgentClient = AgentClient;
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9hZ2VudC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMERBQWlFO0FBRWpFLDZDQUF5TjtBQUN6Tix5Q0FBbUQ7QUF3Qm5EOztHQUVHO0FBQ0gsTUFBTSxRQUFTLFNBQVEsS0FBSztJQUN4QixJQUFJLENBQVM7SUFDYixJQUFJLENBQVc7SUFDZixZQUFZLElBQVksRUFBRSxPQUFlLEVBQUUsSUFBYztRQUNyRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0NBQ0o7QUFFRCxNQUFhLHNCQUF1QixTQUFRLEtBQUs7SUFDN0MsWUFBWSxPQUFlO1FBQ3ZCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsd0JBQXdCLENBQUM7SUFDekMsQ0FBQztDQUNKO0FBTEQsd0RBS0M7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFdBQVc7SUFDWixVQUFVLENBQW1CO0lBRTdCLFFBQVEsQ0FBUztJQUN6QixJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVPLE9BQU8sQ0FBZ0I7SUFDL0IsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxVQUFVLENBQWU7SUFDekIsT0FBTyxDQUFVO0lBRXpCLFlBQVksT0FBOEI7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7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
@@ -1,57 +0,0 @@
1
- import { A2AAgentClientOptions } from './agent-client';
2
- import { IAgentTaskStoreFactory } from './agent-task-store';
3
- import type { AgentCard, Task, TaskSendParams } from '../common/schema';
4
- import type { TaskAndHistory } from '../server/types/a2a-types';
5
- export type AgentCardWithDetails = {
6
- key: string;
7
- url: string;
8
- card: AgentCard;
9
- };
10
- export type AgentManagerOptions = Pick<A2AAgentClientOptions, 'fetchImpl' | 'logger'> & {
11
- /**
12
- * Optional map of agent keys to their details.
13
- */
14
- agentCards?: Map<string, AgentCardWithDetails>;
15
- /**
16
- * Optional task store factory.
17
- */
18
- taskStoreFactory?: IAgentTaskStoreFactory;
19
- };
20
- export declare class AgentManager {
21
- private _clients;
22
- private _defaultOptions;
23
- private _logger;
24
- private _taskStoreFactory;
25
- constructor(options?: AgentManagerOptions);
26
- /**
27
- * Register a new agent with the manager.
28
- * @param key The unique key for the agent
29
- * @param baseUrl The base URL of the agent
30
- * @param agentCard Optional agent card. If not provided, it will be fetched when needed
31
- * @returns The client instance for this agent
32
- */
33
- use(key: string, baseUrl: string, agentCard?: AgentCard): AgentManager;
34
- /**
35
- * Send a task to an agent.
36
- * @param key The key of the agent
37
- * @param params The parameters for the task
38
- * @returns The task after it has been sent and received from the agent
39
- */
40
- sendTask(key: string, params: TaskSendParams): Promise<Task | null>;
41
- /**
42
- * Get the agent card for a given agent key, fetching it if necessary.
43
- * @param key The key of the agent
44
- * @param throwIfNotFound If true, throw an error if the agent card is not found
45
- * @returns The agent card
46
- */
47
- getAgentCard(key: string, throwIfNotFound?: boolean): Promise<AgentCard | null>;
48
- /**
49
- * Get all registered agent cards.
50
- * @param throwIfNotFound If true, throw an error if the agent card is not found. defaults to false.
51
- * @returns Array of AgentCardWithUrl
52
- */
53
- getAgentCards(throwIfNotFound?: boolean): Promise<(AgentCardWithDetails | null)[]>;
54
- getLatestTask(key: string): Promise<TaskAndHistory | null>;
55
- private getOrCreateClient;
56
- private saveTask;
57
- }