@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.
- package/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/analyzers/a11y-extractor.d.ts +15 -0
- package/dist/analyzers/a11y-extractor.d.ts.map +1 -0
- package/dist/analyzers/a11y-extractor.js +148 -0
- package/dist/analyzers/a11y-extractor.js.map +1 -0
- package/dist/analyzers/dom-analyzer.d.ts +20 -0
- package/dist/analyzers/dom-analyzer.d.ts.map +1 -0
- package/dist/analyzers/dom-analyzer.js +126 -0
- package/dist/analyzers/dom-analyzer.js.map +1 -0
- package/dist/analyzers/locator-generator.d.ts +13 -0
- package/dist/analyzers/locator-generator.d.ts.map +1 -0
- package/dist/analyzers/locator-generator.js +381 -0
- package/dist/analyzers/locator-generator.js.map +1 -0
- package/dist/analyzers/network-logger.d.ts +15 -0
- package/dist/analyzers/network-logger.d.ts.map +1 -0
- package/dist/analyzers/network-logger.js +71 -0
- package/dist/analyzers/network-logger.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +155 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +54 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +3 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +75 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +168 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +104 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/browser-adapter.d.ts +24 -0
- package/dist/core/browser-adapter.d.ts.map +1 -0
- package/dist/core/browser-adapter.js +208 -0
- package/dist/core/browser-adapter.js.map +1 -0
- package/dist/core/capture-engine.d.ts +52 -0
- package/dist/core/capture-engine.d.ts.map +1 -0
- package/dist/core/capture-engine.js +593 -0
- package/dist/core/capture-engine.js.map +1 -0
- package/dist/core/runtime.d.ts +38 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +648 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/prompts/init-prompt.d.ts +12 -0
- package/dist/prompts/init-prompt.d.ts.map +1 -0
- package/dist/prompts/init-prompt.js +128 -0
- package/dist/prompts/init-prompt.js.map +1 -0
- package/dist/registry/components-registry.d.ts +97 -0
- package/dist/registry/components-registry.d.ts.map +1 -0
- package/dist/registry/components-registry.js +469 -0
- package/dist/registry/components-registry.js.map +1 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +7 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/security/patterns.d.ts +4 -0
- package/dist/security/patterns.d.ts.map +1 -0
- package/dist/security/patterns.js +65 -0
- package/dist/security/patterns.js.map +1 -0
- package/dist/security/redactor.d.ts +26 -0
- package/dist/security/redactor.d.ts.map +1 -0
- package/dist/security/redactor.js +128 -0
- package/dist/security/redactor.js.map +1 -0
- package/dist/security/validator.d.ts +11 -0
- package/dist/security/validator.d.ts.map +1 -0
- package/dist/security/validator.js +62 -0
- package/dist/security/validator.js.map +1 -0
- package/dist/storage/engine.d.ts +45 -0
- package/dist/storage/engine.d.ts.map +1 -0
- package/dist/storage/engine.js +479 -0
- package/dist/storage/engine.js.map +1 -0
- package/dist/storage/manifest.d.ts +10 -0
- package/dist/storage/manifest.d.ts.map +1 -0
- package/dist/storage/manifest.js +98 -0
- package/dist/storage/manifest.js.map +1 -0
- package/dist/storage/serializer.d.ts +9 -0
- package/dist/storage/serializer.d.ts.map +1 -0
- package/dist/storage/serializer.js +22 -0
- package/dist/storage/serializer.js.map +1 -0
- package/dist/types/capture.d.ts +206 -0
- package/dist/types/capture.d.ts.map +1 -0
- package/dist/types/capture.js +3 -0
- package/dist/types/capture.js.map +1 -0
- package/dist/types/config.d.ts +63 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/registry.d.ts +94 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +3 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/storage.d.ts +57 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +3 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +26 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +86 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pom-generator.d.ts +12 -0
- package/dist/utils/pom-generator.d.ts.map +1 -0
- package/dist/utils/pom-generator.js +83 -0
- package/dist/utils/pom-generator.js.map +1 -0
- package/dist/utils/validators.d.ts +7 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +51 -0
- package/dist/utils/validators.js.map +1 -0
- 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
|