Release Notes - v0.5.0¶
Project renamed from vibium-go to w3pilot. Native Chrome launcher, video recording, WebSocket monitoring, and page event listeners.
Highlights¶
Major rename and native browser support.
This release renames the project from vibium-go to w3pilot with a new module path, package name, and CLI. The external clicker dependency is replaced with a native Chrome launcher that auto-installs the browser. New features include video recording, WebSocket monitoring, and page event listeners.
Breaking Changes¶
Project Rename¶
| Before | After |
|---|---|
github.com/plexusone/vibium-go |
github.com/plexusone/w3pilot |
package vibium |
package w3pilot |
*Vibe |
*Pilot |
vibium CLI |
w3pilot CLI |
vibium-mcp |
w3pilot-mcp |
vibium-rpa |
w3pilot-rpa |
VIBIUM_DEBUG |
W3PILOT_DEBUG |
VIBIUM_HEADLESS |
W3PILOT_HEADLESS |
VIBIUM_SKIP_BROWSER_DOWNLOAD |
W3PILOT_SKIP_BROWSER_DOWNLOAD |
Migration Guide¶
// Before (v0.4.x)
import vibium "github.com/plexusone/vibium-go"
vibe, err := vibium.Launch(ctx)
vibe.Go(ctx, "https://example.com")
elem, err := vibe.Find(ctx, "button", nil)
// After (v0.5.0)
import "github.com/plexusone/w3pilot"
pilot, err := w3pilot.Launch(ctx)
pilot.Go(ctx, "https://example.com")
elem, err := pilot.Find(ctx, "button", nil)
CLI migration:
# Before
vibium launch --headless
vibium mcp
VIBIUM_DEBUG=1 vibium run test.json
# After
w3pilot launch --headless
w3pilot mcp
W3PILOT_DEBUG=1 w3pilot run test.json
New Features¶
Native Chrome Launcher¶
The browser is now bundled and auto-installed. No need for external clicker binary:
To skip auto-download (if using system Chrome):
Video Recording¶
Record browser sessions as video files:
// Start recording
video, err := pilot.StartVideo(ctx, &w3pilot.VideoOptions{
Dir: "./recordings",
})
// Perform actions...
pilot.Go(ctx, "https://example.com")
elem, _ := pilot.Find(ctx, "button", nil)
elem.Click(ctx, nil)
// Stop and get video path
path, err := pilot.StopVideo(ctx)
fmt.Println("Video saved to:", path)
WebSocket Monitoring¶
Monitor WebSocket connections opened by the page:
err := pilot.OnWebSocket(ctx, func(ws *w3pilot.WebSocketInfo) {
fmt.Println("WebSocket opened:", ws.URL)
ws.OnMessage(func(msg *w3pilot.WebSocketMessage) {
fmt.Printf("WS %s: %s\n", msg.Direction, msg.Data)
})
ws.OnClose(func(code int, reason string) {
fmt.Printf("WS closed: %d %s\n", code, reason)
})
})
Page Event Listeners¶
Subscribe to page events:
// Console messages
pilot.OnConsole(ctx, func(msg *w3pilot.ConsoleMessage) {
fmt.Printf("[%s] %s\n", msg.Type, msg.Text)
})
// Page errors
pilot.OnPageError(ctx, func(err *w3pilot.PageError) {
fmt.Printf("Page error: %s\n", err.Message)
})
// Network requests
pilot.OnRequest(ctx, func(req *w3pilot.Request) {
fmt.Printf("Request: %s %s\n", req.Method, req.URL)
})
// Network responses
pilot.OnResponse(ctx, func(resp *w3pilot.Response) {
fmt.Printf("Response: %d %s\n", resp.Status, resp.URL)
})
// Dialogs
pilot.OnDialog(ctx, func(dialog *w3pilot.Dialog) {
fmt.Printf("Dialog: %s - %s\n", dialog.Type, dialog.Message)
})
Accessibility Snapshot¶
Get accessibility tree for the page:
New MCP Tools¶
| Category | Tools |
|---|---|
| Frames | list_frames, select_frame |
| State | get_state, verify_state |
| Assertions | assert_text, assert_element, assert_url, assert_title |
| Waiting | wait_for_element, wait_for_text, wait_for_url |
| Cookies | delete_cookie |
| Accessibility | accessibility_snapshot |
Bug Fixes¶
- File handle error handling - Fixed writable file handle closed without error handling (GitHub code scanning alert)
Tests¶
- Integration tests for verification operations
- Integration tests for MCP tools and page methods