cbrowser 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,619 @@
1
+ "use strict";
2
+ /**
3
+ * CBrowser - Main Browser Class
4
+ *
5
+ * AI-powered browser automation with constitutional safety.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.CBrowser = void 0;
9
+ const playwright_1 = require("playwright");
10
+ const fs_1 = require("fs");
11
+ const path_1 = require("path");
12
+ const config_js_1 = require("./config.js");
13
+ const personas_js_1 = require("./personas.js");
14
+ class CBrowser {
15
+ config;
16
+ paths;
17
+ browser = null;
18
+ context = null;
19
+ page = null;
20
+ currentPersona = null;
21
+ constructor(userConfig = {}) {
22
+ this.config = (0, config_js_1.mergeConfig)(userConfig);
23
+ this.paths = (0, config_js_1.ensureDirectories)((0, config_js_1.getPaths)(this.config.dataDir));
24
+ }
25
+ // =========================================================================
26
+ // Lifecycle
27
+ // =========================================================================
28
+ /**
29
+ * Launch the browser.
30
+ */
31
+ async launch() {
32
+ if (this.browser)
33
+ return;
34
+ this.browser = await playwright_1.chromium.launch({
35
+ headless: this.config.headless,
36
+ });
37
+ this.context = await this.browser.newContext({
38
+ viewport: {
39
+ width: this.config.viewportWidth,
40
+ height: this.config.viewportHeight,
41
+ },
42
+ });
43
+ this.page = await this.context.newPage();
44
+ }
45
+ /**
46
+ * Close the browser.
47
+ */
48
+ async close() {
49
+ if (this.browser) {
50
+ await this.browser.close();
51
+ this.browser = null;
52
+ this.context = null;
53
+ this.page = null;
54
+ }
55
+ }
56
+ /**
57
+ * Get the current page, launching if needed.
58
+ */
59
+ async getPage() {
60
+ if (!this.page) {
61
+ await this.launch();
62
+ }
63
+ return this.page;
64
+ }
65
+ // =========================================================================
66
+ // Navigation
67
+ // =========================================================================
68
+ /**
69
+ * Navigate to a URL.
70
+ */
71
+ async navigate(url) {
72
+ const page = await this.getPage();
73
+ const startTime = Date.now();
74
+ const errors = [];
75
+ const warnings = [];
76
+ // Capture console errors
77
+ page.on("console", (msg) => {
78
+ if (msg.type() === "error") {
79
+ errors.push(msg.text());
80
+ }
81
+ else if (msg.type() === "warning") {
82
+ warnings.push(msg.text());
83
+ }
84
+ });
85
+ await page.goto(url, {
86
+ waitUntil: "networkidle",
87
+ timeout: this.config.timeout,
88
+ });
89
+ const loadTime = Date.now() - startTime;
90
+ const screenshot = await this.screenshot();
91
+ return {
92
+ url: page.url(),
93
+ title: await page.title(),
94
+ screenshot,
95
+ errors,
96
+ warnings,
97
+ loadTime,
98
+ };
99
+ }
100
+ // =========================================================================
101
+ // Interaction
102
+ // =========================================================================
103
+ /**
104
+ * Click an element using AI-powered selector.
105
+ */
106
+ async click(selector, options = {}) {
107
+ const page = await this.getPage();
108
+ // Classify action zone
109
+ const zone = this.classifyAction("click", selector);
110
+ if (zone === "red" && !options.force) {
111
+ return {
112
+ success: false,
113
+ screenshot: await this.screenshot(),
114
+ message: `Red zone action requires --force: click "${selector}"`,
115
+ };
116
+ }
117
+ try {
118
+ // Try multiple selector strategies
119
+ const element = await this.findElement(selector);
120
+ if (!element) {
121
+ return {
122
+ success: false,
123
+ screenshot: await this.screenshot(),
124
+ message: `Element not found: ${selector}`,
125
+ };
126
+ }
127
+ await element.click();
128
+ // Wait for any navigation or network activity
129
+ await page.waitForLoadState("networkidle", { timeout: 5000 }).catch(() => { });
130
+ this.audit("click", selector, zone, "success");
131
+ return {
132
+ success: true,
133
+ screenshot: await this.screenshot(),
134
+ message: `Clicked: ${selector}`,
135
+ };
136
+ }
137
+ catch (error) {
138
+ this.audit("click", selector, zone, "failure");
139
+ return {
140
+ success: false,
141
+ screenshot: await this.screenshot(),
142
+ message: `Failed to click: ${error instanceof Error ? error.message : String(error)}`,
143
+ };
144
+ }
145
+ }
146
+ /**
147
+ * Fill a form field.
148
+ */
149
+ async fill(selector, value) {
150
+ const page = await this.getPage();
151
+ try {
152
+ const element = await this.findElement(selector);
153
+ if (!element) {
154
+ return {
155
+ success: false,
156
+ screenshot: await this.screenshot(),
157
+ message: `Element not found: ${selector}`,
158
+ };
159
+ }
160
+ await element.fill(value);
161
+ this.audit("fill", selector, "yellow", "success");
162
+ return {
163
+ success: true,
164
+ screenshot: await this.screenshot(),
165
+ message: `Filled: ${selector}`,
166
+ };
167
+ }
168
+ catch (error) {
169
+ this.audit("fill", selector, "yellow", "failure");
170
+ return {
171
+ success: false,
172
+ screenshot: await this.screenshot(),
173
+ message: `Failed to fill: ${error instanceof Error ? error.message : String(error)}`,
174
+ };
175
+ }
176
+ }
177
+ /**
178
+ * Find an element using multiple strategies.
179
+ */
180
+ async findElement(selector) {
181
+ const page = await this.getPage();
182
+ // Strategy 1: Direct CSS selector
183
+ if (selector.startsWith("css:")) {
184
+ return page.locator(selector.slice(4)).first();
185
+ }
186
+ // Strategy 2: ARIA selector
187
+ if (selector.startsWith("aria:")) {
188
+ const [role, name] = selector.slice(5).split("/");
189
+ return page.getByRole(role, { name }).first();
190
+ }
191
+ // Strategy 3: Text content
192
+ const byText = page.getByText(selector, { exact: false }).first();
193
+ if (await byText.count() > 0) {
194
+ return byText;
195
+ }
196
+ // Strategy 4: Placeholder
197
+ const byPlaceholder = page.getByPlaceholder(selector).first();
198
+ if (await byPlaceholder.count() > 0) {
199
+ return byPlaceholder;
200
+ }
201
+ // Strategy 5: Label
202
+ const byLabel = page.getByLabel(selector).first();
203
+ if (await byLabel.count() > 0) {
204
+ return byLabel;
205
+ }
206
+ // Strategy 6: Role with name
207
+ const byRole = page.getByRole("button", { name: selector }).first();
208
+ if (await byRole.count() > 0) {
209
+ return byRole;
210
+ }
211
+ // Strategy 7: Try as CSS
212
+ try {
213
+ const byCss = page.locator(selector).first();
214
+ if (await byCss.count() > 0) {
215
+ return byCss;
216
+ }
217
+ }
218
+ catch {
219
+ // Invalid CSS selector, continue
220
+ }
221
+ return null;
222
+ }
223
+ // =========================================================================
224
+ // Extraction
225
+ // =========================================================================
226
+ /**
227
+ * Extract data from the page.
228
+ */
229
+ async extract(what) {
230
+ const page = await this.getPage();
231
+ let data;
232
+ switch (what.toLowerCase()) {
233
+ case "links":
234
+ data = await page.evaluate(() => Array.from(document.querySelectorAll("a")).map((a) => ({
235
+ text: a.textContent?.trim(),
236
+ href: a.href,
237
+ })));
238
+ break;
239
+ case "headings":
240
+ data = await page.evaluate(() => Array.from(document.querySelectorAll("h1, h2, h3, h4, h5, h6")).map((h) => ({
241
+ level: h.tagName,
242
+ text: h.textContent?.trim(),
243
+ })));
244
+ break;
245
+ case "images":
246
+ data = await page.evaluate(() => Array.from(document.querySelectorAll("img")).map((img) => ({
247
+ src: img.src,
248
+ alt: img.alt,
249
+ })));
250
+ break;
251
+ case "forms":
252
+ data = await page.evaluate(() => Array.from(document.querySelectorAll("form")).map((form) => ({
253
+ action: form.action,
254
+ method: form.method,
255
+ inputs: Array.from(form.querySelectorAll("input, select, textarea")).map((el) => ({
256
+ type: el.type || el.tagName.toLowerCase(),
257
+ name: el.name,
258
+ id: el.id,
259
+ })),
260
+ })));
261
+ break;
262
+ default:
263
+ // Generic text extraction
264
+ data = await page.evaluate(() => document.body.innerText);
265
+ }
266
+ return {
267
+ data,
268
+ screenshot: await this.screenshot(),
269
+ };
270
+ }
271
+ // =========================================================================
272
+ // Screenshots
273
+ // =========================================================================
274
+ /**
275
+ * Take a screenshot.
276
+ */
277
+ async screenshot(path) {
278
+ const page = await this.getPage();
279
+ const filename = path || (0, path_1.join)(this.paths.screenshotsDir, `screenshot-${Date.now()}.png`);
280
+ await page.screenshot({ path: filename, fullPage: false });
281
+ return filename;
282
+ }
283
+ // =========================================================================
284
+ // Sessions
285
+ // =========================================================================
286
+ /**
287
+ * Save the current session.
288
+ */
289
+ async saveSession(name) {
290
+ const page = await this.getPage();
291
+ const context = this.context;
292
+ const cookies = await context.cookies();
293
+ const localStorage = await page.evaluate(() => {
294
+ const data = {};
295
+ for (let i = 0; i < window.localStorage.length; i++) {
296
+ const key = window.localStorage.key(i);
297
+ if (key)
298
+ data[key] = window.localStorage.getItem(key) || "";
299
+ }
300
+ return data;
301
+ });
302
+ const sessionStorage = await page.evaluate(() => {
303
+ const data = {};
304
+ for (let i = 0; i < window.sessionStorage.length; i++) {
305
+ const key = window.sessionStorage.key(i);
306
+ if (key)
307
+ data[key] = window.sessionStorage.getItem(key) || "";
308
+ }
309
+ return data;
310
+ });
311
+ const url = page.url();
312
+ const domain = new URL(url).hostname;
313
+ const session = {
314
+ name,
315
+ created: new Date().toISOString(),
316
+ lastUsed: new Date().toISOString(),
317
+ domain,
318
+ url,
319
+ viewport: {
320
+ width: this.config.viewportWidth,
321
+ height: this.config.viewportHeight,
322
+ },
323
+ cookies: cookies,
324
+ localStorage,
325
+ sessionStorage,
326
+ };
327
+ const sessionPath = (0, path_1.join)(this.paths.sessionsDir, `${name}.json`);
328
+ (0, fs_1.writeFileSync)(sessionPath, JSON.stringify(session, null, 2));
329
+ }
330
+ /**
331
+ * Load a saved session.
332
+ */
333
+ async loadSession(name) {
334
+ const sessionPath = (0, path_1.join)(this.paths.sessionsDir, `${name}.json`);
335
+ if (!(0, fs_1.existsSync)(sessionPath)) {
336
+ return false;
337
+ }
338
+ const session = JSON.parse((0, fs_1.readFileSync)(sessionPath, "utf-8"));
339
+ const page = await this.getPage();
340
+ const context = this.context;
341
+ // Restore cookies
342
+ if (session.cookies.length > 0) {
343
+ await context.addCookies(session.cookies);
344
+ }
345
+ // Navigate to saved URL
346
+ await page.goto(session.url, { waitUntil: "networkidle" });
347
+ // Restore localStorage
348
+ await page.evaluate((data) => {
349
+ for (const [key, value] of Object.entries(data)) {
350
+ window.localStorage.setItem(key, value);
351
+ }
352
+ }, session.localStorage);
353
+ // Restore sessionStorage
354
+ await page.evaluate((data) => {
355
+ for (const [key, value] of Object.entries(data)) {
356
+ window.sessionStorage.setItem(key, value);
357
+ }
358
+ }, session.sessionStorage);
359
+ // Refresh to apply storage
360
+ await page.reload({ waitUntil: "networkidle" });
361
+ // Update lastUsed
362
+ session.lastUsed = new Date().toISOString();
363
+ (0, fs_1.writeFileSync)(sessionPath, JSON.stringify(session, null, 2));
364
+ return true;
365
+ }
366
+ /**
367
+ * List all saved sessions.
368
+ */
369
+ listSessions() {
370
+ const files = (0, fs_1.readdirSync)(this.paths.sessionsDir);
371
+ return files.filter((f) => f.endsWith(".json")).map((f) => f.replace(".json", ""));
372
+ }
373
+ /**
374
+ * Delete a saved session.
375
+ */
376
+ deleteSession(name) {
377
+ const sessionPath = (0, path_1.join)(this.paths.sessionsDir, `${name}.json`);
378
+ if ((0, fs_1.existsSync)(sessionPath)) {
379
+ (0, fs_1.unlinkSync)(sessionPath);
380
+ return true;
381
+ }
382
+ return false;
383
+ }
384
+ // =========================================================================
385
+ // Journeys
386
+ // =========================================================================
387
+ /**
388
+ * Run an autonomous journey.
389
+ */
390
+ async journey(options) {
391
+ const { persona: personaName, startUrl, goal, maxSteps = 20 } = options;
392
+ const persona = (0, personas_js_1.getPersona)(personaName) || personas_js_1.BUILTIN_PERSONAS["first-timer"];
393
+ this.currentPersona = persona;
394
+ // Set viewport based on persona
395
+ if (persona.context?.viewport) {
396
+ this.config.viewportWidth = persona.context.viewport[0];
397
+ this.config.viewportHeight = persona.context.viewport[1];
398
+ }
399
+ const page = await this.getPage();
400
+ const steps = [];
401
+ const consoleLogs = [];
402
+ const frictionPoints = [];
403
+ const startTime = Date.now();
404
+ // Capture console logs
405
+ page.on("console", (msg) => {
406
+ const entry = {
407
+ type: msg.type(),
408
+ text: msg.text().substring(0, 500),
409
+ timestamp: new Date().toISOString(),
410
+ url: msg.location()?.url,
411
+ lineNumber: msg.location()?.lineNumber,
412
+ };
413
+ consoleLogs.push(entry);
414
+ if (msg.type() === "error") {
415
+ frictionPoints.push(`Console error: ${msg.text().substring(0, 100)}`);
416
+ }
417
+ });
418
+ // Navigate to start
419
+ await this.navigate(startUrl);
420
+ steps.push({
421
+ action: "navigate",
422
+ target: startUrl,
423
+ result: `Loaded: ${await page.title()}`,
424
+ screenshot: await this.screenshot(),
425
+ timestamp: new Date().toISOString(),
426
+ });
427
+ // Simple autonomous exploration (simplified for public version)
428
+ // In a full implementation, this would use AI to decide actions
429
+ let stepCount = 0;
430
+ let success = false;
431
+ while (stepCount < maxSteps && !success) {
432
+ stepCount++;
433
+ // Wait with human-like timing
434
+ const delay = this.getHumanDelay(persona);
435
+ await new Promise((r) => setTimeout(r, delay));
436
+ // Try to find clickable elements
437
+ const clickable = await page.evaluate(() => {
438
+ const elements = Array.from(document.querySelectorAll('a, button, [role="button"], input[type="submit"]'));
439
+ return elements.slice(0, 5).map((el) => ({
440
+ tag: el.tagName,
441
+ text: el.textContent?.trim().substring(0, 50),
442
+ href: el.href,
443
+ }));
444
+ });
445
+ if (clickable.length === 0) {
446
+ frictionPoints.push("No clickable elements found");
447
+ break;
448
+ }
449
+ // Click a random element (simplified)
450
+ const target = clickable[Math.floor(Math.random() * clickable.length)];
451
+ const result = await this.click(target.text || target.tag);
452
+ steps.push({
453
+ action: "click",
454
+ target: target.text || target.tag,
455
+ result: result.message,
456
+ screenshot: result.screenshot,
457
+ timestamp: new Date().toISOString(),
458
+ });
459
+ // Check if goal might be achieved (simplified check)
460
+ const pageText = await page.evaluate(() => document.body.innerText.toLowerCase());
461
+ if (goal.toLowerCase().split(" ").some((word) => pageText.includes(word))) {
462
+ success = true;
463
+ }
464
+ }
465
+ // Save final screenshot
466
+ steps.push({
467
+ action: "final",
468
+ result: `Final page: ${await page.title()}`,
469
+ screenshot: await this.screenshot(),
470
+ timestamp: new Date().toISOString(),
471
+ });
472
+ const result = {
473
+ persona: personaName,
474
+ goal,
475
+ steps,
476
+ success,
477
+ frictionPoints,
478
+ totalTime: Date.now() - startTime,
479
+ consoleLogs,
480
+ };
481
+ // Save journey results
482
+ const journeyFile = (0, path_1.join)(this.paths.dataDir, `journey-${Date.now()}.json`);
483
+ (0, fs_1.writeFileSync)(journeyFile, JSON.stringify(result, null, 2));
484
+ return result;
485
+ }
486
+ /**
487
+ * Get human-like delay based on persona.
488
+ */
489
+ getHumanDelay(persona) {
490
+ const timing = persona.humanBehavior?.timing;
491
+ if (!timing)
492
+ return 500;
493
+ const min = timing.reactionTime.min;
494
+ const max = timing.reactionTime.max;
495
+ return Math.floor(Math.random() * (max - min) + min);
496
+ }
497
+ // =========================================================================
498
+ // Constitutional Safety
499
+ // =========================================================================
500
+ /**
501
+ * Classify an action into a safety zone.
502
+ */
503
+ classifyAction(action, target) {
504
+ const lowerTarget = target.toLowerCase();
505
+ // Black zone - never execute
506
+ if (lowerTarget.includes("bypass") ||
507
+ lowerTarget.includes("inject") ||
508
+ lowerTarget.includes("hack")) {
509
+ return "black";
510
+ }
511
+ // Red zone - requires force
512
+ if (action === "click" &&
513
+ (lowerTarget.includes("delete") ||
514
+ lowerTarget.includes("remove") ||
515
+ lowerTarget.includes("submit") ||
516
+ lowerTarget.includes("purchase") ||
517
+ lowerTarget.includes("pay") ||
518
+ lowerTarget.includes("confirm"))) {
519
+ return "red";
520
+ }
521
+ // Yellow zone - log and proceed
522
+ if (action === "click" || action === "fill") {
523
+ return "yellow";
524
+ }
525
+ // Green zone - auto-execute
526
+ return "green";
527
+ }
528
+ /**
529
+ * Log an action to the audit trail.
530
+ */
531
+ audit(action, target, zone, result) {
532
+ const entry = {
533
+ timestamp: new Date().toISOString(),
534
+ action,
535
+ target,
536
+ zone,
537
+ result,
538
+ persona: this.currentPersona?.name,
539
+ };
540
+ const auditFile = (0, path_1.join)(this.paths.auditDir, `audit-${new Date().toISOString().split("T")[0]}.json`);
541
+ let entries = [];
542
+ if ((0, fs_1.existsSync)(auditFile)) {
543
+ entries = JSON.parse((0, fs_1.readFileSync)(auditFile, "utf-8"));
544
+ }
545
+ entries.push(entry);
546
+ (0, fs_1.writeFileSync)(auditFile, JSON.stringify(entries, null, 2));
547
+ }
548
+ // =========================================================================
549
+ // Cleanup
550
+ // =========================================================================
551
+ /**
552
+ * Clean up old files.
553
+ */
554
+ cleanup(options = {}) {
555
+ const { dryRun = false, olderThan = 7, keepScreenshots = 10, keepJourneys = 5, keepSessions = 3, } = options;
556
+ const result = {
557
+ deleted: 0,
558
+ freedBytes: 0,
559
+ details: {
560
+ screenshots: { deleted: 0, freed: 0 },
561
+ journeys: { deleted: 0, freed: 0 },
562
+ sessions: { deleted: 0, freed: 0 },
563
+ audit: { deleted: 0, freed: 0 },
564
+ },
565
+ };
566
+ const cleanDir = (dir, pattern, keep, category) => {
567
+ if (!(0, fs_1.existsSync)(dir))
568
+ return;
569
+ const files = (0, fs_1.readdirSync)(dir)
570
+ .filter((f) => pattern.test(f))
571
+ .map((f) => ({
572
+ name: f,
573
+ path: (0, path_1.join)(dir, f),
574
+ mtime: (0, fs_1.statSync)((0, path_1.join)(dir, f)).mtime,
575
+ size: (0, fs_1.statSync)((0, path_1.join)(dir, f)).size,
576
+ }))
577
+ .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
578
+ const cutoff = Date.now() - olderThan * 24 * 60 * 60 * 1000;
579
+ const toDelete = files.slice(keep).filter((f) => f.mtime.getTime() < cutoff);
580
+ for (const file of toDelete) {
581
+ if (!dryRun) {
582
+ (0, fs_1.unlinkSync)(file.path);
583
+ }
584
+ result.deleted++;
585
+ result.freedBytes += file.size;
586
+ result.details[category].deleted++;
587
+ result.details[category].freed += file.size;
588
+ }
589
+ };
590
+ cleanDir(this.paths.screenshotsDir, /\.png$/i, keepScreenshots, "screenshots");
591
+ cleanDir(this.paths.dataDir, /^journey-.*\.json$/i, keepJourneys, "journeys");
592
+ cleanDir(this.paths.sessionsDir, /\.json$/i, keepSessions, "sessions");
593
+ cleanDir(this.paths.auditDir, /\.json$/i, 30, "audit");
594
+ return result;
595
+ }
596
+ /**
597
+ * Get storage statistics.
598
+ */
599
+ getStorageStats() {
600
+ const stats = {};
601
+ const countDir = (dir, pattern) => {
602
+ if (!(0, fs_1.existsSync)(dir))
603
+ return { count: 0, size: 0 };
604
+ const files = (0, fs_1.readdirSync)(dir).filter((f) => pattern.test(f));
605
+ let size = 0;
606
+ for (const file of files) {
607
+ size += (0, fs_1.statSync)((0, path_1.join)(dir, file)).size;
608
+ }
609
+ return { count: files.length, size };
610
+ };
611
+ stats.screenshots = countDir(this.paths.screenshotsDir, /\.png$/i);
612
+ stats.journeys = countDir(this.paths.dataDir, /^journey-.*\.json$/i);
613
+ stats.sessions = countDir(this.paths.sessionsDir, /\.json$/i);
614
+ stats.audit = countDir(this.paths.auditDir, /\.json$/i);
615
+ return stats;
616
+ }
617
+ }
618
+ exports.CBrowser = CBrowser;
619
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CBrowser CLI
4
+ *
5
+ * AI-powered browser automation from the command line.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG"}