mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-21 21:05:09 +00:00
* clean-up bunch of files for re-write * more clean-up and adding basic agent * Minor fix moved types into respective files. * Deleted bunch of old files backup Update gitignore Deleted a bunch of files Remove message manager Deleted old docs Update rules rename Profiler to profiler * Temporarily adding old code * Adding two small things back * backup * Implemented LangChainProvider and updated cursor rules backup LangChainProvider curosr rules * Implement tests for LangChainProvider -- unit test and integration test integration test passes integration test backup * Tool Design Tools Desing tools design * NavigationTool ready NavigationTool ready NavigationTool ready NaivgationTool ready backup * MessageManager MessageManager backup * Fixed integration test * Agent design new Updated agent design and added bunch of /NTN commands agent new design * Delete old agent design * MessageManagerReadOnly class * PlannerTool ready PlannerTool almost ready * ToolManager and DoneTool * Integration of BrowserAgent * BrowserAgent implementation v0.1 * BrowserAgent small fix v0.2 * Tool calling design too call design tool design claude * Update agent tool design with // NTN * add zod-to-json npm install * BrowserAGent v0.3 * BrowserAgent v0.4 * BrowserAgent v0.5 * fixes * Build error fixes in my NEWLY added code build errors fix * Build error fixes in old code (integration work) backup * Comment StreamEventProcessor for now, it is not used * Small build error fix * Small rename * Added integration test to check structuredLLM and changed to 4o-mini change default to nxtscape integration test * Small docstring * Simplified BrowserAgent code and added integration test Simplified BrowserAgent code BrowserAGent integrationt est * Update CLAUDE.md with project memory and instructions on how to write code Update CLAUDE.md with project memory and instructions on how to write code Project Memory * Just a mova.. Moved ToolManager outside. Build works. * TabOperations tool TabOperations Tool and fixing some test tab operations * Update CLAUDE.md * Added ClassificationTool classifiction tool classification prommpt * Refactored and simplified PlannerTool unit test and integration test * Updated Plnnaer tool * Update CLAUDE.md * BrowserAgent modified to do classification BrowserAgent with classification * minor fix to ToolManager * Instead of ToolCall and ToolResult -- just updating message manager once * minor fix to BrowserAgent integration test * Changed done to "done_tool" * Updated CLAUDE.md to reflect understanding of claude * Uncommented stream event processor * Renamed EventBus to StreamEventBus * Commented StreamEventProcessor * Event Processor * Integrated EventProcessor with BrowserAgent Added EventProcessor to BrowserAgetn * Renamed StreamEventBus to EventBus * Made EventBus required parameter in ExecutionContext * PlanGenerator rewrite PlanGenerator rewrite backup * For simple task, explicitly tell it to call done tool * Max attempts for simple task * backup * Revert "backup" This reverts commit 7d79a3d4d5774bfef79ec9827878b74edad3593f. * Consolidating where EventBus and EventProcessor are created and initialized backup * Update CLAUDE.md Update CLAUDE.md * Improving agent loop code Cleaned up processTooCall classification task * Create test-writer subAgent test-agent-prompt test agent prompt test-agent-prompt Update test-writer.md * BrowserAgent test Browseragent test BrowserAgent test * BrowserAgent refactor backup backup * Minor fixes * Minor fix * minor change -- NEW AGENT LOOP IS WORKING WELL * Update cursor rules * Small change * Improved BrowserAgent integration test Improved BrowserAgent integration test * Small change * Update CLAUDE.md * Different tools * FindElementTool is ready Find element update backup find element backup * Updated to test strings to say "tests..." * ScrollTool is ready * RefreshStateTool is updated as well * MessageManager updated * SearchTool is ready backup * Interaction Element is also ready * Add debugMessage emitter * ValidatorTool ready and tests are passing Validation Tool validator tool backup backup * GroupTabs tool ready * Registered all the tools * Planning changed to 5 steps * BrowserAgent integration test fix * Minor string changes * backup * Removed too many confusing events in EventProcessor -- there is only event.info right now * Abort control implemented backup Abort * Formatter for toolResult Formatter for toolResult backup * Always render using Markdown * Minor fix --------- Co-authored-by: Nikhil Sonti <nikhilsv92@gmail.com>
122 lines
3.3 KiB
TypeScript
122 lines
3.3 KiB
TypeScript
import { z } from 'zod';
|
|
import { NxtscapeTool } from './NxtscapeTool';
|
|
import { ToolCategory } from './ToolConfig';
|
|
|
|
/**
|
|
* Registry for managing tools
|
|
*/
|
|
export class ToolRegistry {
|
|
private tools: Map<string, NxtscapeTool> = new Map();
|
|
private toolsByCategory: Map<ToolCategory, NxtscapeTool[]> = new Map();
|
|
|
|
/**
|
|
* Register a tool
|
|
*/
|
|
register(tool: NxtscapeTool): void {
|
|
const config = tool.getConfig();
|
|
|
|
// Add to main registry
|
|
this.tools.set(config.name, tool);
|
|
|
|
// Add to category index
|
|
if (!this.toolsByCategory.has(config.category)) {
|
|
this.toolsByCategory.set(config.category, []);
|
|
}
|
|
this.toolsByCategory.get(config.category)!.push(tool);
|
|
}
|
|
|
|
/**
|
|
* Register multiple tools
|
|
*/
|
|
registerAll(tools: NxtscapeTool[]): void {
|
|
tools.forEach(tool => this.register(tool));
|
|
}
|
|
|
|
/**
|
|
* Get a tool by name
|
|
*/
|
|
getByName(name: string): NxtscapeTool | undefined {
|
|
return this.tools.get(name);
|
|
}
|
|
|
|
/**
|
|
* Get tools by category
|
|
*/
|
|
getByCategory(category: ToolCategory): NxtscapeTool[] {
|
|
return this.toolsByCategory.get(category) || [];
|
|
}
|
|
|
|
/**
|
|
* Get all tools
|
|
*/
|
|
getAll(): NxtscapeTool[] {
|
|
return Array.from(this.tools.values());
|
|
}
|
|
|
|
/**
|
|
* Get all LangChain tools
|
|
*/
|
|
getLangChainTools() {
|
|
return this.getAll().map(tool => tool.getLangChainTool());
|
|
}
|
|
|
|
/**
|
|
* Generate system prompt for tools
|
|
*/
|
|
generateSystemPrompt(categories?: ToolCategory[]): string {
|
|
const tools = categories
|
|
? categories.flatMap(cat => this.getByCategory(cat))
|
|
: this.getAll();
|
|
|
|
const toolDocs = tools.map(tool => {
|
|
const config = tool.getConfig();
|
|
const inputSchema = this.zodSchemaToString(config.inputSchema);
|
|
const outputSchema = this.zodSchemaToString(config.outputSchema);
|
|
|
|
let doc = `### ${config.name}\n`;
|
|
doc += `**Category**: ${config.category}\n`;
|
|
doc += `**Description**: ${config.description}\n`;
|
|
doc += `**Input Schema**:\n\`\`\`json\n${inputSchema}\n\`\`\`\n`;
|
|
doc += `**Output Schema**:\n\`\`\`json\n${outputSchema}\n\`\`\`\n`;
|
|
|
|
if (config.examples && config.examples.length > 0) {
|
|
doc += `**Examples**:\n`;
|
|
config.examples.forEach((example, i) => {
|
|
doc += `${i + 1}. ${example.description}\n`;
|
|
doc += ` Input: \`${JSON.stringify(example.input)}\`\n`;
|
|
doc += ` Output: \`${JSON.stringify(example.output)}\`\n`;
|
|
});
|
|
}
|
|
|
|
return doc;
|
|
}).join('\n---\n\n');
|
|
|
|
return `## Available Tools\n\n${toolDocs}`;
|
|
}
|
|
|
|
/**
|
|
* Convert Zod schema to readable string representation
|
|
*/
|
|
private zodSchemaToString(schema: z.ZodType): string {
|
|
// This is a simplified version - you might want to enhance this
|
|
// to provide better schema documentation
|
|
try {
|
|
// For now, return a simple JSON representation
|
|
// In a real implementation, you'd want to introspect the schema
|
|
return JSON.stringify(schema._def, null, 2);
|
|
} catch {
|
|
return 'Schema details available at runtime';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Validate tool compatibility
|
|
*/
|
|
validateCompatibility(requiredVersion: string): boolean {
|
|
// Simple version check - could be enhanced
|
|
return this.getAll().every(tool => {
|
|
const version = tool.getConfig().version;
|
|
return version >= requiredVersion;
|
|
});
|
|
}
|
|
}
|