pinpoints 0.1.4

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 (83) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +187 -0
  3. package/out/browser/browserSessionManager.d.ts +19 -0
  4. package/out/browser/browserSessionManager.d.ts.map +1 -0
  5. package/out/browser/browserSessionManager.js +169 -0
  6. package/out/browser/browserSessionManager.js.map +1 -0
  7. package/out/cli/index.d.ts +3 -0
  8. package/out/cli/index.d.ts.map +1 -0
  9. package/out/cli/index.js +564 -0
  10. package/out/cli/index.js.map +1 -0
  11. package/out/core/pickerToolbar.d.ts +9 -0
  12. package/out/core/pickerToolbar.d.ts.map +1 -0
  13. package/out/core/pickerToolbar.js +475 -0
  14. package/out/core/pickerToolbar.js.map +1 -0
  15. package/out/export/contextFormatter.d.ts +9 -0
  16. package/out/export/contextFormatter.d.ts.map +1 -0
  17. package/out/export/contextFormatter.js +151 -0
  18. package/out/export/contextFormatter.js.map +1 -0
  19. package/out/extension.d.ts +4 -0
  20. package/out/extension.d.ts.map +1 -0
  21. package/out/extension.js +95 -0
  22. package/out/extension.js.map +1 -0
  23. package/out/extraction/domExtractor.d.ts +10 -0
  24. package/out/extraction/domExtractor.d.ts.map +1 -0
  25. package/out/extraction/domExtractor.js +72 -0
  26. package/out/extraction/domExtractor.js.map +1 -0
  27. package/out/extraction/layoutExtractor.d.ts +11 -0
  28. package/out/extraction/layoutExtractor.d.ts.map +1 -0
  29. package/out/extraction/layoutExtractor.js +107 -0
  30. package/out/extraction/layoutExtractor.js.map +1 -0
  31. package/out/extraction/redactor.d.ts +9 -0
  32. package/out/extraction/redactor.d.ts.map +1 -0
  33. package/out/extraction/redactor.js +78 -0
  34. package/out/extraction/redactor.js.map +1 -0
  35. package/out/extraction/screenshotExtractor.d.ts +7 -0
  36. package/out/extraction/screenshotExtractor.d.ts.map +1 -0
  37. package/out/extraction/screenshotExtractor.js +104 -0
  38. package/out/extraction/screenshotExtractor.js.map +1 -0
  39. package/out/extraction/selectorExtractor.d.ts +16 -0
  40. package/out/extraction/selectorExtractor.d.ts.map +1 -0
  41. package/out/extraction/selectorExtractor.js +172 -0
  42. package/out/extraction/selectorExtractor.js.map +1 -0
  43. package/out/extraction/styleExtractor.d.ts +10 -0
  44. package/out/extraction/styleExtractor.d.ts.map +1 -0
  45. package/out/extraction/styleExtractor.js +96 -0
  46. package/out/extraction/styleExtractor.js.map +1 -0
  47. package/out/picker/pickerController.d.ts +33 -0
  48. package/out/picker/pickerController.d.ts.map +1 -0
  49. package/out/picker/pickerController.js +979 -0
  50. package/out/picker/pickerController.js.map +1 -0
  51. package/out/schemas/index.d.ts +418 -0
  52. package/out/schemas/index.d.ts.map +1 -0
  53. package/out/schemas/index.js +128 -0
  54. package/out/schemas/index.js.map +1 -0
  55. package/out/source/sourceLocator.d.ts +7 -0
  56. package/out/source/sourceLocator.d.ts.map +1 -0
  57. package/out/source/sourceLocator.js +37 -0
  58. package/out/source/sourceLocator.js.map +1 -0
  59. package/out/source/sourceMapResolver.d.ts +17 -0
  60. package/out/source/sourceMapResolver.d.ts.map +1 -0
  61. package/out/source/sourceMapResolver.js +204 -0
  62. package/out/source/sourceMapResolver.js.map +1 -0
  63. package/out/source/workspaceGrep.d.ts +30 -0
  64. package/out/source/workspaceGrep.d.ts.map +1 -0
  65. package/out/source/workspaceGrep.js +237 -0
  66. package/out/source/workspaceGrep.js.map +1 -0
  67. package/out/testPaste.d.ts +1 -0
  68. package/out/testPaste.d.ts.map +1 -0
  69. package/out/testPaste.js +3 -0
  70. package/out/testPaste.js.map +1 -0
  71. package/out/ui/statusBarManager.d.ts +14 -0
  72. package/out/ui/statusBarManager.d.ts.map +1 -0
  73. package/out/ui/statusBarManager.js +89 -0
  74. package/out/ui/statusBarManager.js.map +1 -0
  75. package/package.json +132 -0
  76. package/resources/fonts/icons.css +19 -0
  77. package/resources/fonts/icons.html +69 -0
  78. package/resources/fonts/icons.json +3 -0
  79. package/resources/fonts/icons.ts +13 -0
  80. package/resources/fonts/icons.woff +0 -0
  81. package/resources/icon.png +0 -0
  82. package/resources/icons/pinpoint-logo.svg +4 -0
  83. package/resources/logo.svg +97 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextFormatter.js","sourceRoot":"","sources":["../../src/export/contextFormatter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAG7B,MAAa,gBAAgB;IAC3B,aAAa,CACX,QAAsB,EACtB,IAAiB,EACjB,aAAqB;QAErB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEO,mBAAmB,CACzB,OAAmB,EACnB,IAAiB,EACjB,aAAqB;QAErB,IAAI,IAAI,GAAG,2BAA2B,CAAC;QAEvC,WAAW;QACX,IAAI,IAAI,wBAAwB,CAAC;QACjC,IAAI,IAAI,mBAAmB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,MAAM,CAAC;QACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,IAAI,aAAa,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QACjD,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,IAAI,aAAa,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QACtE,CAAC;QACD,IAAI,IAAI,IAAI,CAAC;QAEb,iBAAiB;QACjB,MAAM,aAAa,GAAG,OAAO,CAAC,cAAc;eACvC,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5F,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,IAAI,oBAAoB,aAAa,MAAM,CAAC;QAClD,CAAC;QAED,MAAM;QACN,IAAI,IAAI,yBAAyB,CAAC;QAClC,IAAI,IAAI,cAAc,CAAC;QACvB,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QACxC,IAAI,IAAI,YAAY,CAAC;QAErB,SAAS;QACT,IAAI,IAAI,cAAc,CAAC;QACvB,IAAI,IAAI,wBAAwB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;QACnG,IAAI,IAAI,eAAe,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC;QACzF,IAAI,IAAI,mBAAmB,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,QAAQ,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC;QACvG,IAAI,IAAI,IAAI,CAAC;QAEb,SAAS;QACT,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,IAAI,IAAI,kBAAkB,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;gBAC5D,IAAI,IAAI,OAAO,IAAI,SAAS,KAAK,MAAM,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;QAED,0BAA0B;QAC1B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC9E,IAAI,IAAI,mBAAmB,CAAC;YAC5B,IAAI,IAAI,eAAe,OAAO,IAAI,CAAC;YACnC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAChC,IAAI,IAAI,UAAU,OAAO,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC;YACnD,CAAC;YACD,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClE,IAAI,IAAI,kBAAkB,CAAC;YAC3B,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC;QAC5B,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,OAAO,CAAC;QAEhB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,sBAAsB,CAC5B,QAAsB,EACtB,IAAiB,EACjB,aAAqB;QAErB,IAAI,IAAI,GAAG,8BAA8B,CAAC;QAC1C,IAAI,IAAI,iBAAiB,QAAQ,CAAC,MAAM,MAAM,CAAC;QAE/C,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAClC,IAAI,IAAI,eAAe,KAAK,GAAG,CAAC,IAAI,CAAC;YACrC,IAAI,IAAI,mBAAmB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,MAAM,CAAC;YAEpE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,IAAI,aAAa,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACtE,CAAC;YAED,iBAAiB;YACjB,MAAM,aAAa,GAAG,OAAO,CAAC,cAAc;mBACvC,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5F,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,IAAI,oBAAoB,aAAa,MAAM,CAAC;YAClD,CAAC;YAED,IAAI,IAAI,kBAAkB,CAAC;YAC3B,IAAI,IAAI,cAAc,CAAC;YACvB,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;YACxC,IAAI,IAAI,YAAY,CAAC;YAErB,+BAA+B;YAC/B,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAClE,IAAI,IAAI,oBAAoB,OAAO,MAAM,CAAC;YAC5C,CAAC;YAED,IAAI,IAAI,SAAS,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,oBAAoB,CAAC,QAAgB;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,mDAAmD;QACnD,IAAI,QAAQ,KAAK,OAAO;YAAE,OAAO,SAAS,CAAC;QAC3C,2EAA2E;QAC3E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,OAAO,IAAI;aACR,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;aACpB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF;AA7ID,4CA6IC"}
