@shadowcoderr/context-graph 0.3.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.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/analyzers/a11y-extractor.d.ts +15 -0
  4. package/dist/analyzers/a11y-extractor.d.ts.map +1 -0
  5. package/dist/analyzers/a11y-extractor.js +148 -0
  6. package/dist/analyzers/a11y-extractor.js.map +1 -0
  7. package/dist/analyzers/dom-analyzer.d.ts +20 -0
  8. package/dist/analyzers/dom-analyzer.d.ts.map +1 -0
  9. package/dist/analyzers/dom-analyzer.js +126 -0
  10. package/dist/analyzers/dom-analyzer.js.map +1 -0
  11. package/dist/analyzers/locator-generator.d.ts +13 -0
  12. package/dist/analyzers/locator-generator.d.ts.map +1 -0
  13. package/dist/analyzers/locator-generator.js +381 -0
  14. package/dist/analyzers/locator-generator.js.map +1 -0
  15. package/dist/analyzers/network-logger.d.ts +15 -0
  16. package/dist/analyzers/network-logger.d.ts.map +1 -0
  17. package/dist/analyzers/network-logger.js +71 -0
  18. package/dist/analyzers/network-logger.js.map +1 -0
  19. package/dist/cli/index.d.ts +2 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +155 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/config/defaults.d.ts +3 -0
  24. package/dist/config/defaults.d.ts.map +1 -0
  25. package/dist/config/defaults.js +54 -0
  26. package/dist/config/defaults.js.map +1 -0
  27. package/dist/config/loader.d.ts +3 -0
  28. package/dist/config/loader.d.ts.map +1 -0
  29. package/dist/config/loader.js +75 -0
  30. package/dist/config/loader.js.map +1 -0
  31. package/dist/config/schema.d.ts +168 -0
  32. package/dist/config/schema.d.ts.map +1 -0
  33. package/dist/config/schema.js +104 -0
  34. package/dist/config/schema.js.map +1 -0
  35. package/dist/core/browser-adapter.d.ts +24 -0
  36. package/dist/core/browser-adapter.d.ts.map +1 -0
  37. package/dist/core/browser-adapter.js +208 -0
  38. package/dist/core/browser-adapter.js.map +1 -0
  39. package/dist/core/capture-engine.d.ts +52 -0
  40. package/dist/core/capture-engine.d.ts.map +1 -0
  41. package/dist/core/capture-engine.js +593 -0
  42. package/dist/core/capture-engine.js.map +1 -0
  43. package/dist/core/runtime.d.ts +38 -0
  44. package/dist/core/runtime.d.ts.map +1 -0
  45. package/dist/core/runtime.js +648 -0
  46. package/dist/core/runtime.js.map +1 -0
  47. package/dist/prompts/init-prompt.d.ts +12 -0
  48. package/dist/prompts/init-prompt.d.ts.map +1 -0
  49. package/dist/prompts/init-prompt.js +128 -0
  50. package/dist/prompts/init-prompt.js.map +1 -0
  51. package/dist/registry/components-registry.d.ts +97 -0
  52. package/dist/registry/components-registry.d.ts.map +1 -0
  53. package/dist/registry/components-registry.js +469 -0
  54. package/dist/registry/components-registry.js.map +1 -0
  55. package/dist/registry/index.d.ts +2 -0
  56. package/dist/registry/index.d.ts.map +1 -0
  57. package/dist/registry/index.js +7 -0
  58. package/dist/registry/index.js.map +1 -0
  59. package/dist/security/patterns.d.ts +4 -0
  60. package/dist/security/patterns.d.ts.map +1 -0
  61. package/dist/security/patterns.js +65 -0
  62. package/dist/security/patterns.js.map +1 -0
  63. package/dist/security/redactor.d.ts +26 -0
  64. package/dist/security/redactor.d.ts.map +1 -0
  65. package/dist/security/redactor.js +128 -0
  66. package/dist/security/redactor.js.map +1 -0
  67. package/dist/security/validator.d.ts +11 -0
  68. package/dist/security/validator.d.ts.map +1 -0
  69. package/dist/security/validator.js +62 -0
  70. package/dist/security/validator.js.map +1 -0
  71. package/dist/storage/engine.d.ts +45 -0
  72. package/dist/storage/engine.d.ts.map +1 -0
  73. package/dist/storage/engine.js +479 -0
  74. package/dist/storage/engine.js.map +1 -0
  75. package/dist/storage/manifest.d.ts +10 -0
  76. package/dist/storage/manifest.d.ts.map +1 -0
  77. package/dist/storage/manifest.js +98 -0
  78. package/dist/storage/manifest.js.map +1 -0
  79. package/dist/storage/serializer.d.ts +9 -0
  80. package/dist/storage/serializer.d.ts.map +1 -0
  81. package/dist/storage/serializer.js +22 -0
  82. package/dist/storage/serializer.js.map +1 -0
  83. package/dist/types/capture.d.ts +206 -0
  84. package/dist/types/capture.d.ts.map +1 -0
  85. package/dist/types/capture.js +3 -0
  86. package/dist/types/capture.js.map +1 -0
  87. package/dist/types/config.d.ts +63 -0
  88. package/dist/types/config.d.ts.map +1 -0
  89. package/dist/types/config.js +3 -0
  90. package/dist/types/config.js.map +1 -0
  91. package/dist/types/registry.d.ts +94 -0
  92. package/dist/types/registry.d.ts.map +1 -0
  93. package/dist/types/registry.js +3 -0
  94. package/dist/types/registry.js.map +1 -0
  95. package/dist/types/storage.d.ts +57 -0
  96. package/dist/types/storage.d.ts.map +1 -0
  97. package/dist/types/storage.js +3 -0
  98. package/dist/types/storage.js.map +1 -0
  99. package/dist/utils/hash.d.ts +3 -0
  100. package/dist/utils/hash.d.ts.map +1 -0
  101. package/dist/utils/hash.js +26 -0
  102. package/dist/utils/hash.js.map +1 -0
  103. package/dist/utils/logger.d.ts +20 -0
  104. package/dist/utils/logger.d.ts.map +1 -0
  105. package/dist/utils/logger.js +86 -0
  106. package/dist/utils/logger.js.map +1 -0
  107. package/dist/utils/pom-generator.d.ts +12 -0
  108. package/dist/utils/pom-generator.d.ts.map +1 -0
  109. package/dist/utils/pom-generator.js +83 -0
  110. package/dist/utils/pom-generator.js.map +1 -0
  111. package/dist/utils/validators.d.ts +7 -0
  112. package/dist/utils/validators.d.ts.map +1 -0
  113. package/dist/utils/validators.js +51 -0
  114. package/dist/utils/validators.js.map +1 -0
  115. package/package.json +70 -0
