mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-20 04:21:23 +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>
112 lines
3.3 KiB
TypeScript
112 lines
3.3 KiB
TypeScript
/**
|
|
* Custom error class for chat model authentication errors
|
|
*/
|
|
export class ChatModelAuthError extends Error {
|
|
/**
|
|
* Creates a new ChatModelAuthError
|
|
*
|
|
* @param message - The error message
|
|
* @param cause - The original error that caused this error
|
|
*/
|
|
constructor(
|
|
message: string,
|
|
public readonly cause?: unknown,
|
|
) {
|
|
super(message);
|
|
this.name = 'ChatModelAuthError';
|
|
|
|
// Maintains proper stack trace for where our error was thrown
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, ChatModelAuthError);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns a string representation of the error
|
|
*/
|
|
toString(): string {
|
|
return `${this.name}: ${this.message}${this.cause ? ` (Caused by: ${this.cause})` : ''}`;
|
|
}
|
|
}
|
|
|
|
export class ChatModelForbiddenError extends Error {
|
|
constructor(
|
|
message: string,
|
|
public readonly cause?: unknown,
|
|
) {
|
|
super(message);
|
|
this.name = 'ChatModelForbiddenError';
|
|
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this, ChatModelForbiddenError);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns a string representation of the error
|
|
*/
|
|
toString(): string {
|
|
return `${this.name}: ${this.message}${this.cause ? ` (Caused by: ${this.cause})` : ''}`;
|
|
}
|
|
}
|
|
|
|
export const LLM_FORBIDDEN_ERROR_MESSAGE =
|
|
'Access denied (403 Forbidden). Please check:\n\n1. Your API key has the required permissions\n\n2. For Ollama: Set OLLAMA_ORIGINS=chrome-extension://* \nsee https://github.com/ollama/ollama/blob/main/docs/faq.md';
|
|
|
|
/**
|
|
* Checks if an error is related to API authentication
|
|
*
|
|
* @param error - The error to check
|
|
* @returns boolean indicating if it's an authentication error
|
|
*/
|
|
export function isAuthenticationError(error: unknown): boolean {
|
|
if (!(error instanceof Error)) return false;
|
|
|
|
// Get the error message
|
|
const errorMessage = error.message || '';
|
|
|
|
// Get error name - sometimes error.name just returns "Error" for custom errors
|
|
let errorName = error.name || '';
|
|
|
|
// Try to extract the constructor name, which often contains the actual error type
|
|
// This works better than error.name for many custom errors
|
|
const constructorName = error.constructor?.name;
|
|
if (constructorName && constructorName !== 'Error') {
|
|
errorName = constructorName;
|
|
}
|
|
|
|
// Check if the error name indicates an authentication error
|
|
if (errorName === 'AuthenticationError') {
|
|
return true;
|
|
}
|
|
|
|
// Fallback: check the message for authentication-related indicators
|
|
return (
|
|
errorMessage.toLowerCase().includes('authentication') ||
|
|
errorMessage.includes(' 401') ||
|
|
errorMessage.toLowerCase().includes('api key')
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Checks if an error is related 403 Forbidden
|
|
*
|
|
* @param error - The error to check
|
|
* @returns boolean indicating if it's an 403 Forbidden error
|
|
*/
|
|
export function isForbiddenError(error: unknown): boolean {
|
|
if (!(error instanceof Error)) return false;
|
|
return error.message.includes(' 403') && error.message.includes('Forbidden');
|
|
}
|
|
|
|
export function isAbortedError(error: unknown): boolean {
|
|
if (!(error instanceof Error)) return false;
|
|
return error.name === 'AbortError' || error.message.includes('Aborted');
|
|
}
|
|
|
|
export class RequestCancelledError extends Error {
|
|
constructor(message: string) {
|
|
super(message);
|
|
this.name = 'RequestCancelledError';
|
|
}
|
|
} |