Skip to content

Commit 4c9dc6e

Browse files
committed
more reorganization of the tools
1 parent e066dd5 commit 4c9dc6e

23 files changed

+122
-134
lines changed

packages/agent/src/core/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { z } from 'zod';
22
import { JsonSchema7Type } from 'zod-to-json-schema';
33

44
import { AgentTracker } from '../tools/agent/AgentTracker.js';
5-
import { BrowserTracker } from '../tools/browser/browserTracker.js';
5+
import { SessionTracker } from '../tools/session/SessionTracker.js';
66
import { ShellTracker } from '../tools/shell/ShellTracker.js';
77
import { Logger } from '../utils/logger.js';
88

@@ -34,7 +34,7 @@ export type ToolContext = {
3434
temperature: number;
3535
agentTracker: AgentTracker;
3636
shellTracker: ShellTracker;
37-
browserTracker: BrowserTracker;
37+
browserTracker: SessionTracker;
3838
};
3939

4040
export type Tool<TParams = Record<string, any>, TReturn = any> = {

packages/agent/src/index.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ export * from './tools/shell/listShells.js';
1313
export * from './tools/shell/ShellTracker.js';
1414

1515
// Tools - Browser
16-
export * from './tools/browser/BrowserManager.js';
17-
export * from './tools/browser/types.js';
18-
export * from './tools/browser/browseMessage.js';
19-
export * from './tools/browser/browseStart.js';
20-
export * from './tools/browser/PageController.js';
21-
export * from './tools/browser/BrowserAutomation.js';
22-
export * from './tools/browser/listBrowsers.js';
23-
export * from './tools/browser/browserTracker.js';
16+
export * from './tools/session/lib/SessionManager.js';
17+
export * from './tools/session/lib/types.js';
18+
export * from './tools/session/sessionMessage.js';
19+
export * from './tools/session/sessionStart.js';
20+
export * from './tools/session/lib/PageController.js';
21+
export * from './tools/session/lib/BrowserAutomation.js';
22+
export * from './tools/session/listSessions.js';
23+
export * from './tools/session/SessionTracker.js';
2424

2525
export * from './tools/agent/AgentTracker.js';
2626
// Tools - Interaction

packages/agent/src/tools/agent/agentExecute.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest';
33
import { TokenTracker } from '../../core/tokens.js';
44
import { ToolContext } from '../../core/types.js';
55
import { MockLogger } from '../../utils/mockLogger.js';
6-
import { BrowserTracker } from '../browser/browserTracker.js';
6+
import { SessionTracker } from '../session/SessionTracker.js';
77
import { ShellTracker } from '../shell/ShellTracker.js';
88

99
import { agentExecuteTool } from './agentExecute.js';
@@ -37,7 +37,7 @@ const mockContext: ToolContext = {
3737
temperature: 0.7,
3838
agentTracker: new AgentTracker('test'),
3939
shellTracker: new ShellTracker('test'),
40-
browserTracker: new BrowserTracker('test'),
40+
browserTracker: new SessionTracker('test'),
4141
};
4242

4343
describe('agentExecuteTool', () => {

packages/agent/src/tools/agent/agentExecute.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import {
77
} from '../../core/toolAgent/config.js';
88
import { toolAgent } from '../../core/toolAgent/toolAgentCore.js';
99
import { Tool, ToolContext } from '../../core/types.js';
10-
import { BrowserTracker } from '../browser/browserTracker.js';
1110
import { getTools } from '../getTools.js';
11+
import { SessionTracker } from '../session/SessionTracker.js';
1212
import { ShellTracker } from '../shell/ShellTracker.js';
1313

1414
import { AgentTracker } from './AgentTracker.js';
@@ -89,7 +89,7 @@ export const agentExecuteTool: Tool<Parameters, ReturnType> = {
8989
workingDirectory: workingDirectory ?? context.workingDirectory,
9090
agentTracker: new AgentTracker(subAgentId),
9191
shellTracker: new ShellTracker(subAgentId),
92-
browserTracker: new BrowserTracker(subAgentId),
92+
browserTracker: new SessionTracker(subAgentId),
9393
};
9494

9595
// Construct a well-structured prompt

packages/agent/src/tools/agent/agentTools.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { describe, expect, it, vi } from 'vitest';
33
import { TokenTracker } from '../../core/tokens.js';
44
import { ToolContext } from '../../core/types.js';
55
import { MockLogger } from '../../utils/mockLogger.js';
6-
import { BrowserTracker } from '../browser/browserTracker.js';
6+
import { SessionTracker } from '../session/SessionTracker.js';
77
import { ShellTracker } from '../shell/ShellTracker.js';
88

99
import { agentMessageTool } from './agentMessage.js';
@@ -33,7 +33,7 @@ const mockContext: ToolContext = {
3333
temperature: 0.7,
3434
agentTracker: new AgentTracker('test'),
3535
shellTracker: new ShellTracker('test'),
36-
browserTracker: new BrowserTracker('test'),
36+
browserTracker: new SessionTracker('test'),
3737
};
3838

3939
describe('Agent Tools', () => {

packages/agent/src/tools/getTools.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import { ToolContext } from '../core/types.js';
55
import { MockLogger } from '../utils/mockLogger.js';
66

77
import { AgentTracker } from './agent/AgentTracker.js';
8-
import { BrowserTracker } from './browser/browserTracker.js';
98
import { getTools } from './getTools.js';
9+
import { SessionTracker } from './session/SessionTracker.js';
1010
import { ShellTracker } from './shell/ShellTracker.js';
1111

1212
// Mock context
@@ -24,7 +24,7 @@ export const getMockToolContext = (): ToolContext => ({
2424
temperature: 0.7,
2525
agentTracker: new AgentTracker('test'),
2626
shellTracker: new ShellTracker('test'),
27-
browserTracker: new BrowserTracker('test'),
27+
browserTracker: new SessionTracker('test'),
2828
});
2929

3030
describe('getTools', () => {

packages/agent/src/tools/getTools.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import { Tool } from '../core/types.js';
55
import { agentDoneTool } from './agent/agentDone.js';
66
import { agentExecuteTool } from './agent/agentExecute.js';
77
import { listAgentsTool } from './agent/listAgents.js';
8-
import { browseMessageTool } from './browser/browseMessage.js';
9-
import { browseStartTool } from './browser/browseStart.js';
10-
import { listBrowsersTool } from './browser/listBrowsers.js';
118
import { userPromptTool } from './interaction/userPrompt.js';
129
import { fetchTool } from './io/fetch.js';
1310
import { textEditorTool } from './io/textEditor.js';
1411
import { createMcpTool } from './mcp.js';
12+
import { listSessionsTool } from './session/listSessions.js';
13+
import { sessionMessageTool } from './session/sessionMessage.js';
14+
import { sessionStartTool } from './session/sessionStart.js';
1515
import { listShellsTool } from './shell/listShells.js';
1616
import { shellMessageTool } from './shell/shellMessage.js';
1717
import { shellStartTool } from './shell/shellStart.js';
@@ -32,15 +32,15 @@ export function getTools(options?: GetToolsOptions): Tool[] {
3232
const tools: Tool[] = [
3333
textEditorTool as unknown as Tool,
3434
agentExecuteTool as unknown as Tool,
35-
listBrowsersTool as unknown as Tool,
35+
listSessionsTool as unknown as Tool,
3636
/*agentStartTool as unknown as Tool,
3737
agentMessageTool as unknown as Tool,*/
3838
agentDoneTool as unknown as Tool,
3939
fetchTool as unknown as Tool,
4040
shellStartTool as unknown as Tool,
4141
shellMessageTool as unknown as Tool,
42-
browseStartTool as unknown as Tool,
43-
browseMessageTool as unknown as Tool,
42+
sessionStartTool as unknown as Tool,
43+
sessionMessageTool as unknown as Tool,
4444
//respawnTool as unknown as Tool, this is a confusing tool for now.
4545
sleepTool as unknown as Tool,
4646
listShellsTool as unknown as Tool,

packages/agent/src/tools/browser/browserTracker.ts renamed to packages/agent/src/tools/session/SessionTracker.ts

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { v4 as uuidv4 } from 'uuid';
22

3-
import { BrowserManager } from './BrowserManager.js';
4-
import { browserSessions } from './types.js';
3+
import { SessionManager } from './lib/SessionManager.js';
4+
import { browserSessions } from './lib/types.js';
55

66
// Status of a browser session
7-
export enum BrowserSessionStatus {
7+
export enum SessionStatus {
88
RUNNING = 'running',
99
COMPLETED = 'completed',
1010
ERROR = 'error',
1111
TERMINATED = 'terminated',
1212
}
1313

1414
// Browser session tracking data
15-
export interface BrowserSessionInfo {
15+
export interface SessionInfo {
1616
id: string;
17-
status: BrowserSessionStatus;
17+
status: SessionStatus;
1818
startTime: Date;
1919
endTime?: Date;
2020
metadata: {
@@ -29,17 +29,17 @@ export interface BrowserSessionInfo {
2929
/**
3030
* Registry to keep track of browser sessions
3131
*/
32-
export class BrowserTracker {
33-
private sessions: Map<string, BrowserSessionInfo> = new Map();
32+
export class SessionTracker {
33+
private sessions: Map<string, SessionInfo> = new Map();
3434

3535
constructor(public ownerAgentId: string | undefined) {}
3636

3737
// Register a new browser session
3838
public registerBrowser(url?: string): string {
3939
const id = uuidv4();
40-
const session: BrowserSessionInfo = {
40+
const session: SessionInfo = {
4141
id,
42-
status: BrowserSessionStatus.RUNNING,
42+
status: SessionStatus.RUNNING,
4343
startTime: new Date(),
4444
metadata: {
4545
url,
@@ -52,7 +52,7 @@ export class BrowserTracker {
5252
// Update the status of a browser session
5353
public updateSessionStatus(
5454
id: string,
55-
status: BrowserSessionStatus,
55+
status: SessionStatus,
5656
metadata?: Record<string, any>,
5757
): boolean {
5858
const session = this.sessions.get(id);
@@ -63,9 +63,9 @@ export class BrowserTracker {
6363
session.status = status;
6464

6565
if (
66-
status === BrowserSessionStatus.COMPLETED ||
67-
status === BrowserSessionStatus.ERROR ||
68-
status === BrowserSessionStatus.TERMINATED
66+
status === SessionStatus.COMPLETED ||
67+
status === SessionStatus.ERROR ||
68+
status === SessionStatus.TERMINATED
6969
) {
7070
session.endTime = new Date();
7171
}
@@ -78,19 +78,17 @@ export class BrowserTracker {
7878
}
7979

8080
// Get all browser sessions
81-
public getSessions(): BrowserSessionInfo[] {
81+
public getSessions(): SessionInfo[] {
8282
return Array.from(this.sessions.values());
8383
}
8484

8585
// Get a specific browser session by ID
86-
public getSessionById(id: string): BrowserSessionInfo | undefined {
86+
public getSessionById(id: string): SessionInfo | undefined {
8787
return this.sessions.get(id);
8888
}
8989

9090
// Filter sessions by status
91-
public getSessionsByStatus(
92-
status: BrowserSessionStatus,
93-
): BrowserSessionInfo[] {
91+
public getSessionsByStatus(status: SessionStatus): SessionInfo[] {
9492
return this.getSessions().filter((session) => session.status === status);
9593
}
9694

@@ -99,11 +97,11 @@ export class BrowserTracker {
9997
* @returns A promise that resolves when cleanup is complete
10098
*/
10199
public async cleanup(): Promise<void> {
102-
const sessions = this.getSessionsByStatus(BrowserSessionStatus.RUNNING);
100+
const sessions = this.getSessionsByStatus(SessionStatus.RUNNING);
103101

104102
// Create cleanup promises for each session
105103
const cleanupPromises = sessions.map((session) =>
106-
this.cleanupBrowserSession(session),
104+
this.cleanupSession(session),
107105
);
108106

109107
// Wait for all cleanup operations to complete in parallel
@@ -114,18 +112,16 @@ export class BrowserTracker {
114112
* Cleans up a browser session
115113
* @param session The browser session to clean up
116114
*/
117-
private async cleanupBrowserSession(
118-
session: BrowserSessionInfo,
119-
): Promise<void> {
115+
private async cleanupSession(session: SessionInfo): Promise<void> {
120116
try {
121117
const browserManager = (
122-
globalThis as unknown as { __BROWSER_MANAGER__?: BrowserManager }
118+
globalThis as unknown as { __BROWSER_MANAGER__?: SessionManager }
123119
).__BROWSER_MANAGER__;
124120

125121
if (browserManager) {
126122
await browserManager.closeSession(session.id);
127123
} else {
128-
// Fallback to closing via browserSessions if BrowserManager is not available
124+
// Fallback to closing via browserSessions if SessionManager is not available
129125
const browserSession = browserSessions.get(session.id);
130126
if (browserSession) {
131127
await browserSession.page.context().close();
@@ -134,9 +130,9 @@ export class BrowserTracker {
134130
}
135131
}
136132

137-
this.updateSessionStatus(session.id, BrowserSessionStatus.COMPLETED);
133+
this.updateSessionStatus(session.id, SessionStatus.COMPLETED);
138134
} catch (error) {
139-
this.updateSessionStatus(session.id, BrowserSessionStatus.ERROR, {
135+
this.updateSessionStatus(session.id, SessionStatus.ERROR, {
140136
error: error instanceof Error ? error.message : String(error),
141137
});
142138
}

packages/agent/src/tools/browser/BrowserAutomation.ts renamed to packages/agent/src/tools/session/lib/BrowserAutomation.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import { BrowserManager } from './BrowserManager.js';
21
import { PageController } from './PageController.js';
2+
import { SessionManager } from './SessionManager.js';
33

44
export class BrowserAutomation {
55
private static instance: BrowserAutomation;
6-
private browserManager: BrowserManager;
6+
private browserManager: SessionManager;
77

88
private constructor() {
9-
this.browserManager = new BrowserManager();
9+
this.browserManager = new SessionManager();
1010
}
1111

1212
static getInstance(): BrowserAutomation {

packages/agent/src/tools/browser/PageController.ts renamed to packages/agent/src/tools/session/lib/PageController.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Page } from '@playwright/test';
22

3-
import { errorToString } from '../../utils/errorToString.js';
3+
import { errorToString } from '../../../utils/errorToString.js';
44

55
import {
66
SelectorType,

0 commit comments

Comments
 (0)