Files
BrowserOS/reference-code/old-lib/utils/Logging.ts
Felarof 8245dfe0ff Rewrite Agent Loop (#7)
* 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>
2025-07-29 08:14:45 -07:00

143 lines
3.9 KiB
TypeScript

import { MessageType } from '@/lib/types/messaging'
import { PortName } from '@/lib/runtime/PortMessaging'
import { isDevelopmentMode } from '@/config'
import { z } from 'zod'
/**
* Log level type
*/
export const LogLevelSchema = z.enum(['info', 'error', 'warning'])
export type LogLevel = z.infer<typeof LogLevelSchema>
/**
* Log message schema
*/
export const LogMessageSchema = z.object({
source: z.string(),
message: z.string(),
level: LogLevelSchema,
timestamp: z.string()
})
export type LogMessage = z.infer<typeof LogMessageSchema>
/**
* Options for initializing the logging utility
*/
interface LogUtilityOptions {
readonly debugMode?: boolean
}
/**
* Centralized logging utility that supports both port and one-time messaging
* Routes logs to options page when in development mode
*/
export class Logging {
private static connectedPorts = new Map<string, chrome.runtime.Port>()
private static debugMode = false
/**
* Initialize the logging utility
* @param options - Configuration options
*/
public static initialize(options: LogUtilityOptions = {}): void {
this.debugMode = options.debugMode || false
}
/**
* Register a connected port
* @param name - Port name
* @param port - Connected port
*/
public static registerPort(name: string, port: chrome.runtime.Port): void {
this.connectedPorts.set(name, port)
}
/**
* Unregister a port
* @param name - Port name
*/
public static unregisterPort(name: string): void {
this.connectedPorts.delete(name)
}
/**
* Log a message
* @param source - Source component name
* @param message - Message content
* @param level - Log level
*/
public static log(source: string, message: string, level: LogLevel = 'info'): void {
if (!this.debugMode && level === 'info') return
const prefix = `[${source}]`
// Console logging
switch (level) {
case 'error':
console.error(`${prefix} ${message}`)
break
case 'warning':
console.warn(`${prefix} ${message}`)
break
default:
console.log(`${prefix} ${message}`)
}
// Prepare log message
const logMessage: LogMessage = {
source,
message,
level,
timestamp: new Date().toISOString()
}
// Try to send via port messaging first
let sentViaPort = false
// In development mode, send to options page
if (isDevelopmentMode()) {
// Look for options page port
const optionsPort = this.connectedPorts.get(PortName.OPTIONS_TO_BACKGROUND)
if (optionsPort) {
try {
// Check if port is still connected by accessing a property
// Chrome will throw if the port is disconnected
const isConnected = optionsPort.name !== undefined
if (isConnected) {
optionsPort.postMessage({
type: MessageType.LOG,
payload: logMessage
})
sentViaPort = true
} else {
// Port is stale, remove it
this.unregisterPort(PortName.OPTIONS_TO_BACKGROUND)
}
} catch (error) {
// Port is disconnected or stale, remove it and log the issue
this.unregisterPort(PortName.OPTIONS_TO_BACKGROUND)
// Only log port errors for non-heartbeat messages to avoid spam
if (level !== 'info' || !message.includes('heartbeat')) {
console.warn(`Failed to send log to options page: ${error instanceof Error ? error.message : String(error)}`)
}
}
}
}
// Fall back to one-time messaging if port messaging failed
if (!sentViaPort && typeof chrome !== 'undefined' && chrome.runtime) {
chrome.runtime.sendMessage({
type: MessageType.LOG,
payload: logMessage
}).catch((_error: Error) => {
// It's OK if this fails too, just means no UI is open
// We've already logged to the console above
})
}
}
}