@@ -0,0 +1,479 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.StorageEngine = void 0;
37
+ // Developer: Shadow Coderr, Architect
38
+ const fs = __importStar(require("fs-extra"));
39
+ const path = __importStar(require("path"));
40
+ const logger_1 = require("../utils/logger");
41
+ class StorageEngine {
42
+ outputDir;
43
+ prettyJson;
44
+ scriptsDir;
45
+ contentHashHistory = new Map(); // pageName -> array of hashes
46
+ forceCapture = false;
47
+ constructor(outputDir, prettyJson = true, forceCapture = false) {
48
+ this.outputDir = path.resolve(outputDir);
49
+ this.prettyJson = prettyJson;
50
+ this.scriptsDir = path.join(this.outputDir, 'scripts');
51
+ this.forceCapture = forceCapture;
52
+ }
53
+ /**
54
+ * Set force capture mode - always write artifacts even if content hash unchanged
55
+ */
56
+ setForceCapture(force) {
57
+ this.forceCapture = force;
58
+ }
59
+ /**
60
+ * Check if content has changed since last capture
61
+ */
62
+ hasContentChanged(pageName, contentHash) {
63
+ const history = this.contentHashHistory.get(pageName);
64
+ if (!history || history.length === 0)
65
+ return true;
66
+ return !history.includes(contentHash);
67
+ }
68
+ /**
69
+ * Record content hash for a page
70
+ */
71
+ recordContentHash(pageName, contentHash) {
72
+ const history = this.contentHashHistory.get(pageName) || [];
73
+ history.push(contentHash);
74
+ // Keep last 10 hashes per page
75
+ if (history.length > 10)
76
+ history.shift();
77
+ this.contentHashHistory.set(pageName, history);
78
+ }
79
+ async initialize() {
80
+ // Create the root output directory and scripts directory
81
+ await fs.ensureDir(this.outputDir);
82
+ await fs.ensureDir(this.scriptsDir);
83
+ }
84
+ async getUniqueScriptPath(url) {
85
+ try {
86
+ const urlObj = new URL(url);
87
+ const hostname = urlObj.hostname.replace(/[^a-zA-Z0-9\-_.]/g, '_'); // Sanitize hostname
88
+ let scriptPath = path.join(this.scriptsDir, `${hostname}.spec.ts`);
89
+ let counter = 1;
90
+ // Check if file exists and increment counter if needed
91
+ while (await fs.pathExists(scriptPath)) {
92
+ scriptPath = path.join(this.scriptsDir, `${hostname}_${counter}.spec.ts`);
93
+ counter++;
94
+ }
95
+ return scriptPath;
96
+ }
97
+ catch (error) {
98
+ logger_1.logger.error(`Error generating unique script path: ${error.message}`);
99
+ // Fallback to a timestamp-based name
100
+ const timestamp = Date.now();
101
+ return path.join(this.scriptsDir, `recording_${timestamp}.spec.ts`);
102
+ }
103
+ }
104
+ async mergeRecordedScript(url, recordedScriptPath) {
105
+ const urlObj = new URL(url);
106
+ const hostname = urlObj.hostname.replace(/[^a-zA-Z0-9\-_.]/g, '_');
107
+ const mergedPath = path.join(this.scriptsDir, `${hostname}.spec.ts`);
108
+ if (!(await fs.pathExists(recordedScriptPath))) {
109
+ throw new Error(`Recorded script not found: ${recordedScriptPath}`);
110
+ }
111
+ const incoming = await fs.readFile(recordedScriptPath, 'utf8');
112
+ const existing = (await fs.pathExists(mergedPath)) ? await fs.readFile(mergedPath, 'utf8') : '';
113
+ const merged = this.mergePlaywrightSpec(existing, incoming);
114
+ await fs.writeFile(mergedPath, merged);
115
+ if (path.resolve(recordedScriptPath) !== path.resolve(mergedPath)) {
116
+ try {
117
+ await fs.remove(recordedScriptPath);
118
+ }
119
+ catch (e) {
120
+ logger_1.logger.warn(`Failed to remove merged script ${recordedScriptPath}: ${e.message}`);
121
+ }
122
+ }
123
+ return mergedPath;
124
+ }
125
+ mergePlaywrightSpec(existing, incoming) {
126
+ const existingLines = existing.split(/\r?\n/);
127
+ const incomingLines = incoming.split(/\r?\n/);
128
+ const header = [];
129
+ const seenHeader = new Set();
130
+ const takeHeader = (lines) => {
131
+ for (const line of lines) {
132
+ const trimmed = line.trim();
133
+ if (!trimmed)
134
+ continue;
135
+ if (!/^import\s/.test(trimmed))
136
+ continue;
137
+ if (seenHeader.has(trimmed))
138
+ continue;
139
+ seenHeader.add(trimmed);
140
+ header.push(trimmed);
141
+ }
142
+ };
143
+ takeHeader(existingLines);
144
+ takeHeader(incomingLines);
145
+ if (header.length === 0) {
146
+ header.push("import { test, expect } from '@playwright/test';");
147
+ }
148
+ const extractSteps = (lines) => {
149
+ const steps = [];
150
+ let inTest = false;
151
+ for (const line of lines) {
152
+ if (!inTest) {
153
+ if (/^\s*test\(/.test(line)) {
154
+ inTest = true;
155
+ }
156
+ continue;
157
+ }
158
+ if (/^\s*\}\);\s*$/.test(line)) {
159
+ break;
160
+ }
161
+ const trimmed = line.trimEnd();
162
+ if (!trimmed.trim())
163
+ continue;
164
+ if (/^\s*\/\//.test(trimmed))
165
+ continue;
166
+ steps.push(trimmed);
167
+ }
168
+ return steps;
169
+ };
170
+ const existingSteps = extractSteps(existingLines);
171
+ const incomingSteps = extractSteps(incomingLines);
172
+ const mergedSteps = [];
173
+ const seenSteps = new Set();
174
+ const addSteps = (steps) => {
175
+ for (const step of steps) {
176
+ const key = step.trim();
177
+ if (seenSteps.has(key))
178
+ continue;
179
+ seenSteps.add(key);
180
+ mergedSteps.push(step);
181
+ }
182
+ };
183
+ addSteps(existingSteps);
184
+ addSteps(incomingSteps);
185
+ const indent = (s) => (s.startsWith(' ') ? s : ` ${s.trimStart()}`);
186
+ return [
187
+ ...header,
188
+ '',
189
+ "test('test', async ({ page }) => {",
190
+ ...mergedSteps.map(indent),
191
+ '});',
192
+ '',
193
+ ].join('\n');
194
+ }
195
+ async savePageSnapshot(snapshot) {
196
+ const domain = snapshot.metadata.domain;
197
+ const pageName = snapshot.metadata.pageName || 'page';
198
+ const contentHash = snapshot.metadata.contentHash || '';
199
+ // Derive logical domain name (e.g., www.saucedemo.com -> saucedemo, saucedemo.com -> saucedemo)
200
+ const domainName = (() => {
201
+ const parts = domain.split('.');
202
+ // Remove 'www' prefix if present
203
+ const filtered = parts.filter(p => p.toLowerCase() !== 'www');
204
+ // Get the main domain name (second-to-last part, or first if only one part)
205
+ if (filtered.length >= 2) {
206
+ return filtered[filtered.length - 2];
207
+ }
208
+ return filtered[0] || parts[0];
209
+ })();
210
+ const domainDir = path.join(this.outputDir, domainName);
211
+ const pageDir = path.join(domainDir, 'pages', pageName);
212
+ // Check if we should save (force capture or content changed)
213
+ const shouldSave = this.forceCapture || this.hasContentChanged(pageName, contentHash);
214
+ if (!shouldSave) {
215
+ logger_1.logger.info(`Skipping save for ${pageName}: content unchanged (hash: ${contentHash})`);
216
+ return;
217
+ }
218
+ logger_1.logger.info(`Saving page snapshot: domain=${domainName}, page=${pageName}, url=${snapshot.metadata.url}, forceCapture=${this.forceCapture}`);
219
+ await fs.ensureDir(pageDir);
220
+ // Record the content hash
221
+ if (contentHash) {
222
+ this.recordContentHash(pageName, contentHash);
223
+ }
224
+ // Save metadata
225
+ await this.writeJson(path.join(pageDir, 'metadata.json'), snapshot.metadata);
226
+ // Save DOM snapshot as 'DOM' file (beautified)
227
+ const beautifiedDOM = this.beautifyHTML(snapshot.domSnapshot);
228
+ await fs.writeFile(path.join(pageDir, 'DOM'), beautifiedDOM);
229
+ // Save accessibility tree
230
+ await this.writeJson(path.join(pageDir, 'a11y_tree.json'), snapshot.a11yTree);
231
+ // Save locators
232
+ await this.writeJson(path.join(pageDir, 'locators.json'), snapshot.locators);
233
+ // Save frames
234
+ await this.writeJson(path.join(pageDir, 'frames.json'), snapshot.frames);
235
+ // Save serialized frame contents as separate files where present
236
+ const framesDir = path.join(pageDir, 'frames');
237
+ await fs.ensureDir(framesDir);
238
+ let frameCounter = 0;
239
+ const writeFrame = async (frame) => {
240
+ const id = `frame_${String(frameCounter++).padStart(3, '0')}`;
241
+ if (frame && frame.content) {
242
+ const filename = path.join(framesDir, `${id}_${(frame.name || 'main').replace(/[^a-z0-9\-_.]/gi, '_')}.html`);
243
+ await fs.writeFile(filename, frame.content);
244
+ // Replace content with relative path reference to keep JSON small
245
+ frame.contentFile = path.relative(pageDir, filename).replace(/\\/g, '/');
246
+ }
247
+ if (frame && frame.children && frame.children.length > 0) {
248
+ for (const child of frame.children) {
249
+ await writeFrame(child);
250
+ }
251
+ }
252
+ };
253
+ try {
254
+ if (snapshot.frames) {
255
+ await writeFrame(snapshot.frames);
256
+ // Rewrite frames.json to include contentFile references
257
+ await this.writeJson(path.join(pageDir, 'frames.json'), snapshot.frames);
258
+ }
259
+ }
260
+ catch (err) {
261
+ logger_1.logger.warn('Failed to write frame contents: ' + err.message);
262
+ }
263
+ // Save console errors and warnings (separate file)
264
+ const consoleErrors = {
265
+ errors: snapshot.consoleMessages
266
+ .filter((msg) => msg.type === 'error')
267
+ .map((msg) => ({
268
+ timestamp: msg.timestamp,
269
+ message: msg.message,
270
+ source: `${msg.location?.url || ''}:${msg.location?.lineNumber || 0}:${msg.location?.columnNumber || 0}`,
271
+ stack: msg.stack,
272
+ })),
273
+ warnings: snapshot.consoleMessages
274
+ .filter((msg) => msg.type === 'warn')
275
+ .map((msg) => ({
276
+ timestamp: msg.timestamp,
277
+ message: msg.message,
278
+ source: `${msg.location?.url || ''}:${msg.location?.lineNumber || 0}:${msg.location?.columnNumber || 0}`,
279
+ })),
280
+ };
281
+ if (consoleErrors.errors.length > 0 || consoleErrors.warnings.length > 0) {
282
+ await this.writeJson(path.join(pageDir, 'console_errors.json'), consoleErrors);
283
+ }
284
+ logger_1.logger.info(`Saved page snapshot: ${pageName}`);
285
+ }
286
+ /**
287
+ * Save the components registry and update manifest reference
288
+ */
289
+ async saveComponentsRegistry(registry, domainName) {
290
+ const registryPath = path.join(this.outputDir, domainName, 'components_registry.json');
291
+ await fs.ensureDir(path.dirname(registryPath));
292
+ await this.writeJson(registryPath, registry);
293
+ logger_1.logger.info(`Saved components registry to ${registryPath}`);
294
+ }
295
+ /**
296
+ * Update manifest with components registry reference
297
+ */
298
+ async updateManifestWithComponents(domainName, totalComponents) {
299
+ const manifestPath = path.join(this.outputDir, 'global_manifest.json');
300
+ if (await fs.pathExists(manifestPath)) {
301
+ const manifest = await fs.readJson(manifestPath);
302
+ manifest.componentsRegistry = {
303
+ path: `${domainName}/components_registry.json`,
304
+ totalComponents,
305
+ lastUpdated: new Date().toISOString(),
306
+ };
307
+ manifest.statistics.totalComponents = totalComponents;
308
+ manifest.lastUpdated = new Date().toISOString();
309
+ await this.writeJson(manifestPath, manifest);
310
+ }
311
+ }
312
+ async updateGlobalManifest(entry) {
313
+ const manifestPath = path.join(this.outputDir, 'global_manifest.json');
314
+ let manifest;
315
+ if (await fs.pathExists(manifestPath)) {
316
+ manifest = await fs.readJson(manifestPath);
317
+ }
318
+ else {
319
+ manifest = {
320
+ version: '0.3.0',
321
+ createdAt: new Date().toISOString(),
322
+ lastUpdated: new Date().toISOString(),
323
+ sessions: [],
324
+ domains: [],
325
+ statistics: {
326
+ totalSessions: 0,
327
+ totalDomains: 0,
328
+ totalPages: 0,
329
+ totalNetworkRequests: 0,
330
+ totalScreenshots: 0,
331
+ storageSize: '0 MB',
332
+ },
333
+ };
334
+ }
335
+ // Update domains
336
+ let domainEntry = manifest.domains.find(d => d.domain === entry.domain);
337
+ if (!domainEntry) {
338
+ domainEntry = {
339
+ domain: entry.domain,
340
+ firstVisited: entry.timestamp,
341
+ lastVisited: entry.timestamp,
342
+ totalVisits: 0,
343
+ pages: [],
344
+ };
345
+ manifest.domains.push(domainEntry);
346
+ }
347
+ domainEntry.lastVisited = entry.timestamp;
348
+ domainEntry.totalVisits++;
349
+ domainEntry.pages.push(entry);
350
+ // Update statistics
351
+ manifest.statistics.totalPages = manifest.domains.reduce((sum, d) => sum + d.pages.length, 0);
352
+ manifest.lastUpdated = new Date().toISOString();
353
+ await this.writeJson(manifestPath, manifest);
354
+ }
355
+ async writeJson(filePath, data) {
356
+ const jsonString = this.prettyJson
357
+ ? JSON.stringify(data, null, 2)
358
+ : JSON.stringify(data);
359
+ await fs.writeFile(filePath, jsonString);
360
+ }
361
+ /**
362
+ * Beautify HTML by adding proper indentation and line breaks
363
+ * This makes the DOM more readable for RAG/context analysis
364
+ * Properly handles self-closing tags and preserves HTML structure
365
+ */
366
+ async saveUserInteractions(url, interactions) {
367
+ try {
368
+ const urlObj = new URL(url);
369
+ const domain = urlObj.hostname;
370
+ // Derive logical domain name
371
+ const domainName = (() => {
372
+ const parts = domain.split('.');
373
+ const filtered = parts.filter(p => p.toLowerCase() !== 'www');
374
+ if (filtered.length >= 2) {
375
+ return filtered[filtered.length - 2];
376
+ }
377
+ return filtered[0] || parts[0];
378
+ })();
379
+ const domainDir = path.join(this.outputDir, domainName);
380
+ const interactionsFile = path.join(domainDir, 'user_interactions.json');
381
+ await fs.ensureDir(domainDir);
382
+ // Load existing interactions or create new array
383
+ let existingInteractions = [];
384
+ if (await fs.pathExists(interactionsFile)) {
385
+ existingInteractions = await fs.readJson(interactionsFile);
386
+ }
387
+ // Add new interactions with page URL
388
+ const interactionsWithUrl = interactions.map(interaction => ({
389
+ ...interaction,
390
+ pageUrl: url,
391
+ recordedAt: new Date().toISOString()
392
+ }));
393
+ // Merge with existing interactions
394
+ const allInteractions = [...existingInteractions, ...interactionsWithUrl];
395
+ // Save all interactions
396
+ await this.writeJson(interactionsFile, allInteractions);
397
+ logger_1.logger.info(`Saved ${interactions.length} user interactions to ${interactionsFile}`);
398
+ }
399
+ catch (error) {
400
+ logger_1.logger.error(`Failed to save user interactions: ${error.message}`);
401
+ }
402
+ }
403
+ beautifyHTML(html) {
404
+ try {
405
+ if (!html || html.trim().length === 0) {
406
+ return html;
407
+ }
408
+ // Use a proper HTML parser approach - format with indentation
409
+ // Split by tags while preserving them
410
+ const parts = [];
411
+ const tagRegex = /(<[^>]+>)/g;
412
+ let lastIndex = 0;
413
+ let match;
414
+ while ((match = tagRegex.exec(html)) !== null) {
415
+ // Add text before tag
416
+ if (match.index > lastIndex) {
417
+ const text = html.substring(lastIndex, match.index).trim();
418
+ if (text)
419
+ parts.push(text);
420
+ }
421
+ // Add tag
422
+ parts.push(match[0]);
423
+ lastIndex = match.index + match[0].length;
424
+ }
425
+ // Add remaining text
426
+ if (lastIndex < html.length) {
427
+ const text = html.substring(lastIndex).trim();
428
+ if (text)
429
+ parts.push(text);
430
+ }
431
+ const indentSize = 2;
432
+ let indent = 0;
433
+ const result = [];
434
+ const voidElements = new Set(['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr', 'noscript']);
435
+ for (let i = 0; i < parts.length; i++) {
436
+ const part = parts[i].trim();
437
+ if (!part)
438
+ continue;
439
+ if (part.startsWith('<!DOCTYPE')) {
440
+ result.push(part);
441
+ }
442
+ else if (part.startsWith('<!--')) {
443
+ result.push(' '.repeat(indent) + part);
444
+ }
445
+ else if (part.startsWith('</')) {
446
+ // Closing tag
447
+ indent = Math.max(0, indent - indentSize);
448
+ result.push(' '.repeat(indent) + part);
449
+ }
450
+ else if (part.startsWith('<')) {
451
+ // Opening tag
452
+ const tagName = part.match(/^<(\w+)/)?.[1]?.toLowerCase();
453
+ const isSelfClosing = part.endsWith('/>') || (tagName && voidElements.has(tagName));
454
+ result.push(' '.repeat(indent) + part);
455
+ if (!isSelfClosing && tagName !== 'script' && tagName !== 'style') {
456
+ indent += indentSize;
457
+ }
458
+ }
459
+ else {
460
+ // Text content
461
+ const lines = part.split(/\n/).filter(l => l.trim());
462
+ for (const line of lines) {
463
+ if (line.trim()) {
464
+ result.push(' '.repeat(indent) + line.trim());
465
+ }
466
+ }
467
+ }
468
+ }
469
+ return result.join('\n');
470
+ }
471
+ catch (error) {
472
+ // If beautification fails, return original
473
+ logger_1.logger.warn('HTML beautification failed, using original: ' + error.message);
474
+ return html;
475
+ }
476
+ }
477
+ }
478
+ exports.StorageEngine = StorageEngine;
479
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/storage/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { GlobalManifest, ManifestEntry } from '../types/storage';
2
+ export declare class ManifestManager {
3
+ private manifestPath;
4
+ constructor(outputDir: string);
5
+ loadManifest(): Promise<GlobalManifest | null>;
6
+ saveManifest(manifest: GlobalManifest): Promise<void>;
7
+ addPageEntry(entry: ManifestEntry): Promise<void>;
8
+ private createEmptyManifest;
9
+ }
10
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/storage/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjE,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;gBAEjB,SAAS,EAAE,MAAM;IAIvB,YAAY,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAO9C,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BvD,OAAO,CAAC,mBAAmB;CAiB5B"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ManifestManager = void 0;
37
+ // Developer: Shadow Coderr, Architect
38
+ const fs = __importStar(require("fs-extra"));
39
+ const path = __importStar(require("path"));
40
+ class ManifestManager {
41
+ manifestPath;
42
+ constructor(outputDir) {
43
+ this.manifestPath = path.join(outputDir, 'global_manifest.json');
44
+ }
45
+ async loadManifest() {
46
+ if (await fs.pathExists(this.manifestPath)) {
47
+ return await fs.readJson(this.manifestPath);
48
+ }
49
+ return null;
50
+ }
51
+ async saveManifest(manifest) {
52
+ await fs.writeJson(this.manifestPath, manifest, { spaces: 2 });
53
+ }
54
+ async addPageEntry(entry) {
55
+ let manifest = await this.loadManifest();
56
+ if (!manifest) {
57
+ manifest = this.createEmptyManifest();
58
+ }
59
+ // Update domains
60
+ let domainEntry = manifest.domains.find(d => d.domain === entry.domain);
61
+ if (!domainEntry) {
62
+ domainEntry = {
63
+ domain: entry.domain,
64
+ firstVisited: entry.timestamp,
65
+ lastVisited: entry.timestamp,
66
+ totalVisits: 0,
67
+ pages: [],
68
+ };
69
+ manifest.domains.push(domainEntry);
70
+ }
71
+ domainEntry.lastVisited = entry.timestamp;
72
+ domainEntry.totalVisits++;
73
+ domainEntry.pages.push(entry);
74
+ // Update statistics
75
+ manifest.statistics.totalPages = manifest.domains.reduce((sum, d) => sum + d.pages.length, 0);
76
+ manifest.lastUpdated = new Date().toISOString();
77
+ await this.saveManifest(manifest);
78
+ }
79
+ createEmptyManifest() {
80
+ return {
81
+ version: '0.3.0',
82
+ createdAt: new Date().toISOString(),
83
+ lastUpdated: new Date().toISOString(),
84
+ sessions: [],
85
+ domains: [],
86
+ statistics: {
87
+ totalSessions: 0,
88
+ totalDomains: 0,
89
+ totalPages: 0,
90
+ totalNetworkRequests: 0,
91
+ totalScreenshots: 0,
92
+ storageSize: '0 MB',
93
+ },
94
+ };
95
+ }
96
+ }
97
+ exports.ManifestManager = ManifestManager;
98
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/storage/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAsC;AACtC,6CAA+B;AAC/B,2CAA6B;AAG7B,MAAa,eAAe;IAClB,YAAY,CAAS;IAE7B,YAAY,SAAiB;QAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAwB;QACzC,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAoB;QACrC,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACxC,CAAC;QAED,iBAAiB;QACjB,IAAI,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;QACxE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,WAAW,GAAG;gBACZ,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,YAAY,EAAE,KAAK,CAAC,SAAS;gBAC7B,WAAW,EAAE,KAAK,CAAC,SAAS;gBAC5B,WAAW,EAAE,CAAC;gBACd,KAAK,EAAE,EAAE;aACV,CAAC;YACF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;QAED,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC;QAC1C,WAAW,CAAC,WAAW,EAAE,CAAC;QAC1B,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9B,oBAAoB;QACpB,QAAQ,CAAC,UAAU,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9F,QAAQ,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEhD,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAEO,mBAAmB;QACzB,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,EAAE;YACX,UAAU,EAAE;gBACV,aAAa,EAAE,CAAC;gBAChB,YAAY,EAAE,CAAC;gBACf,UAAU,EAAE,CAAC;gBACb,oBAAoB,EAAE,CAAC;gBACvB,gBAAgB,EAAE,CAAC;gBACnB,WAAW,EAAE,MAAM;aACpB;SACF,CAAC;IACJ,CAAC;CACF;AAjED,0CAiEC"}
@@ -0,0 +1,9 @@
1
+ import { PageSnapshot } from '../types/capture';
2
+ export declare class DataSerializer {
3
+ serializePageSnapshot(snapshot: PageSnapshot): string;
4
+ deserializePageSnapshot(data: string): PageSnapshot;
5
+ serializeMetadata(metadata: any): string;
6
+ serializeLocators(locators: any): string;
7
+ serializeAccessibilityTree(tree: any): string;
8
+ }
9
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/storage/serializer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,qBAAa,cAAc;IACzB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;IAIrD,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAInD,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM;IAIxC,iBAAiB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM;IAIxC,0BAA0B,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;CAG9C"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataSerializer = void 0;
4
+ class DataSerializer {
5
+ serializePageSnapshot(snapshot) {
6
+ return JSON.stringify(snapshot, null, 2);
7
+ }
8
+ deserializePageSnapshot(data) {
9
+ return JSON.parse(data);
10
+ }
11
+ serializeMetadata(metadata) {
12
+ return JSON.stringify(metadata, null, 2);
13
+ }
14
+ serializeLocators(locators) {
15
+ return JSON.stringify(locators, null, 2);
16
+ }
17
+ serializeAccessibilityTree(tree) {
18
+ return JSON.stringify(tree, null, 2);
19
+ }
20
+ }
21
+ exports.DataSerializer = DataSerializer;
22
+ //# sourceMappingURL=serializer.js.map