cbrowser 5.0.0 → 5.0.2

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.
package/dist/browser.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * AI-powered browser automation with constitutional safety.
5
5
  */
6
6
  import { type CBrowserConfig } from "./config.js";
7
- import type { SavedSession, NavigationResult, ClickResult, ExtractResult, JourneyResult, CleanupOptions, CleanupResult, JourneyOptions, NetworkMock, NetworkRequest, PerformanceMetrics, PerformanceAuditResult, SmartRetryResult, AssertionResult } from "./types.js";
7
+ import type { SavedSession, NavigationResult, ClickResult, ExtractResult, JourneyResult, CleanupOptions, CleanupResult, JourneyOptions, NetworkMock, NetworkRequest, PerformanceMetrics, PerformanceAuditResult, SmartRetryResult, AssertionResult, SelectorCacheEntry, SelectorCacheStats, PageAnalysis, TestGenerationResult } from "./types.js";
8
8
  export declare class CBrowser {
9
9
  private config;
10
10
  private paths;
@@ -151,11 +151,71 @@ export declare class CBrowser {
151
151
  * Find alternative selectors for an element.
152
152
  */
153
153
  private findAlternativeSelectors;
154
+ private selectorCache;
155
+ /**
156
+ * Get the selector cache file path.
157
+ */
158
+ private getSelectorCachePath;
159
+ /**
160
+ * Load the selector cache from disk.
161
+ */
162
+ private loadSelectorCache;
163
+ /**
164
+ * Save the selector cache to disk.
165
+ */
166
+ private saveSelectorCache;
167
+ /**
168
+ * Get cache key for a selector (includes domain for context).
169
+ */
170
+ private getSelectorCacheKey;
171
+ /**
172
+ * Get current page domain.
173
+ */
174
+ private getCurrentDomain;
154
175
  /**
155
176
  * Cache a working alternative selector for future use.
156
177
  */
157
- private selectorCache;
158
178
  private cacheAlternativeSelector;
179
+ /**
180
+ * Get a cached alternative selector if available.
181
+ */
182
+ private getCachedSelector;
183
+ /**
184
+ * Update cache entry statistics.
185
+ */
186
+ private updateCacheStats;
187
+ /**
188
+ * Get selector cache statistics.
189
+ */
190
+ getSelectorCacheStats(): SelectorCacheStats;
191
+ /**
192
+ * Clear the selector cache.
193
+ */
194
+ clearSelectorCache(domain?: string): number;
195
+ /**
196
+ * List all cached selectors.
197
+ */
198
+ listCachedSelectors(domain?: string): SelectorCacheEntry[];
199
+ /**
200
+ * Analyze a page and generate test scenarios.
201
+ */
202
+ generateTests(url?: string): Promise<TestGenerationResult>;
203
+ /**
204
+ * Analyze page structure for testable elements.
205
+ */
206
+ analyzePage(): Promise<PageAnalysis>;
207
+ /**
208
+ * Generate test scenarios from page analysis.
209
+ */
210
+ private generateTestScenarios;
211
+ /**
212
+ * Generate CBrowser script from tests.
213
+ */
214
+ private generateCBrowserScript;
215
+ /**
216
+ * Generate Playwright test code from tests.
217
+ */
218
+ private generatePlaywrightCode;
159
219
  /**
160
220
  * Analyze a failure and provide AI-powered suggestions.
161
221
  */
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
package/dist/browser.js CHANGED
@@ -821,12 +821,481 @@ class CBrowser {
821
821
  }
822
822
  return alternatives.slice(0, 5);
823
823
  }
824
+ // =========================================================================
825
+ // Tier 5: Self-Healing Selector Cache (v5.0.0)
826
+ // =========================================================================
827
+ selectorCache = null;
828
+ /**
829
+ * Get the selector cache file path.
830
+ */
831
+ getSelectorCachePath() {
832
+ return (0, path_1.join)(this.paths.dataDir, "selector-cache.json");
833
+ }
834
+ /**
835
+ * Load the selector cache from disk.
836
+ */
837
+ loadSelectorCache() {
838
+ if (this.selectorCache)
839
+ return this.selectorCache;
840
+ const cachePath = this.getSelectorCachePath();
841
+ if ((0, fs_1.existsSync)(cachePath)) {
842
+ try {
843
+ const data = (0, fs_1.readFileSync)(cachePath, "utf-8");
844
+ this.selectorCache = JSON.parse(data);
845
+ return this.selectorCache;
846
+ }
847
+ catch {
848
+ // Corrupted cache, start fresh
849
+ }
850
+ }
851
+ this.selectorCache = { version: 1, entries: {} };
852
+ return this.selectorCache;
853
+ }
854
+ /**
855
+ * Save the selector cache to disk.
856
+ */
857
+ saveSelectorCache() {
858
+ if (!this.selectorCache)
859
+ return;
860
+ const cachePath = this.getSelectorCachePath();
861
+ (0, fs_1.writeFileSync)(cachePath, JSON.stringify(this.selectorCache, null, 2));
862
+ }
863
+ /**
864
+ * Get cache key for a selector (includes domain for context).
865
+ */
866
+ getSelectorCacheKey(selector, domain) {
867
+ const d = domain || this.getCurrentDomain();
868
+ return `${d}::${selector.toLowerCase()}`;
869
+ }
870
+ /**
871
+ * Get current page domain.
872
+ */
873
+ getCurrentDomain() {
874
+ try {
875
+ if (this.page) {
876
+ const url = this.page.url();
877
+ return new URL(url).hostname;
878
+ }
879
+ }
880
+ catch {
881
+ // Ignore
882
+ }
883
+ return "unknown";
884
+ }
824
885
  /**
825
886
  * Cache a working alternative selector for future use.
826
887
  */
827
- selectorCache = new Map();
828
- cacheAlternativeSelector(original, working) {
829
- this.selectorCache.set(original.toLowerCase(), working);
888
+ cacheAlternativeSelector(original, working, reason = "Alternative found") {
889
+ const cache = this.loadSelectorCache();
890
+ const key = this.getSelectorCacheKey(original);
891
+ const domain = this.getCurrentDomain();
892
+ cache.entries[key] = {
893
+ originalSelector: original,
894
+ workingSelector: working,
895
+ domain,
896
+ successCount: 1,
897
+ failCount: 0,
898
+ lastUsed: new Date().toISOString(),
899
+ reason,
900
+ };
901
+ this.saveSelectorCache();
902
+ if (this.config.verbose) {
903
+ console.log(`📦 Cached healed selector: "${original}" → "${working}"`);
904
+ }
905
+ }
906
+ /**
907
+ * Get a cached alternative selector if available.
908
+ */
909
+ getCachedSelector(original) {
910
+ const cache = this.loadSelectorCache();
911
+ const key = this.getSelectorCacheKey(original);
912
+ return cache.entries[key] || null;
913
+ }
914
+ /**
915
+ * Update cache entry statistics.
916
+ */
917
+ updateCacheStats(original, success) {
918
+ const cache = this.loadSelectorCache();
919
+ const key = this.getSelectorCacheKey(original);
920
+ const entry = cache.entries[key];
921
+ if (entry) {
922
+ if (success) {
923
+ entry.successCount++;
924
+ }
925
+ else {
926
+ entry.failCount++;
927
+ }
928
+ entry.lastUsed = new Date().toISOString();
929
+ this.saveSelectorCache();
930
+ }
931
+ }
932
+ /**
933
+ * Get selector cache statistics.
934
+ */
935
+ getSelectorCacheStats() {
936
+ const cache = this.loadSelectorCache();
937
+ const entries = Object.values(cache.entries);
938
+ const byDomain = {};
939
+ for (const entry of entries) {
940
+ byDomain[entry.domain] = (byDomain[entry.domain] || 0) + 1;
941
+ }
942
+ const topHealedSelectors = entries
943
+ .sort((a, b) => b.successCount - a.successCount)
944
+ .slice(0, 10)
945
+ .map(e => ({
946
+ original: e.originalSelector,
947
+ working: e.workingSelector,
948
+ heals: e.successCount,
949
+ }));
950
+ return {
951
+ totalEntries: entries.length,
952
+ totalHeals: entries.reduce((sum, e) => sum + e.successCount, 0),
953
+ byDomain,
954
+ topHealedSelectors,
955
+ };
956
+ }
957
+ /**
958
+ * Clear the selector cache.
959
+ */
960
+ clearSelectorCache(domain) {
961
+ const cache = this.loadSelectorCache();
962
+ let cleared = 0;
963
+ if (domain) {
964
+ // Clear only for specific domain
965
+ for (const [key, entry] of Object.entries(cache.entries)) {
966
+ if (entry.domain === domain) {
967
+ delete cache.entries[key];
968
+ cleared++;
969
+ }
970
+ }
971
+ }
972
+ else {
973
+ // Clear all
974
+ cleared = Object.keys(cache.entries).length;
975
+ cache.entries = {};
976
+ }
977
+ this.saveSelectorCache();
978
+ return cleared;
979
+ }
980
+ /**
981
+ * List all cached selectors.
982
+ */
983
+ listCachedSelectors(domain) {
984
+ const cache = this.loadSelectorCache();
985
+ let entries = Object.values(cache.entries);
986
+ if (domain) {
987
+ entries = entries.filter(e => e.domain === domain);
988
+ }
989
+ return entries.sort((a, b) => b.successCount - a.successCount);
990
+ }
991
+ // =========================================================================
992
+ // Tier 5: AI Test Generation (v5.0.0)
993
+ // =========================================================================
994
+ /**
995
+ * Analyze a page and generate test scenarios.
996
+ */
997
+ async generateTests(url) {
998
+ if (url) {
999
+ await this.navigate(url);
1000
+ }
1001
+ const page = await this.getPage();
1002
+ const analysis = await this.analyzePage();
1003
+ const tests = this.generateTestScenarios(analysis);
1004
+ return {
1005
+ url: page.url(),
1006
+ analysis,
1007
+ tests,
1008
+ cbrowserScript: this.generateCBrowserScript(tests, page.url()),
1009
+ playwrightCode: this.generatePlaywrightCode(tests, page.url()),
1010
+ };
1011
+ }
1012
+ /**
1013
+ * Analyze page structure for testable elements.
1014
+ */
1015
+ async analyzePage() {
1016
+ const page = await this.getPage();
1017
+ const analysis = await page.evaluate(() => {
1018
+ const getSelector = (el) => {
1019
+ if (el.id)
1020
+ return `#${el.id}`;
1021
+ if (el.getAttribute("data-testid"))
1022
+ return `[data-testid="${el.getAttribute("data-testid")}"]`;
1023
+ if (el.getAttribute("name"))
1024
+ return `[name="${el.getAttribute("name")}"]`;
1025
+ const text = el.textContent?.trim().substring(0, 30);
1026
+ if (text)
1027
+ return `text="${text}"`;
1028
+ return el.tagName.toLowerCase();
1029
+ };
1030
+ // Analyze forms
1031
+ const forms = Array.from(document.querySelectorAll("form")).map(form => {
1032
+ const fields = Array.from(form.querySelectorAll("input, select, textarea")).map(el => ({
1033
+ type: el.tagName.toLowerCase(),
1034
+ selector: getSelector(el),
1035
+ name: el.getAttribute("name") || undefined,
1036
+ id: el.id || undefined,
1037
+ placeholder: el.placeholder || undefined,
1038
+ inputType: el.type || undefined,
1039
+ required: el.required || false,
1040
+ ariaLabel: el.getAttribute("aria-label") || undefined,
1041
+ }));
1042
+ const submitBtn = form.querySelector('button[type="submit"], input[type="submit"]');
1043
+ const submitButton = submitBtn ? {
1044
+ type: "button",
1045
+ selector: getSelector(submitBtn),
1046
+ text: submitBtn.textContent?.trim(),
1047
+ } : undefined;
1048
+ // Determine form purpose
1049
+ let purpose = "unknown";
1050
+ const formHtml = form.innerHTML.toLowerCase();
1051
+ if (formHtml.includes("password") && formHtml.includes("email")) {
1052
+ purpose = fields.length <= 3 ? "login" : "signup";
1053
+ }
1054
+ else if (formHtml.includes("search")) {
1055
+ purpose = "search";
1056
+ }
1057
+ else if (formHtml.includes("contact") || formHtml.includes("message")) {
1058
+ purpose = "contact";
1059
+ }
1060
+ else if (formHtml.includes("card") || formHtml.includes("payment")) {
1061
+ purpose = "checkout";
1062
+ }
1063
+ return {
1064
+ action: form.action || undefined,
1065
+ method: form.method || undefined,
1066
+ fields,
1067
+ submitButton,
1068
+ purpose,
1069
+ };
1070
+ });
1071
+ // Analyze buttons
1072
+ const buttons = Array.from(document.querySelectorAll('button, [role="button"], input[type="button"]'))
1073
+ .slice(0, 20)
1074
+ .map(el => ({
1075
+ type: "button",
1076
+ selector: getSelector(el),
1077
+ text: el.textContent?.trim(),
1078
+ id: el.id || undefined,
1079
+ ariaLabel: el.getAttribute("aria-label") || undefined,
1080
+ }));
1081
+ // Analyze links
1082
+ const links = Array.from(document.querySelectorAll("a[href]"))
1083
+ .slice(0, 20)
1084
+ .map(el => ({
1085
+ type: "link",
1086
+ selector: getSelector(el),
1087
+ text: el.textContent?.trim(),
1088
+ href: el.href,
1089
+ }));
1090
+ // Analyze standalone inputs
1091
+ const inputs = Array.from(document.querySelectorAll("input:not(form input), textarea:not(form textarea)"))
1092
+ .slice(0, 10)
1093
+ .map(el => ({
1094
+ type: "input",
1095
+ selector: getSelector(el),
1096
+ name: el.getAttribute("name") || undefined,
1097
+ placeholder: el.placeholder || undefined,
1098
+ inputType: el.type || undefined,
1099
+ }));
1100
+ // Analyze selects
1101
+ const selects = Array.from(document.querySelectorAll("select"))
1102
+ .slice(0, 10)
1103
+ .map(el => ({
1104
+ type: "select",
1105
+ selector: getSelector(el),
1106
+ name: el.getAttribute("name") || undefined,
1107
+ id: el.id || undefined,
1108
+ }));
1109
+ return {
1110
+ url: window.location.href,
1111
+ title: document.title,
1112
+ forms,
1113
+ buttons,
1114
+ links,
1115
+ inputs,
1116
+ selects,
1117
+ hasLogin: forms.some(f => f.purpose === "login"),
1118
+ hasSearch: forms.some(f => f.purpose === "search") || inputs.some(i => i.inputType === "search"),
1119
+ hasNavigation: links.filter(l => l.href?.startsWith(window.location.origin)).length > 3,
1120
+ };
1121
+ });
1122
+ return analysis;
1123
+ }
1124
+ /**
1125
+ * Generate test scenarios from page analysis.
1126
+ */
1127
+ generateTestScenarios(analysis) {
1128
+ const tests = [];
1129
+ // Generate form tests
1130
+ for (const form of analysis.forms) {
1131
+ if (form.purpose === "login") {
1132
+ tests.push({
1133
+ name: "Login Form Submission",
1134
+ description: "Test the login form with valid credentials",
1135
+ steps: [
1136
+ { action: "navigate", target: analysis.url, description: "Navigate to page" },
1137
+ ...form.fields.filter(f => f.inputType !== "submit").map(f => ({
1138
+ action: "fill",
1139
+ target: f.selector,
1140
+ value: f.inputType === "email" ? "test@example.com" : f.inputType === "password" ? "TestPassword123" : "test value",
1141
+ description: `Fill ${f.name || f.placeholder || "field"}`,
1142
+ })),
1143
+ { action: "click", target: form.submitButton?.selector || "Submit", description: "Submit form" },
1144
+ { action: "wait", value: "1000", description: "Wait for response" },
1145
+ ],
1146
+ assertions: ["url contains '/dashboard' OR url contains '/home'", "page does not contain 'error'"],
1147
+ });
1148
+ tests.push({
1149
+ name: "Login Form Validation",
1150
+ description: "Test login form with invalid credentials",
1151
+ steps: [
1152
+ { action: "navigate", target: analysis.url, description: "Navigate to page" },
1153
+ { action: "fill", target: form.fields.find(f => f.inputType === "email")?.selector || "", value: "invalid", description: "Enter invalid email" },
1154
+ { action: "click", target: form.submitButton?.selector || "Submit", description: "Submit form" },
1155
+ ],
1156
+ assertions: ["page contains 'error' OR page contains 'invalid'"],
1157
+ });
1158
+ }
1159
+ if (form.purpose === "search") {
1160
+ tests.push({
1161
+ name: "Search Functionality",
1162
+ description: "Test search with a query",
1163
+ steps: [
1164
+ { action: "navigate", target: analysis.url, description: "Navigate to page" },
1165
+ { action: "fill", target: form.fields[0]?.selector || "[type='search']", value: "test query", description: "Enter search term" },
1166
+ { action: "click", target: form.submitButton?.selector || "Search", description: "Submit search" },
1167
+ ],
1168
+ assertions: ["url contains 'search' OR url contains 'q='", "page contains 'result'"],
1169
+ });
1170
+ }
1171
+ }
1172
+ // Generate navigation tests
1173
+ if (analysis.hasNavigation) {
1174
+ const navLinks = analysis.links.filter(l => l.href?.startsWith(analysis.url.split("/").slice(0, 3).join("/")));
1175
+ if (navLinks.length > 0) {
1176
+ tests.push({
1177
+ name: "Navigation Links",
1178
+ description: "Test main navigation links work",
1179
+ steps: navLinks.slice(0, 5).flatMap(link => [
1180
+ { action: "navigate", target: analysis.url, description: "Start from home" },
1181
+ { action: "click", target: link.selector, description: `Click ${link.text || "link"}` },
1182
+ { action: "assert", target: `url contains '${new URL(link.href || "").pathname}'`, description: "Verify navigation" },
1183
+ ]),
1184
+ assertions: ["no console errors"],
1185
+ });
1186
+ }
1187
+ }
1188
+ // Generate button interaction tests
1189
+ const actionButtons = analysis.buttons.filter(b => b.text && !b.text.toLowerCase().includes("submit") && b.text.length < 30);
1190
+ if (actionButtons.length > 0) {
1191
+ tests.push({
1192
+ name: "Button Interactions",
1193
+ description: "Test clickable buttons respond correctly",
1194
+ steps: [
1195
+ { action: "navigate", target: analysis.url, description: "Navigate to page" },
1196
+ ...actionButtons.slice(0, 3).map(btn => ({
1197
+ action: "click",
1198
+ target: btn.selector,
1199
+ description: `Click "${btn.text}"`,
1200
+ })),
1201
+ ],
1202
+ assertions: ["no console errors", "page is interactive"],
1203
+ });
1204
+ }
1205
+ // Default smoke test
1206
+ tests.push({
1207
+ name: "Page Load Smoke Test",
1208
+ description: "Verify page loads without errors",
1209
+ steps: [
1210
+ { action: "navigate", target: analysis.url, description: "Navigate to page" },
1211
+ { action: "assert", target: `title contains '${analysis.title.split(" ")[0]}'`, description: "Verify title" },
1212
+ ],
1213
+ assertions: ["page loads successfully", "no console errors"],
1214
+ });
1215
+ return tests;
1216
+ }
1217
+ /**
1218
+ * Generate CBrowser script from tests.
1219
+ */
1220
+ generateCBrowserScript(tests, url) {
1221
+ let script = `# CBrowser Test Script\n# Generated for: ${url}\n# Date: ${new Date().toISOString()}\n\n`;
1222
+ for (const test of tests) {
1223
+ script += `# ${test.name}\n`;
1224
+ script += `# ${test.description}\n`;
1225
+ for (const step of test.steps) {
1226
+ switch (step.action) {
1227
+ case "navigate":
1228
+ script += `navigate "${step.target}"\n`;
1229
+ break;
1230
+ case "click":
1231
+ script += `click "${step.target}"\n`;
1232
+ break;
1233
+ case "fill":
1234
+ script += `fill "${step.target}" "${step.value}"\n`;
1235
+ break;
1236
+ case "assert":
1237
+ script += `assert "${step.target}"\n`;
1238
+ break;
1239
+ case "wait":
1240
+ script += `# wait ${step.value}ms\n`;
1241
+ break;
1242
+ }
1243
+ }
1244
+ for (const assertion of test.assertions) {
1245
+ script += `assert "${assertion}"\n`;
1246
+ }
1247
+ script += "\n";
1248
+ }
1249
+ return script;
1250
+ }
1251
+ /**
1252
+ * Generate Playwright test code from tests.
1253
+ */
1254
+ generatePlaywrightCode(tests, url) {
1255
+ let code = `// Playwright Test Code\n// Generated for: ${url}\n// Date: ${new Date().toISOString()}\n\n`;
1256
+ code += `import { test, expect } from '@playwright/test';\n\n`;
1257
+ for (const testDef of tests) {
1258
+ const testName = testDef.name.toLowerCase().replace(/\s+/g, "-");
1259
+ code += `test('${testDef.name}', async ({ page }) => {\n`;
1260
+ code += ` // ${testDef.description}\n\n`;
1261
+ for (const step of testDef.steps) {
1262
+ switch (step.action) {
1263
+ case "navigate":
1264
+ code += ` await page.goto('${step.target}');\n`;
1265
+ break;
1266
+ case "click":
1267
+ if (step.target?.startsWith("text=")) {
1268
+ code += ` await page.getByText('${step.target.replace("text=", "").replace(/"/g, "")}').click();\n`;
1269
+ }
1270
+ else {
1271
+ code += ` await page.locator('${step.target}').click();\n`;
1272
+ }
1273
+ break;
1274
+ case "fill":
1275
+ code += ` await page.locator('${step.target}').fill('${step.value}');\n`;
1276
+ break;
1277
+ case "assert":
1278
+ if (step.target?.includes("url contains")) {
1279
+ const match = step.target.match(/url contains '([^']+)'/);
1280
+ if (match) {
1281
+ code += ` await expect(page).toHaveURL(/${match[1]}/);\n`;
1282
+ }
1283
+ }
1284
+ else if (step.target?.includes("title contains")) {
1285
+ const match = step.target.match(/title contains '([^']+)'/);
1286
+ if (match) {
1287
+ code += ` await expect(page).toHaveTitle(/${match[1]}/);\n`;
1288
+ }
1289
+ }
1290
+ break;
1291
+ case "wait":
1292
+ code += ` await page.waitForTimeout(${step.value});\n`;
1293
+ break;
1294
+ }
1295
+ }
1296
+ code += `});\n\n`;
1297
+ }
1298
+ return code;
830
1299
  }
