@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,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SecurityRedactor = void 0;
4
+ const patterns_1 = require("./patterns");
5
+ class SecurityRedactor {
6
+ rules;
7
+ redactedHeaders;
8
+ sensitiveKeys = ['password', 'secret', 'token', 'apiKey', 'api_key', 'authorization', 'cookie', 'set-cookie'];
9
+ auditLog = [];
10
+ constructor(customRules = []) {
11
+ this.rules = [...patterns_1.BUILTIN_REDACTION_RULES, ...customRules];
12
+ this.redactedHeaders = patterns_1.REDACTED_HEADERS;
13
+ }
14
+ async redact(data, context, url) {
15
+ const originalSize = JSON.stringify(data).length;
16
+ let redactedData = data; // Note: we mutate in place if it's an object
17
+ const redactions = [];
18
+ // Redact headers if present
19
+ if (redactedData.headers) {
20
+ redactedData.headers = this.redactHeaders(redactedData.headers);
21
+ }
22
+ // Apply key-based redaction
23
+ this.redactSensitiveKeys(redactedData, redactions);
24
+ // Apply all pattern-based redaction rules
25
+ for (const rule of this.rules) {
26
+ const result = this.applyRule(redactedData, rule);
27
+ if (result.count > 0) {
28
+ redactions.push({
29
+ rule: rule.name,
30
+ count: result.count,
31
+ locations: result.locations,
32
+ });
33
+ }
34
+ }
35
+ const redactedSize = JSON.stringify(redactedData).length;
36
+ // Log to audit
37
+ if (redactions.length > 0) {
38
+ this.auditLog.push({
39
+ timestamp: new Date().toISOString(),
40
+ context,
41
+ url: url || '',
42
+ redactions: redactions.map(r => ({
43
+ rule: r.rule,
44
+ count: r.count,
45
+ field: r.locations.join(', '),
46
+ })),
47
+ });
48
+ }
49
+ return {
50
+ originalSize,
51
+ redactedSize,
52
+ redactions,
53
+ success: true,
54
+ };
55
+ }
56
+ redactSensitiveKeys(data, redactions) {
57
+ const traverse = (obj, path = '') => {
58
+ if (typeof obj === 'object' && obj !== null) {
59
+ for (const key in obj) {
60
+ const lowerKey = key.toLowerCase();
61
+ const currentPath = path ? `${path}.${key}` : key;
62
+ if (this.sensitiveKeys.some(sk => lowerKey.includes(sk))) {
63
+ const ruleName = `sensitive_key:${key}`;
64
+ obj[key] = '[REDACTED:SENSITIVE_KEY]';
65
+ // Track this redaction
66
+ let existingRedaction = redactions.find(r => r.rule === ruleName);
67
+ if (existingRedaction) {
68
+ existingRedaction.count++;
69
+ existingRedaction.locations.push(currentPath);
70
+ }
71
+ else {
72
+ redactions.push({ rule: ruleName, count: 1, locations: [currentPath] });
73
+ }
74
+ }
75
+ else {
76
+ traverse(obj[key], currentPath);
77
+ }
78
+ }
79
+ }
80
+ };
81
+ traverse(data);
82
+ }
83
+ redactHeaders(headers) {
84
+ const redacted = { ...headers };
85
+ for (const header of this.redactedHeaders) {
86
+ const lowerHeader = header.toLowerCase();
87
+ // Find the key in headers regardless of case
88
+ const actualKey = Object.keys(redacted).find(k => k.toLowerCase() === lowerHeader);
89
+ if (actualKey) {
90
+ redacted[actualKey] = '[REDACTED]';
91
+ }
92
+ }
93
+ return redacted;
94
+ }
95
+ applyRule(data, rule) {
96
+ let count = 0;
97
+ const locations = [];
98
+ const traverse = (obj, path = '') => {
99
+ if (typeof obj === 'object' && obj !== null) {
100
+ for (const key in obj) {
101
+ const val = obj[key];
102
+ if (typeof val === 'string') {
103
+ const matches = val.match(rule.pattern);
104
+ if (matches) {
105
+ count += matches.length;
106
+ locations.push(path ? `${path}.${key}` : key);
107
+ // Replace in place - this now correctly mutates the object property
108
+ obj[key] = val.replace(rule.pattern, rule.replacement);
109
+ }
110
+ }
111
+ else {
112
+ traverse(val, path ? `${path}.${key}` : key);
113
+ }
114
+ }
115
+ }
116
+ };
117
+ traverse(data);
118
+ return { count, locations };
119
+ }
120
+ getAuditLog() {
121
+ return [...this.auditLog];
122
+ }
123
+ clearAuditLog() {
124
+ this.auditLog = [];
125
+ }
126
+ }
127
+ exports.SecurityRedactor = SecurityRedactor;
128
+ //# sourceMappingURL=redactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../src/security/redactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { PageSnapshot } from '../types/capture';
2
+ export interface ValidationResult {
3
+ valid: boolean;
4
+ errors: string[];
5
+ warnings: string[];
6
+ }
7
+ export declare class DataValidator {
8
+ validatePageSnapshot(snapshot: PageSnapshot): ValidationResult;
9
+ validateNetworkEvent(event: any): ValidationResult;
10
+ }
11
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/security/validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB;IA2C9D,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,gBAAgB;CAoBnD"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataValidator = void 0;
4
+ const logger_1 = require("../utils/logger");
5
+ class DataValidator {
6
+ validatePageSnapshot(snapshot) {
7
+ const errors = [];
8
+ const warnings = [];
9
+ // Validate metadata
10
+ if (!snapshot.metadata.captureId) {
11
+ errors.push('Missing captureId in metadata');
12
+ }
13
+ if (!snapshot.metadata.url) {
14
+ errors.push('Missing URL in metadata');
15
+ }
16
+ if (!snapshot.metadata.timestamp) {
17
+ errors.push('Missing timestamp in metadata');
18
+ }
19
+ // Validate DOM snapshot
20
+ if (!snapshot.domSnapshot || snapshot.domSnapshot.length === 0) {
21
+ warnings.push('Empty DOM snapshot');
22
+ }
23
+ // Validate accessibility tree
24
+ if (!snapshot.a11yTree) {
25
+ warnings.push('Missing accessibility tree');
26
+ }
27
+ // Validate locators
28
+ if (!snapshot.locators || !snapshot.locators.elements) {
29
+ warnings.push('Missing locator data');
30
+ }
31
+ // Check for redaction markers
32
+ const snapshotStr = JSON.stringify(snapshot);
33
+ if (snapshotStr.includes('[REDACTED]')) {
34
+ logger_1.logger.info('Redaction markers found in snapshot - this is expected');
35
+ }
36
+ return {
37
+ valid: errors.length === 0,
38
+ errors,
39
+ warnings,
40
+ };
41
+ }
42
+ validateNetworkEvent(event) {
43
+ const errors = [];
44
+ const warnings = [];
45
+ if (!event.timestamp) {
46
+ errors.push('Missing timestamp in network event');
47
+ }
48
+ if (!event.url) {
49
+ errors.push('Missing URL in network event');
50
+ }
51
+ if (!['request', 'response'].includes(event.type)) {
52
+ errors.push('Invalid event type in network event');
53
+ }
54
+ return {
55
+ valid: errors.length === 0,
56
+ errors,
57
+ warnings,
58
+ };
59
+ }
60
+ }
61
+ exports.DataValidator = DataValidator;
62
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/security/validator.ts"],"names":[],"mappings":";;;AAEA,4CAAyC;AAQzC,MAAa,aAAa;IACxB,oBAAoB,CAAC,QAAsB;QACzC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,oBAAoB;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACtC,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC9C,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtD,QAAQ,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACxC,CAAC;QAED,8BAA8B;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,eAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACxE,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,KAAU;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;CACF;AAhED,sCAgEC"}
@@ -0,0 +1,45 @@
1
+ import { PageSnapshot } from '../types/capture';
2
+ import { ManifestEntry } from '../types/storage';
3
+ export declare class StorageEngine {
4
+ private outputDir;
5
+ private prettyJson;
6
+ private scriptsDir;
7
+ private contentHashHistory;
8
+ private forceCapture;
9
+ constructor(outputDir: string, prettyJson?: boolean, forceCapture?: boolean);
10
+ /**
11
+ * Set force capture mode - always write artifacts even if content hash unchanged
12
+ */
13
+ setForceCapture(force: boolean): void;
14
+ /**
15
+ * Check if content has changed since last capture
16
+ */
17
+ hasContentChanged(pageName: string, contentHash: string): boolean;
18
+ /**
19
+ * Record content hash for a page
20
+ */
21
+ recordContentHash(pageName: string, contentHash: string): void;
22
+ initialize(): Promise<void>;
23
+ getUniqueScriptPath(url: string): Promise<string>;
24
+ mergeRecordedScript(url: string, recordedScriptPath: string): Promise<string>;
25
+ private mergePlaywrightSpec;
26
+ savePageSnapshot(snapshot: PageSnapshot): Promise<void>;
27
+ /**
28
+ * Save the components registry and update manifest reference
29
+ */
30
+ saveComponentsRegistry(registry: any, domainName: string): Promise<void>;
31
+ /**
32
+ * Update manifest with components registry reference
33
+ */
34
+ updateManifestWithComponents(domainName: string, totalComponents: number): Promise<void>;
35
+ updateGlobalManifest(entry: ManifestEntry): Promise<void>;
36
+ private writeJson;
37
+ /**
38
+ * Beautify HTML by adding proper indentation and line breaks
39
+ * This makes the DOM more readable for RAG/context analysis
40
+ * Properly handles self-closing tags and preserves HTML structure
41
+ */
42
+ saveUserInteractions(url: string, interactions: any[]): Promise<void>;
43
+ private beautifyHTML;
44
+ }
45
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/storage/engine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAkB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjE,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,YAAY,CAAkB;gBAE1B,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,EAAE,YAAY,GAAE,OAAe;IAOxF;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIrC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAMjE;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAQxD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBjD,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BnF,OAAO,CAAC,mBAAmB;IA+ErB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA4G7D;;OAEG;IACG,sBAAsB,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9E;;OAEG;IACG,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBxF,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAgDjD,SAAS;IAOvB;;;;OAIG;IACG,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C3E,OAAO,CAAC,YAAY;CA0ErB"}