From 34e7e439d2d625e6749195623fe55389ff857e2a Mon Sep 17 00:00:00 2001 From: Kris Braun Date: Sun, 19 Oct 2025 19:12:31 -0400 Subject: [PATCH] Add id to Agents and Tools --- .changeset/bold-papers-stop.md | 5 +++ agents/chat/src/index.ts | 4 +- agents/events/src/index.ts | 38 ++++++++++--------- sdk/README.md | 8 ++-- sdk/cli/templates/AGENTS.template.md | 8 ++-- sdk/src/agent.ts | 18 +++++---- tools/google-calendar/src/google-calendar.ts | 4 +- tools/google-contacts/src/google-contacts.ts | 4 +- .../outlook-calendar/src/outlook-calendar.ts | 4 +- 9 files changed, 52 insertions(+), 41 deletions(-) create mode 100644 .changeset/bold-papers-stop.md diff --git a/.changeset/bold-papers-stop.md b/.changeset/bold-papers-stop.md new file mode 100644 index 0000000..2dafe0e --- /dev/null +++ b/.changeset/bold-papers-stop.md @@ -0,0 +1,5 @@ +--- +"@plotday/sdk": minor +--- + +Changed: BREAKING: Add agent id to Agent and Tool constructors diff --git a/agents/chat/src/index.ts b/agents/chat/src/index.ts index feae107..478d1a5 100644 --- a/agents/chat/src/index.ts +++ b/agents/chat/src/index.ts @@ -15,8 +15,8 @@ export default class extends Agent { private ai: AI; private plot: Plot; - constructor(protected tools: Tools) { - super(tools); + constructor(id: string, protected tools: Tools) { + super(id, tools); this.ai = tools.get(AI); this.plot = tools.get(Plot); } diff --git a/agents/events/src/index.ts b/agents/events/src/index.ts index 53a8a66..01736df 100644 --- a/agents/events/src/index.ts +++ b/agents/events/src/index.ts @@ -5,7 +5,7 @@ import { ActivityType, Agent, type Priority, - Tools, + type Tools, } from "@plotday/sdk"; import type { Calendar, @@ -13,9 +13,9 @@ import type { CalendarTool, SyncOptions, } from "@plotday/sdk/common/calendar"; +import { Plot } from "@plotday/sdk/tools/plot"; import { GoogleCalendar } from "@plotday/tool-google-calendar"; import { OutlookCalendar } from "@plotday/tool-outlook-calendar"; -import { Plot } from "@plotday/sdk/tools/plot"; type CalendarProvider = "google" | "outlook"; @@ -36,8 +36,8 @@ export default class extends Agent { private outlookCalendar: OutlookCalendar; private plot: Plot; - constructor(protected tools: Tools) { - super(tools); + constructor(id: string, protected tools: Tools) { + super(id, tools); this.googleCalendar = tools.get(GoogleCalendar); this.outlookCalendar = tools.get(OutlookCalendar); this.plot = tools.get(Plot); @@ -61,7 +61,7 @@ export default class extends Agent { private async addStoredAuth( provider: CalendarProvider, - authToken: string, + authToken: string ): Promise { const auths = await this.getStoredAuths(); const existingIndex = auths.findIndex((auth) => auth.provider === provider); @@ -76,7 +76,7 @@ export default class extends Agent { } private async getAuthToken( - provider: CalendarProvider, + provider: CalendarProvider ): Promise { const auths = await this.getStoredAuths(); const auth = auths.find((auth) => auth.provider === provider); @@ -98,10 +98,12 @@ export default class extends Agent { }); // Get auth links from both calendar tools - const googleAuthLink = - await this.googleCalendar.requestAuth(googleCallback); - const outlookAuthLink = - await this.outlookCalendar.requestAuth(outlookCallback); + const googleAuthLink = await this.googleCalendar.requestAuth( + googleCallback + ); + const outlookAuthLink = await this.outlookCalendar.requestAuth( + outlookCallback + ); // Create activity with both auth links const connectActivity = await this.plot.createActivity({ @@ -129,7 +131,7 @@ export default class extends Agent { async startSync( provider: CalendarProvider, calendarId: string, - options?: SyncOptions, + options?: SyncOptions ): Promise { const authToken = await this.getAuthToken(provider); if (!authToken) { @@ -149,7 +151,7 @@ export default class extends Agent { async stopSync( provider: CalendarProvider, - calendarId: string, + calendarId: string ): Promise { const authToken = await this.getAuthToken(provider); if (!authToken) { @@ -211,7 +213,7 @@ export default class extends Agent { await this.createCalendarSelectionActivity( provider, calendars, - authResult.authToken, + authResult.authToken ); } catch (error) { console.error(`Failed to fetch calendars for ${provider}:`, error); @@ -221,7 +223,7 @@ export default class extends Agent { private async createCalendarSelectionActivity( provider: CalendarProvider, calendars: Calendar[], - authToken: string, + authToken: string ): Promise { const links: ActivityLink[] = []; @@ -261,7 +263,7 @@ export default class extends Agent { async onCalendarSelected( _link: ActivityLink, - context: CalendarSelectionContext, + context: CalendarSelectionContext ): Promise { console.log("Calendar selectedwith context:", context); if (!context) { @@ -282,11 +284,11 @@ export default class extends Agent { await tool.startSync( context.authToken, context.calendarId, - eventCallback, + eventCallback ); console.log( - `Started syncing ${context.provider} calendar: ${context.calendarName}`, + `Started syncing ${context.provider} calendar: ${context.calendarName}` ); await this.plot.createActivity({ @@ -297,7 +299,7 @@ export default class extends Agent { } catch (error) { console.error( `Failed to start sync for calendar ${context.calendarName}:`, - error, + error ); } } diff --git a/sdk/README.md b/sdk/README.md index 9f39be4..2e7f591 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -32,8 +32,8 @@ import { Plot } from "@plotday/sdk/tools/plot"; export default class extends Agent { private plot: Plot; - constructor(tools: Tools) { - super(tools); + constructor(id: string, tools: Tools) { + super(id, tools); this.plot = tools.get(Plot); } @@ -100,8 +100,8 @@ Tools provide functionality to agents. They can be: Access tools via the `tools.get()` method in your agent constructor. Store, Run, and Callback methods are available directly on the Agent class: ```typescript -constructor(tools: Tools) { - super(tools); +constructor(id: string, tools: Tools) { + super(id, tools); this.plot = tools.get(Plot); this.googleCalendar = tools.get(GoogleCalendar); // Store, Run, and Callback methods are available directly: diff --git a/sdk/cli/templates/AGENTS.template.md b/sdk/cli/templates/AGENTS.template.md index 5c7eeac..8770660 100644 --- a/sdk/cli/templates/AGENTS.template.md +++ b/sdk/cli/templates/AGENTS.template.md @@ -26,8 +26,8 @@ import { Plot } from "@plotday/sdk/tools/plot"; export default class MyAgent extends Agent { private plot: Plot; - constructor(protected tools: Tools) { - super(tools); + constructor(id: string, protected tools: Tools) { + super(id, tools); this.plot = tools.get(Plot); // Store, Run, and Callback methods are available directly via this } @@ -51,8 +51,8 @@ export default class MyAgent extends Agent { All tools are accessed through the `tools` parameter in the constructor: ```typescript -constructor(protected tools: Tools) { - super(); +constructor(id: string, protected tools: Tools) { + super(id, tools); this.toolName = tools.get(ToolClass); } ``` diff --git a/sdk/src/agent.ts b/sdk/src/agent.ts index b9c47bc..f19d941 100644 --- a/sdk/src/agent.ts +++ b/sdk/src/agent.ts @@ -18,8 +18,8 @@ import type { * class FlatteringAgent extends Agent { * private plot: Plot; * - * constructor(tools: Tools) { - * super(tools); + * constructor(id: string, tools: Tools) { + * super(id, tools); * this.plot = tools.get(Plot); * } * @@ -38,9 +38,11 @@ import type { * ``` */ export abstract class Agent { + protected id: string; protected tools: Tools; - constructor(tools: Tools) { + constructor(id: string, tools: Tools) { + this.id = id; this.tools = tools; } @@ -229,7 +231,7 @@ export abstract class Agent { */ export abstract class ITool {} -export type ToolConstructor = (abstract new (tools: Tools) => T) | (new (tools: Tools) => T); +export type ToolConstructor = (abstract new (id: string, tools: Tools) => T) | (new (id: string, tools: Tools) => T); /** * Base class for regular tools. @@ -241,8 +243,8 @@ export type ToolConstructor = (abstract new (tools: Tools) => T * @example * ```typescript * class GoogleCalendarTool extends Tool { - * constructor(tools: Tools) { - * super(tools); + * constructor(id: string, tools: Tools) { + * super(id, tools); * this.auth = tools.get(Auth); * } * @@ -253,9 +255,11 @@ export type ToolConstructor = (abstract new (tools: Tools) => T * ``` */ export abstract class Tool implements ITool { + protected id: string; protected tools: Tools; - constructor(tools: Tools) { + constructor(id: string, tools: Tools) { + this.id = id; this.tools = tools; } diff --git a/tools/google-calendar/src/google-calendar.ts b/tools/google-calendar/src/google-calendar.ts index 8f5ed85..8d7d167 100644 --- a/tools/google-calendar/src/google-calendar.ts +++ b/tools/google-calendar/src/google-calendar.ts @@ -104,8 +104,8 @@ export class GoogleCalendar extends Tool implements CalendarTool { private auth: Auth; private webhook: Webhook; - constructor(protected tools: Tools) { - super(tools); + constructor(id: string, protected tools: Tools) { + super(id, tools); this.auth = tools.get(Auth); this.webhook = tools.get(Webhook); } diff --git a/tools/google-contacts/src/google-contacts.ts b/tools/google-contacts/src/google-contacts.ts index 529635a..a3abefd 100644 --- a/tools/google-contacts/src/google-contacts.ts +++ b/tools/google-contacts/src/google-contacts.ts @@ -248,8 +248,8 @@ export default class extends Tool implements GoogleContacts { private auth: Auth; - constructor(protected tools: Tools) { - super(tools); + constructor(id: string, protected tools: Tools) { + super(id, tools); this.auth = tools.get(Auth); } diff --git a/tools/outlook-calendar/src/outlook-calendar.ts b/tools/outlook-calendar/src/outlook-calendar.ts index 9a6afbd..3953351 100644 --- a/tools/outlook-calendar/src/outlook-calendar.ts +++ b/tools/outlook-calendar/src/outlook-calendar.ts @@ -228,8 +228,8 @@ export class OutlookCalendar extends Tool implements CalendarTool { private auth: Auth; private webhook: Webhook; - constructor(protected tools: Tools) { - super(tools); + constructor(id: string, protected tools: Tools) { + super(id, tools); this.auth = tools.get(Auth); this.webhook = tools.get(Webhook); }