831
1300
  /**
832
1301
  * Analyze a failure and provide AI-powered suggestions.
@@ -963,8 +1432,31 @@ class CBrowser {
963
1432
  /**
964
1433
  * Find an element using multiple strategies.
965
1434
  */
966
- async findElement(selector) {
1435
+ async findElement(selector, options = {}) {
967
1436
  const page = await this.getPage();
1437
+ // Strategy 0: Check self-healing cache first (unless skipped)
1438
+ if (!options.skipCache) {
1439
+ const cached = this.getCachedSelector(selector);
1440
+ if (cached) {
1441
+ try {
1442
+ const cachedElement = await this.findElement(cached.workingSelector, { skipCache: true });
1443
+ if (cachedElement && await cachedElement.count() > 0) {
1444
+ this.updateCacheStats(selector, true);
1445
+ if (this.config.verbose) {
1446
+ console.log(`🔧 Self-healed: "${selector}" → "${cached.workingSelector}"`);
1447
+ }
1448
+ return cachedElement;
1449
+ }
1450
+ else {
1451
+ // Cached selector no longer works
1452
+ this.updateCacheStats(selector, false);
1453
+ }
1454
+ }
1455
+ catch {
1456
+ this.updateCacheStats(selector, false);
1457
+ }
1458
+ }
1459
+ }
968
1460
  // Strategy 1: Direct CSS selector
969
1461
  if (selector.startsWith("css:")) {
970
1462
  return page.locator(selector.slice(4)).first();