@@ -0,0 +1,4 @@
1
+ import * as vscode from 'vscode';
2
+ export declare function activate(context: vscode.ExtensionContext): Promise<void>;
3
+ export declare function deactivate(): void;
4
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAOjC,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,gBAAgB,iBA8D9D;AAED,wBAAgB,UAAU,SAKzB"}
@@ -0,0 +1,95 @@
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.activate = activate;
37
+ exports.deactivate = deactivate;
38
+ const vscode = __importStar(require("vscode"));
39
+ const pickerController_1 = require("./picker/pickerController");
40
+ const statusBarManager_1 = require("./ui/statusBarManager");
41
+ let pickerController;
42
+ let statusBarManager;
43
+ async function activate(context) {
44
+ console.log('PinPoint extension activated');
45
+ // Initialize managers
46
+ statusBarManager = new statusBarManager_1.StatusBarManager();
47
+ pickerController = new pickerController_1.PickerController(context);
48
+ // Register commands
49
+ const startPickerCmd = vscode.commands.registerCommand('pinpoint.startPicker', async () => {
50
+ if (!pickerController)
51
+ return;
52
+ try {
53
+ statusBarManager?.update('starting', '$(loading~spin) Starting picker...');
54
+ await pickerController.startPicker();
55
+ statusBarManager?.update('active', '$(circle-filled~spin) Picker active');
56
+ }
57
+ catch (error) {
58
+ vscode.window.showErrorMessage(`Failed to start picker: ${error}`);
59
+ statusBarManager?.update('idle', '$(circle-outline) PinPoint');
60
+ }
61
+ });
62
+ const stopPickerCmd = vscode.commands.registerCommand('pinpoint.stopPicker', async () => {
63
+ if (!pickerController)
64
+ return;
65
+ try {
66
+ await pickerController.stopPicker();
67
+ statusBarManager?.update('idle', '$(circle-outline) PinPoint');
68
+ vscode.window.showInformationMessage('Picker stopped');
69
+ }
70
+ catch (error) {
71
+ vscode.window.showErrorMessage(`Failed to stop picker: ${error}`);
72
+ }
73
+ });
74
+ const clearSelectionCmd = vscode.commands.registerCommand('pinpoint.clearSelection', async () => {
75
+ if (!pickerController)
76
+ return;
77
+ pickerController.clearSelection();
78
+ vscode.window.showInformationMessage('Selection cleared');
79
+ });
80
+ context.subscriptions.push(startPickerCmd, stopPickerCmd, clearSelectionCmd);
81
+ // Show welcome message
82
+ const hasSeenWelcome = context.globalState.get('pinpoint.seenWelcome');
83
+ if (!hasSeenWelcome) {
84
+ vscode.window.showInformationMessage('PinPoint: Hover and click UI elements to capture context for Claude');
85
+ context.globalState.update('pinpoint.seenWelcome', true);
86
+ }
87
+ statusBarManager?.show();
88
+ }
89
+ function deactivate() {
90
+ console.log('PinPoint extension deactivating');
91
+ if (pickerController) {
92
+ pickerController.cleanup();
93
+ }
94
+ }
95
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,4BA8DC;AAED,gCAKC;AA5ED,+CAAiC;AACjC,gEAA6D;AAC7D,4DAAyD;AAEzD,IAAI,gBAA8C,CAAC;AACnD,IAAI,gBAA8C,CAAC;AAE5C,KAAK,UAAU,QAAQ,CAAC,OAAgC;IAC7D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,sBAAsB;IACtB,gBAAgB,GAAG,IAAI,mCAAgB,EAAE,CAAC;IAC1C,gBAAgB,GAAG,IAAI,mCAAgB,CAAC,OAAO,CAAC,CAAC;IAEjD,oBAAoB;IACpB,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CACpD,sBAAsB,EACtB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC9B,IAAI,CAAC;YACH,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,oCAAoC,CAAC,CAAC;YAC3E,MAAM,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACrC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,qCAAqC,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;YACnE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;QACjE,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CACnD,qBAAqB,EACrB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC9B,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;YACpC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CACvD,yBAAyB,EACzB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC9B,gBAAgB,CAAC,cAAc,EAAE,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;IAC5D,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,aAAa,CAAC,IAAI,CACxB,cAAc,EACd,aAAa,EACb,iBAAiB,CAClB,CAAC;IAEF,uBAAuB;IACvB,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACvE,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAClC,qEAAqE,CACtE,CAAC;QACF,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,gBAAgB,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,SAAgB,UAAU;IACxB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,IAAI,gBAAgB,EAAE,CAAC;QACrB,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import * as puppeteer from 'puppeteer-core';
2
+ import { DomContext } from '../schemas';
3
+ export declare class DomExtractor {
4
+ extract(elementHandle: puppeteer.ElementHandle, contextRadius?: number): Promise<DomContext>;
5
+ private getOuterHTML;
6
+ private getText;
7
+ private cleanHTML;
8
+ private truncateText;
9
+ }
10
+ //# sourceMappingURL=domExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/domExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,YAAY;IACjB,OAAO,CACX,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,UAAU,CAAC;YAqCR,YAAY;YAcZ,OAAO;IAQrB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,YAAY;CAQrB"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DomExtractor = void 0;
4
+ class DomExtractor {
5
+ async extract(elementHandle, contextRadius = 1) {
6
+ const html = await this.getOuterHTML(elementHandle);
7
+ const text = await this.getText(elementHandle);
8
+ const parents = [];
9
+ // Get parent HTMLs up to contextRadius levels
10
+ for (let i = 0; i < contextRadius; i++) {
11
+ const parentHandle = await elementHandle.evaluateHandle((el) => el.parentElement);
12
+ if (!parentHandle || parentHandle.asElement() === null) {
13
+ break;
14
+ }
15
+ try {
16
+ const parentHtml = await this.getOuterHTML(parentHandle);
17
+ parents.push({
18
+ html: parentHtml,
19
+ level: i + 1,
20
+ });
21
+ // Move up the tree
22
+ elementHandle = parentHandle;
23
+ }
24
+ catch {
25
+ break;
26
+ }
27
+ }
28
+ return {
29
+ element: {
30
+ html: this.cleanHTML(html),
31
+ text: text ? this.truncateText(text, 200) : undefined,
32
+ },
33
+ parents: parents.length > 0 ? parents : undefined,
34
+ };
35
+ }
36
+ async getOuterHTML(elementHandle) {
37
+ return await elementHandle.evaluate((el) => {
38
+ // Get outer HTML but limit depth for parents
39
+ let html = el.outerHTML;
40
+ // Limit HTML length
41
+ if (html.length > 2000) {
42
+ html = html.substring(0, 2000) + '...';
43
+ }
44
+ return html;
45
+ });
46
+ }
47
+ async getText(elementHandle) {
48
+ return await elementHandle.evaluate((el) => {
49
+ // Get visible text content
50
+ const text = el.textContent?.trim() || '';
51
+ return text;
52
+ });
53
+ }
54
+ cleanHTML(html) {
55
+ // Remove data URLs and large inline content
56
+ html = html.replace(/data:[^,]*,[^"'\s]*/g, '[data-url]');
57
+ // Remove inline styles that are too long
58
+ html = html.replace(/style="[^"]{200,}"/g, 'style="[truncated]"');
59
+ // Remove event handlers
60
+ html = html.replace(/on\w+="[^"]*"/g, '');
61
+ return html;
62
+ }
63
+ truncateText(text, maxLength) {
64
+ if (text.length <= maxLength) {
65
+ return text;
66
+ }
67
+ const remaining = text.length - maxLength;
68
+ return `${text.substring(0, maxLength)}... (+${remaining} more chars)`;
69
+ }
70
+ }
71
+ exports.DomExtractor = DomExtractor;
72
+ //# sourceMappingURL=domExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domExtractor.js","sourceRoot":"","sources":["../../src/extraction/domExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import * as puppeteer from 'puppeteer-core';
2
+ import { Layout } from '../schemas';
3
+ export declare class LayoutExtractor {
4
+ extract(elementHandle: puppeteer.ElementHandle, page: puppeteer.Page): Promise<Layout>;
5
+ private getBoundingBox;
6
+ private getParentBoundingBox;
7
+ private getScrollOffset;
8
+ private getViewport;
9
+ private getDevicePixelRatio;
10
+ }
11
+ //# sourceMappingURL=layoutExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/layoutExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAe,MAAM,YAAY,CAAC;AAEjD,qBAAa,eAAe;IACpB,OAAO,CACX,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,IAAI,EAAE,SAAS,CAAC,IAAI,GACnB,OAAO,CAAC,MAAM,CAAC;YAgBJ,cAAc;YAiBd,oBAAoB;YAoCpB,eAAe;YAgBf,WAAW;YAgBX,mBAAmB;CAQlC"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LayoutExtractor = void 0;
4
+ class LayoutExtractor {
5
+ async extract(elementHandle, page) {
6
+ const bbox = await this.getBoundingBox(elementHandle);
7
+ const parentBbox = await this.getParentBoundingBox(elementHandle);
8
+ const scroll = await this.getScrollOffset(page);
9
+ const viewport = await this.getViewport(page);
10
+ const dpr = await this.getDevicePixelRatio(page);
11
+ return {
12
+ bbox,
13
+ parentBbox: parentBbox || undefined,
14
+ scrollOffset: scroll,
15
+ viewport,
16
+ devicePixelRatio: dpr,
17
+ };
18
+ }
19
+ async getBoundingBox(elementHandle) {
20
+ const box = await elementHandle.boundingBox();
21
+ if (!box) {
22
+ throw new Error('Element is not visible or has no bounding box');
23
+ }
24
+ return {
25
+ top: Math.round(box.y),
26
+ left: Math.round(box.x),
27
+ width: Math.round(box.width),
28
+ height: Math.round(box.height),
29
+ right: Math.round(box.x + box.width),
30
+ bottom: Math.round(box.y + box.height),
31
+ };
32
+ }
33
+ async getParentBoundingBox(elementHandle) {
34
+ try {
35
+ const parentBox = await elementHandle.evaluate((el) => {
36
+ const parent = el.parentElement;
37
+ if (!parent) {
38
+ return null;
39
+ }
40
+ const rect = parent.getBoundingClientRect();
41
+ return {
42
+ top: rect.top,
43
+ left: rect.left,
44
+ width: rect.width,
45
+ height: rect.height,
46
+ right: rect.right,
47
+ bottom: rect.bottom,
48
+ };
49
+ });
50
+ if (!parentBox) {
51
+ return null;
52
+ }
53
+ return {
54
+ top: Math.round(parentBox.top),
55
+ left: Math.round(parentBox.left),
56
+ width: Math.round(parentBox.width),
57
+ height: Math.round(parentBox.height),
58
+ right: Math.round(parentBox.right),
59
+ bottom: Math.round(parentBox.bottom),
60
+ };
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ async getScrollOffset(page) {
67
+ try {
68
+ const offset = await page.evaluate(() => ({
69
+ x: window.scrollX,
70
+ y: window.scrollY,
71
+ }));
72
+ return {
73
+ x: Math.round(offset.x),
74
+ y: Math.round(offset.y),
75
+ };
76
+ }
77
+ catch {
78
+ return undefined;
79
+ }
80
+ }
81
+ async getViewport(page) {
82
+ try {
83
+ const viewport = await page.evaluate(() => ({
84
+ width: window.innerWidth,
85
+ height: window.innerHeight,
86
+ }));
87
+ return {
88
+ width: Math.round(viewport.width),
89
+ height: Math.round(viewport.height),
90
+ };
91
+ }
92
+ catch {
93
+ return undefined;
94
+ }
95
+ }
96
+ async getDevicePixelRatio(page) {
97
+ try {
98
+ const dpr = await page.evaluate(() => window.devicePixelRatio);
99
+ return dpr || 1;
100
+ }
101
+ catch {
102
+ return 1;
103
+ }
104
+ }
105
+ }
106
+ exports.LayoutExtractor = LayoutExtractor;
107
+ //# sourceMappingURL=layoutExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutExtractor.js","sourceRoot":"","sources":["../../src/extraction/layoutExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { MaxContext } from '../schemas';
2
+ export declare class Redactor {
3
+ private readonly MAX_TEXT_LENGTH;
4
+ private readonly MAX_HTML_LENGTH;
5
+ redact(context: MaxContext): MaxContext;
6
+ private redactHtml;
7
+ private truncateText;
8
+ }
9
+ //# sourceMappingURL=redactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.d.ts","sourceRoot":"","sources":["../../src/extraction/redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IAExC,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU;IAwDvC,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,YAAY;CAQrB"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Redactor = void 0;
4
+ class Redactor {
5
+ constructor() {
6
+ this.MAX_TEXT_LENGTH = 500;
7
+ this.MAX_HTML_LENGTH = 1500;
8
+ }
9
+ redact(context) {
10
+ const redacted = JSON.parse(JSON.stringify(context));
11
+ // Track what was redacted
12
+ const redaction = {
13
+ truncatedFields: [],
14
+ removed: [],
15
+ };
16
+ // Redact DOM text content
17
+ if (redacted.dom.element.text) {
18
+ if (redacted.dom.element.text.length > this.MAX_TEXT_LENGTH) {
19
+ redacted.dom.element.text = this.truncateText(redacted.dom.element.text);
20
+ redaction.truncatedFields.push('dom.element.text');
21
+ }
22
+ }
23
+ // Redact parent HTML
24
+ if (redacted.dom.parents) {
25
+ redacted.dom.parents = redacted.dom.parents.map((parent) => ({
26
+ ...parent,
27
+ html: this.redactHtml(parent.html),
28
+ }));
29
+ }
30
+ // Redact element HTML
31
+ redacted.dom.element.html = this.redactHtml(redacted.dom.element.html);
32
+ // Redact identity text
33
+ if (redacted.identity.text && redacted.identity.text.length > this.MAX_TEXT_LENGTH) {
34
+ redacted.identity.text = this.truncateText(redacted.identity.text);
35
+ redaction.truncatedFields.push('identity.text');
36
+ }
37
+ // Remove sensitive data attributes
38
+ if (redacted.identity.dataAttributes) {
39
+ const sensitivePatterns = [
40
+ /password/i,
41
+ /secret/i,
42
+ /token/i,
43
+ /api[_-]?key/i,
44
+ /auth/i,
45
+ ];
46
+ Object.keys(redacted.identity.dataAttributes).forEach((key) => {
47
+ if (sensitivePatterns.some((pattern) => pattern.test(key))) {
48
+ delete redacted.identity.dataAttributes[key];
49
+ redaction.removed.push(`dataAttributes.${key}`);
50
+ }
51
+ });
52
+ }
53
+ redacted.redaction = redaction;
54
+ return redacted;
55
+ }
56
+ redactHtml(html) {
57
+ // Remove data URLs
58
+ html = html.replace(/data:[^,]*,[^"'\s]*/g, '[data-url]');
59
+ // Truncate large style attributes
60
+ html = html.replace(/style="[^"]{200,}"/g, 'style="[truncated]"');
61
+ // Remove event handlers
62
+ html = html.replace(/on\w+="[^"]*"/g, '');
63
+ // Truncate if too long
64
+ if (html.length > this.MAX_HTML_LENGTH) {
65
+ html = html.substring(0, this.MAX_HTML_LENGTH) + '...</html>';
66
+ }
67
+ return html;
68
+ }
69
+ truncateText(text) {
70
+ if (text.length <= this.MAX_TEXT_LENGTH) {
71
+ return text;
72
+ }
73
+ const remaining = text.length - this.MAX_TEXT_LENGTH;
74
+ return `${text.substring(0, this.MAX_TEXT_LENGTH)}...(+${remaining} more chars)`;
75
+ }
76
+ }
77
+ exports.Redactor = Redactor;
78
+ //# sourceMappingURL=redactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../src/extraction/redactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import * as puppeteer from 'puppeteer-core';
2
+ import { Screenshot } from '../schemas';
3
+ export declare class ScreenshotExtractor {
4
+ extract(elementHandle: puppeteer.ElementHandle, tempDir: string): Promise<Screenshot>;
5
+ extractWithPadding(elementHandle: puppeteer.ElementHandle, tempDir: string, padding?: number): Promise<Screenshot>;
6
+ }
7
+ //# sourceMappingURL=screenshotExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshotExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/screenshotExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAI5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,mBAAmB;IACxB,OAAO,CACX,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,CAAC;IA6BhB,kBAAkB,CACtB,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAW,GACnB,OAAO,CAAC,UAAU,CAAC;CAuCvB"}
@@ -0,0 +1,104 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.ScreenshotExtractor = void 0;
40
+ const jimp_1 = __importDefault(require("jimp"));
41
+ const path = __importStar(require("path"));
42
+ const fs = __importStar(require("fs"));
43
+ class ScreenshotExtractor {
44
+ async extract(elementHandle, tempDir) {
45
+ const timestamp = Date.now();
46
+ const filename = `element-${timestamp}.png`;
47
+ const filepath = path.join(tempDir, filename);
48
+ try {
49
+ // Ensure temp directory exists
50
+ if (!fs.existsSync(tempDir)) {
51
+ fs.mkdirSync(tempDir, { recursive: true });
52
+ }
53
+ // Take element screenshot using Puppeteer
54
+ const screenshotBuffer = await elementHandle.screenshot({
55
+ type: 'png',
56
+ });
57
+ // Save to file
58
+ fs.writeFileSync(filepath, screenshotBuffer);
59
+ // Return screenshot object with path
60
+ return {
61
+ path: filepath,
62
+ mimeType: 'image/png',
63
+ };
64
+ }
65
+ catch (error) {
66
+ throw new Error(`Failed to capture element screenshot: ${error}`);
67
+ }
68
+ }
69
+ async extractWithPadding(elementHandle, tempDir, padding = 16) {
70
+ const timestamp = Date.now();
71
+ const filename = `element-${timestamp}.png`;
72
+ const filepath = path.join(tempDir, filename);
73
+ try {
74
+ if (!fs.existsSync(tempDir)) {
75
+ fs.mkdirSync(tempDir, { recursive: true });
76
+ }
77
+ // Get element screenshot
78
+ // Get element screenshot
79
+ const screenshotUint8 = await elementHandle.screenshot({
80
+ type: 'png',
81
+ });
82
+ let finalBuffer = Buffer.from(screenshotUint8);
83
+ // Use jimp to add padding
84
+ if (padding > 0) {
85
+ const image = await jimp_1.default.read(finalBuffer);
86
+ const imageWidth = image.getWidth();
87
+ const imageHeight = image.getHeight();
88
+ const paddedImage = new jimp_1.default(imageWidth + (padding * 2), imageHeight + (padding * 2), 0xffffff1a);
89
+ paddedImage.composite(image, padding, padding);
90
+ finalBuffer = await paddedImage.getBufferAsync(jimp_1.default.MIME_PNG);
91
+ }
92
+ fs.writeFileSync(filepath, finalBuffer);
93
+ return {
94
+ path: filepath,
95
+ mimeType: 'image/png',
96
+ };
97
+ }
98
+ catch (error) {
99
+ throw new Error(`Failed to capture element screenshot with padding: ${error}`);
100
+ }
101
+ }
102
+ }
103
+ exports.ScreenshotExtractor = ScreenshotExtractor;
104
+ //# sourceMappingURL=screenshotExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshotExtractor.js","sourceRoot":"","sources":["../../src/extraction/screenshotExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import * as puppeteer from 'puppeteer-core';
2
+ import { Selector } from '../schemas';
3
+ export declare class SelectorExtractor {
4
+ extract(elementHandle: puppeteer.ElementHandle): Promise<{
5
+ primary: Selector;
6
+ alternates?: Selector[];
7
+ }>;
8
+ private tryDataAttributes;
9
+ private tryStableId;
10
+ private isUnstableId;
11
+ private tryRoleAriaLabel;
12
+ private tryStableClassCombo;
13
+ private tryPositionBased;
14
+ private getCssPath;
15
+ }
16
+ //# sourceMappingURL=selectorExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectorExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/selectorExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,iBAAiB;IACtB,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,QAAQ,CAAC;QAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;YAmDhG,iBAAiB;YAsBjB,WAAW;IAoBzB,OAAO,CAAC,YAAY;YAmBN,gBAAgB;YAkBhB,mBAAmB;YA6BnB,gBAAgB;YAahB,UAAU;CAgCzB"}