@ticktockbent/charlotte 0.4.1 → 0.5.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 (106) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +101 -27
  3. package/dist/browser/cdp-session.d.ts +9 -1
  4. package/dist/browser/cdp-session.d.ts.map +1 -1
  5. package/dist/browser/cdp-session.js +32 -10
  6. package/dist/browser/cdp-session.js.map +1 -1
  7. package/dist/browser/page-manager.d.ts.map +1 -1
  8. package/dist/browser/page-manager.js +2 -1
  9. package/dist/browser/page-manager.js.map +1 -1
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +14 -8
  13. package/dist/cli.js.map +1 -1
  14. package/dist/dev/auditor.d.ts.map +1 -1
  15. package/dist/dev/auditor.js +15 -36
  16. package/dist/dev/auditor.js.map +1 -1
  17. package/dist/dev/dev-mode-state.d.ts.map +1 -1
  18. package/dist/dev/dev-mode-state.js.map +1 -1
  19. package/dist/dev/static-server.d.ts.map +1 -1
  20. package/dist/dev/static-server.js +6 -2
  21. package/dist/dev/static-server.js.map +1 -1
  22. package/dist/index.js +9 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/renderer/accessibility-extractor.d.ts +3 -1
  25. package/dist/renderer/accessibility-extractor.d.ts.map +1 -1
  26. package/dist/renderer/accessibility-extractor.js +6 -6
  27. package/dist/renderer/accessibility-extractor.js.map +1 -1
  28. package/dist/renderer/dom-path.d.ts.map +1 -1
  29. package/dist/renderer/dom-path.js.map +1 -1
  30. package/dist/renderer/element-id-generator.d.ts +4 -1
  31. package/dist/renderer/element-id-generator.d.ts.map +1 -1
  32. package/dist/renderer/element-id-generator.js +12 -1
  33. package/dist/renderer/element-id-generator.js.map +1 -1
  34. package/dist/renderer/frame-discovery.d.ts +23 -0
  35. package/dist/renderer/frame-discovery.d.ts.map +1 -0
  36. package/dist/renderer/frame-discovery.js +102 -0
  37. package/dist/renderer/frame-discovery.js.map +1 -0
  38. package/dist/renderer/interactive-extractor.d.ts +8 -1
  39. package/dist/renderer/interactive-extractor.d.ts.map +1 -1
  40. package/dist/renderer/interactive-extractor.js +36 -9
  41. package/dist/renderer/interactive-extractor.js.map +1 -1
  42. package/dist/renderer/layout-extractor.d.ts +4 -1
  43. package/dist/renderer/layout-extractor.d.ts.map +1 -1
  44. package/dist/renderer/layout-extractor.js +15 -2
  45. package/dist/renderer/layout-extractor.js.map +1 -1
  46. package/dist/renderer/renderer-pipeline.d.ts +26 -1
  47. package/dist/renderer/renderer-pipeline.d.ts.map +1 -1
  48. package/dist/renderer/renderer-pipeline.js +174 -18
  49. package/dist/renderer/renderer-pipeline.js.map +1 -1
  50. package/dist/renderer/structural-tree-extractor.d.ts +7 -0
  51. package/dist/renderer/structural-tree-extractor.d.ts.map +1 -0
  52. package/dist/renderer/structural-tree-extractor.js +245 -0
  53. package/dist/renderer/structural-tree-extractor.js.map +1 -0
  54. package/dist/server.d.ts +2 -0
  55. package/dist/server.d.ts.map +1 -1
  56. package/dist/server.js +3 -4
  57. package/dist/server.js.map +1 -1
  58. package/dist/state/artifact-store.d.ts.map +1 -1
  59. package/dist/state/artifact-store.js +1 -2
  60. package/dist/state/artifact-store.js.map +1 -1
  61. package/dist/state/differ.d.ts.map +1 -1
  62. package/dist/state/differ.js.map +1 -1
  63. package/dist/tools/dev-mode.d.ts.map +1 -1
  64. package/dist/tools/dev-mode.js +4 -16
  65. package/dist/tools/dev-mode.js.map +1 -1
  66. package/dist/tools/dialog.d.ts.map +1 -1
  67. package/dist/tools/dialog.js +2 -4
  68. package/dist/tools/dialog.js.map +1 -1
  69. package/dist/tools/evaluate.d.ts.map +1 -1
  70. package/dist/tools/evaluate.js +1 -4
  71. package/dist/tools/evaluate.js.map +1 -1
  72. package/dist/tools/interaction.d.ts +17 -0
  73. package/dist/tools/interaction.d.ts.map +1 -1
  74. package/dist/tools/interaction.js +127 -69
  75. package/dist/tools/interaction.js.map +1 -1
  76. package/dist/tools/meta-tool.d.ts.map +1 -1
  77. package/dist/tools/meta-tool.js.map +1 -1
  78. package/dist/tools/monitoring.d.ts.map +1 -1
  79. package/dist/tools/monitoring.js +35 -19
  80. package/dist/tools/monitoring.js.map +1 -1
  81. package/dist/tools/navigation.d.ts.map +1 -1
  82. package/dist/tools/navigation.js +20 -16
  83. package/dist/tools/navigation.js.map +1 -1
  84. package/dist/tools/observation.d.ts.map +1 -1
  85. package/dist/tools/observation.js +50 -13
  86. package/dist/tools/observation.js.map +1 -1
  87. package/dist/tools/session.d.ts.map +1 -1
  88. package/dist/tools/session.js +38 -27
  89. package/dist/tools/session.js.map +1 -1
  90. package/dist/tools/tool-groups.d.ts +1 -1
  91. package/dist/tools/tool-groups.d.ts.map +1 -1
  92. package/dist/tools/tool-groups.js +9 -22
  93. package/dist/tools/tool-groups.js.map +1 -1
  94. package/dist/tools/tool-helpers.d.ts +50 -5
  95. package/dist/tools/tool-helpers.d.ts.map +1 -1
  96. package/dist/tools/tool-helpers.js +102 -2
  97. package/dist/tools/tool-helpers.js.map +1 -1
  98. package/dist/types/config.d.ts +6 -0
  99. package/dist/types/config.d.ts.map +1 -1
  100. package/dist/types/config.js +2 -0
  101. package/dist/types/config.js.map +1 -1
  102. package/dist/types/page-representation.d.ts +14 -0
  103. package/dist/types/page-representation.d.ts.map +1 -1
  104. package/dist/utils/wait.js +1 -1
  105. package/dist/utils/wait.js.map +1 -1
  106. package/package.json +24 -8
@@ -0,0 +1,102 @@
1
+ import { logger } from "../utils/logger.js";
2
+ /**
3
+ * Discover all child frames in the page up to maxDepth levels.
4
+ * Returns frame metadata including CDP sessions and coordinate offsets.
5
+ */
6
+ export async function discoverFrames(page, cdpSessionManager, maxDepth) {
7
+ const discovered = [];
8
+ const mainSession = await cdpSessionManager.getSession(page);
9
+ await traverseFrames(page.mainFrame(), mainSession, cdpSessionManager, { x: 0, y: 0 }, 0, maxDepth, discovered);
10
+ logger.debug(`Discovered ${discovered.length} child frame(s)`);
11
+ return discovered;
12
+ }
13
+ async function traverseFrames(parentFrame, parentSession, cdpSessionManager, parentOffset, currentDepth, maxDepth, discovered) {
14
+ if (currentDepth >= maxDepth)
15
+ return;
16
+ const childFrames = parentFrame.childFrames();
17
+ if (childFrames.length === 0)
18
+ return;
19
+ for (const childFrame of childFrames) {
20
+ // Skip frames without URLs or about:blank frames
21
+ const frameUrl = childFrame.url();
22
+ if (!frameUrl || frameUrl === "about:blank") {
23
+ continue;
24
+ }
25
+ try {
26
+ const frameId = cdpSessionManager.getFrameId(childFrame);
27
+ // Get the iframe element's bounds in the parent frame's coordinate space
28
+ const iframeBoundsInParent = await getIframeBounds(parentSession, frameId);
29
+ // Compute page-level offset: parent's offset + iframe element position
30
+ const contentOffset = {
31
+ x: parentOffset.x + (iframeBoundsInParent?.x ?? 0),
32
+ y: parentOffset.y + (iframeBoundsInParent?.y ?? 0),
33
+ };
34
+ // Page-level bounds for the iframe element
35
+ const iframeBounds = iframeBoundsInParent
36
+ ? {
37
+ x: contentOffset.x,
38
+ y: contentOffset.y,
39
+ w: iframeBoundsInParent.w,
40
+ h: iframeBoundsInParent.h,
41
+ }
42
+ : null;
43
+ // Get a CDP session for this frame
44
+ let frameSession;
45
+ try {
46
+ frameSession = await cdpSessionManager.getFrameSession(childFrame);
47
+ }
48
+ catch (error) {
49
+ logger.debug(`Could not get session for frame ${frameUrl}`, error);
50
+ continue;
51
+ }
52
+ discovered.push({
53
+ frame: childFrame,
54
+ frameId,
55
+ url: frameUrl,
56
+ session: frameSession,
57
+ iframeBounds,
58
+ contentOffset,
59
+ });
60
+ // Recurse into nested iframes
61
+ await traverseFrames(childFrame, frameSession, cdpSessionManager, contentOffset, currentDepth + 1, maxDepth, discovered);
62
+ }
63
+ catch (error) {
64
+ logger.debug(`Failed to discover frame ${frameUrl}`, error);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Get the bounds of the <iframe> element that hosts a child frame.
70
+ * Uses the parent frame's CDP session to find the frame owner node.
71
+ */
72
+ async function getIframeBounds(parentSession, childFrameId) {
73
+ try {
74
+ // Get the frame owner (the <iframe> element in the parent DOM)
75
+ const { backendNodeId } = await parentSession.send("DOM.getFrameOwner", {
76
+ frameId: childFrameId,
77
+ });
78
+ if (!backendNodeId)
79
+ return null;
80
+ const { model } = await parentSession.send("DOM.getBoxModel", {
81
+ backendNodeId,
82
+ });
83
+ if (!model?.content)
84
+ return null;
85
+ const quad = model.content;
86
+ const minX = Math.min(quad[0], quad[2], quad[4], quad[6]);
87
+ const minY = Math.min(quad[1], quad[3], quad[5], quad[7]);
88
+ const maxX = Math.max(quad[0], quad[2], quad[4], quad[6]);
89
+ const maxY = Math.max(quad[1], quad[3], quad[5], quad[7]);
90
+ return {
91
+ x: Math.round(minX),
92
+ y: Math.round(minY),
93
+ w: Math.round(maxX - minX),
94
+ h: Math.round(maxY - minY),
95
+ };
96
+ }
97
+ catch (error) {
98
+ logger.debug(`Could not get iframe bounds for frame ${childFrameId}`, error);
99
+ return null;
100
+ }
101
+ }
102
+ //# sourceMappingURL=frame-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-discovery.js","sourceRoot":"","sources":["../../src/renderer/frame-discovery.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAc5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAU,EACV,iBAAoC,EACpC,QAAgB;IAEhB,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE7D,MAAM,cAAc,CAClB,IAAI,CAAC,SAAS,EAAE,EAChB,WAAW,EACX,iBAAiB,EACjB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EACd,CAAC,EACD,QAAQ,EACR,UAAU,CACX,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,cAAc,UAAU,CAAC,MAAM,iBAAiB,CAAC,CAAC;IAC/D,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,WAAkB,EAClB,aAAyB,EACzB,iBAAoC,EACpC,YAAsC,EACtC,YAAoB,EACpB,QAAgB,EAChB,UAA6B;IAE7B,IAAI,YAAY,IAAI,QAAQ;QAAE,OAAO;IAErC,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAErC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,iDAAiD;QACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC5C,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAEzD,yEAAyE;YACzE,MAAM,oBAAoB,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAE3E,uEAAuE;YACvE,MAAM,aAAa,GAAG;gBACpB,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC;gBAClD,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC;aACnD,CAAC;YAEF,2CAA2C;YAC3C,MAAM,YAAY,GAAG,oBAAoB;gBACvC,CAAC,CAAC;oBACE,CAAC,EAAE,aAAa,CAAC,CAAC;oBAClB,CAAC,EAAE,aAAa,CAAC,CAAC;oBAClB,CAAC,EAAE,oBAAoB,CAAC,CAAC;oBACzB,CAAC,EAAE,oBAAoB,CAAC,CAAC;iBAC1B;gBACH,CAAC,CAAC,IAAI,CAAC;YAET,mCAAmC;YACnC,IAAI,YAAwB,CAAC;YAC7B,IAAI,CAAC;gBACH,YAAY,GAAG,MAAM,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;gBACnE,SAAS;YACX,CAAC;YAED,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,UAAU;gBACjB,OAAO;gBACP,GAAG,EAAE,QAAQ;gBACb,OAAO,EAAE,YAAY;gBACrB,YAAY;gBACZ,aAAa;aACd,CAAC,CAAC;YAEH,8BAA8B;YAC9B,MAAM,cAAc,CAClB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,YAAY,GAAG,CAAC,EAChB,QAAQ,EACR,UAAU,CACX,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe,CAC5B,aAAyB,EACzB,YAAoB;IAEpB,IAAI,CAAC;QACH,+DAA+D;QAC/D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,mBAA0B,EAAE;YAC7E,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAEhC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,iBAAwB,EAAE;YACnE,aAAa;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,EAAE,OAAO;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,IAAI,GAAa,KAAK,CAAC,OAAO,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1D,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YAC1B,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;SAC3B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,yCAAyC,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -1,3 +1,4 @@
1
+ import type { CDPSession } from "puppeteer";
1
2
  import type { ParsedAXNode } from "./accessibility-extractor.js";
2
3
  import type { ElementIdGenerator } from "./element-id-generator.js";
3
4
  import type { Bounds, InteractiveElement, InteractiveElementType, FormRepresentation } from "../types/page-representation.js";
@@ -7,8 +8,14 @@ interface ExtractionResult {
7
8
  forms: FormRepresentation[];
8
9
  }
9
10
  export declare class InteractiveExtractor {
10
- extractInteractiveElements(rootNodes: ParsedAXNode[], boundsMap: Map<number, Bounds>, idGenerator: ElementIdGenerator): ExtractionResult;
11
+ extractInteractiveElements(rootNodes: ParsedAXNode[], boundsMap: Map<number, Bounds>, idGenerator: ElementIdGenerator, frameId?: string): ExtractionResult;
11
12
  private buildFormRepresentations;
12
13
  }
14
+ /**
15
+ * Post-extraction step: reclassify button-typed elements that are actually
16
+ * `<input type="file">` in the DOM. The AX tree represents file inputs as
17
+ * buttons, so we check the underlying DOM node via CDP.
18
+ */
19
+ export declare function reclassifyFileInputs(elements: InteractiveElement[], session: CDPSession, idGenerator: ElementIdGenerator): Promise<void>;
13
20
  export {};
14
21
  //# sourceMappingURL=interactive-extractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-extractor.d.ts","sourceRoot":"","sources":["../../src/renderer/interactive-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,sBAAsB,EAEtB,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AAEzC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAiBvE,CAAC;AAsCF,UAAU,gBAAgB;IACxB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,qBAAa,oBAAoB;IAC/B,0BAA0B,CACxB,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,WAAW,EAAE,kBAAkB,GAC9B,gBAAgB;IA8FnB,OAAO,CAAC,wBAAwB;CA8DjC"}
1
+ {"version":3,"file":"interactive-extractor.d.ts","sourceRoot":"","sources":["../../src/renderer/interactive-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,sBAAsB,EAEtB,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AAEzC,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAiBvE,CAAC;AAsCF,UAAU,gBAAgB;IACxB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED,qBAAa,oBAAoB;IAC/B,0BAA0B,CACxB,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,WAAW,EAAE,kBAAkB,EAC/B,OAAO,CAAC,EAAE,MAAM,GACf,gBAAgB;IA4FnB,OAAO,CAAC,wBAAwB;CA+DjC;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,kBAAkB,EAAE,EAC9B,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -51,7 +51,7 @@ function extractElementState(node) {
51
51
  return state;
52
52
  }
53
53
  export class InteractiveExtractor {
54
- extractInteractiveElements(rootNodes, boundsMap, idGenerator) {
54
+ extractInteractiveElements(rootNodes, boundsMap, idGenerator, frameId) {
55
55
  const elements = [];
56
56
  const formNodes = [];
57
57
  const traverse = (node) => {
@@ -61,7 +61,7 @@ export class InteractiveExtractor {
61
61
  if (isInteractiveRole(node.role)) {
62
62
  const elementType = mapRoleToElementType(node.role);
63
63
  const domPath = computeDOMPathSignature(node);
64
- const elementId = idGenerator.generateId(elementType, node.role, node.name, domPath, node.backendDOMNodeId);
64
+ const elementId = idGenerator.generateId(elementType, node.role, node.name, domPath, node.backendDOMNodeId, frameId);
65
65
  let bounds = null;
66
66
  if (node.backendDOMNodeId !== null) {
67
67
  bounds = boundsMap.get(node.backendDOMNodeId) ?? null;
@@ -92,8 +92,7 @@ export class InteractiveExtractor {
92
92
  if (elementType === "select") {
93
93
  const options = [];
94
94
  const collectOptions = (optionNode) => {
95
- if (optionNode.role === "option" ||
96
- optionNode.role === "listitem") {
95
+ if (optionNode.role === "option" || optionNode.role === "listitem") {
97
96
  options.push(optionNode.name || optionNode.value || "");
98
97
  }
99
98
  for (const child of optionNode.children) {
@@ -117,14 +116,14 @@ export class InteractiveExtractor {
117
116
  traverse(root);
118
117
  }
119
118
  // Build form representations
120
- const forms = this.buildFormRepresentations(formNodes, elements, idGenerator, boundsMap);
119
+ const forms = this.buildFormRepresentations(formNodes, elements, idGenerator, boundsMap, frameId);
121
120
  return { elements, forms };
122
121
  }
123
- buildFormRepresentations(formNodes, interactiveElements, idGenerator, boundsMap) {
122
+ buildFormRepresentations(formNodes, interactiveElements, idGenerator, _boundsMap, frameId) {
124
123
  const forms = [];
125
124
  for (const formNode of formNodes) {
126
125
  const domPath = computeDOMPathSignature(formNode);
127
- const formId = idGenerator.generateId("form", formNode.role, formNode.name, domPath, formNode.backendDOMNodeId);
126
+ const formId = idGenerator.generateId("form", formNode.role, formNode.name, domPath, formNode.backendDOMNodeId, frameId);
128
127
  // Collect IDs of interactive elements that are descendants of this form
129
128
  const formFieldIds = [];
130
129
  let submitButtonId = null;
@@ -139,8 +138,7 @@ export class InteractiveExtractor {
139
138
  });
140
139
  if (matchingElement) {
141
140
  if (node.role === "button" &&
142
- (node.properties["type"] === "submit" ||
143
- node.name?.toLowerCase().includes("submit"))) {
141
+ (node.properties["type"] === "submit" || node.name?.toLowerCase().includes("submit"))) {
144
142
  submitButtonId = matchingElement.id;
145
143
  }
146
144
  else {
@@ -164,4 +162,33 @@ export class InteractiveExtractor {
164
162
  return forms;
165
163
  }
166
164
  }
165
+ /**
166
+ * Post-extraction step: reclassify button-typed elements that are actually
167
+ * `<input type="file">` in the DOM. The AX tree represents file inputs as
168
+ * buttons, so we check the underlying DOM node via CDP.
169
+ */
170
+ export async function reclassifyFileInputs(elements, session, idGenerator) {
171
+ for (const element of elements) {
172
+ if (element.type !== "button")
173
+ continue;
174
+ const backendNodeId = idGenerator.resolveId(element.id);
175
+ if (backendNodeId === null)
176
+ continue;
177
+ try {
178
+ const { node } = await session.send("DOM.describeNode", { backendNodeId });
179
+ if (node.nodeName === "INPUT") {
180
+ const attrs = node.attributes ?? [];
181
+ for (let i = 0; i < attrs.length; i += 2) {
182
+ if (attrs[i] === "type" && attrs[i + 1] === "file") {
183
+ element.type = "file_input";
184
+ break;
185
+ }
186
+ }
187
+ }
188
+ }
189
+ catch {
190
+ // Node may have been detached — skip
191
+ }
192
+ }
193
+ }
167
194
  //# sourceMappingURL=interactive-extractor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-extractor.js","sourceRoot":"","sources":["../../src/renderer/interactive-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactive-extractor.js","sourceRoot":"","sources":["../../src/renderer/interactive-extractor.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@ import type { Bounds } from "../types/page-representation.js";
3
3
  export declare const ZERO_BOUNDS: Bounds;
4
4
  export declare class LayoutExtractor {
5
5
  getBounds(session: CDPSession, backendNodeId: number): Promise<Bounds | null>;
6
- getBoundsForNodes(session: CDPSession, backendNodeIds: number[]): Promise<Map<number, Bounds>>;
6
+ getBoundsForNodes(session: CDPSession, backendNodeIds: number[], frameOffset?: {
7
+ x: number;
8
+ y: number;
9
+ }): Promise<Map<number, Bounds>>;
7
10
  }
8
11
  //# sourceMappingURL=layout-extractor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-extractor.d.ts","sourceRoot":"","sources":["../../src/renderer/layout-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAG9D,eAAO,MAAM,WAAW,EAAE,MAAmC,CAAC;AAE9D,qBAAa,eAAe;IACpB,SAAS,CACb,OAAO,EAAE,UAAU,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4BnB,iBAAiB,CACrB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAwBhC"}
1
+ {"version":3,"file":"layout-extractor.d.ts","sourceRoot":"","sources":["../../src/renderer/layout-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAG9D,eAAO,MAAM,WAAW,EAAE,MAAmC,CAAC;AAE9D,qBAAa,eAAe;IACpB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4B7E,iBAAiB,CACrB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,MAAM,EAAE,EACxB,WAAW,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GACrC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAkChC"}
@@ -27,8 +27,10 @@ export class LayoutExtractor {
27
27
  return null;
28
28
  }
29
29
  }
30
- async getBoundsForNodes(session, backendNodeIds) {
30
+ async getBoundsForNodes(session, backendNodeIds, frameOffset) {
31
31
  const boundsMap = new Map();
32
+ const offsetX = frameOffset?.x ?? 0;
33
+ const offsetY = frameOffset?.y ?? 0;
32
34
  // Process in parallel for performance, but cap concurrency
33
35
  const batchSize = 50;
34
36
  for (let i = 0; i < backendNodeIds.length; i += batchSize) {
@@ -38,7 +40,18 @@ export class LayoutExtractor {
38
40
  return { nodeId, bounds };
39
41
  }));
40
42
  for (const { nodeId, bounds } of results) {
41
- boundsMap.set(nodeId, bounds ?? ZERO_BOUNDS);
43
+ if (bounds && (offsetX !== 0 || offsetY !== 0)) {
44
+ // Translate frame-local bounds to page-level coordinates
45
+ boundsMap.set(nodeId, {
46
+ x: bounds.x + offsetX,
47
+ y: bounds.y + offsetY,
48
+ w: bounds.w,
49
+ h: bounds.h,
50
+ });
51
+ }
52
+ else {
53
+ boundsMap.set(nodeId, bounds ?? ZERO_BOUNDS);
54
+ }
42
55
  }
43
56
  }
44
57
  logger.debug(`Extracted bounds for ${boundsMap.size}/${backendNodeIds.length} nodes`);
@@ -1 +1 @@
1
- {"version":3,"file":"layout-extractor.js","sourceRoot":"","sources":["../../src/renderer/layout-extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout-extractor.js","sourceRoot":"","sources":["../../src/renderer/layout-extractor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import type { Page } from "puppeteer";
2
2
  import type { CDPSessionManager } from "../browser/cdp-session.js";
3
3
  import { ElementIdGenerator } from "./element-id-generator.js";
4
+ import type { StructuralTreeOptions } from "./structural-tree-extractor.js";
4
5
  import type { PageRepresentation } from "../types/page-representation.js";
6
+ import type { CharlotteConfig } from "../types/config.js";
5
7
  export type DetailLevel = "minimal" | "summary" | "full";
6
8
  export interface RenderOptions {
7
9
  detail: DetailLevel;
@@ -11,17 +13,40 @@ export interface RenderOptions {
11
13
  export declare class RendererPipeline {
12
14
  private cdpSessionManager;
13
15
  private elementIdGenerator;
16
+ private config?;
14
17
  private accessibilityExtractor;
15
18
  private layoutExtractor;
16
19
  private interactiveExtractor;
17
20
  private contentExtractor;
18
- constructor(cdpSessionManager: CDPSessionManager, elementIdGenerator: ElementIdGenerator);
21
+ constructor(cdpSessionManager: CDPSessionManager, elementIdGenerator: ElementIdGenerator, config?: CharlotteConfig | undefined);
19
22
  render(page: Page, options: RenderOptions): Promise<PageRepresentation>;
23
+ /**
24
+ * Extract content from all discoverable child frames and merge into the
25
+ * main-frame arrays (landmarks, headings, elements, forms).
26
+ */
27
+ private extractIframeContent;
28
+ /**
29
+ * Extract AX tree, layout, landmarks, headings, interactive elements, forms,
30
+ * and content from a single child frame. Merges results into the provided arrays.
31
+ */
32
+ private extractSingleFrame;
33
+ /**
34
+ * Lightweight render that returns only the structural tree view.
35
+ * Extracts the AX tree and produces a compact tree string — skips
36
+ * layout extraction, interactive extraction, and content extraction.
37
+ */
38
+ renderTree(page: Page, options?: StructuralTreeOptions): Promise<string>;
20
39
  private collectNodesNeedingBounds;
21
40
  private isInteractiveNode;
22
41
  private extractLandmarks;
23
42
  private extractHeadings;
24
43
  private buildInteractiveSummary;
44
+ /**
45
+ * Build interactive summary from the already-extracted elements array.
46
+ * Used when iframe elements have been merged in and we need to rebuild
47
+ * the summary to include them.
48
+ */
49
+ private buildInteractiveSummaryFromElements;
25
50
  private getHeadingLevel;
26
51
  }
27
52
  //# sourceMappingURL=renderer-pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-pipeline.d.ts","sourceRoot":"","sources":["../../src/renderer/renderer-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAMnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,iCAAiC,CAAC;AAGzC,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAOzB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,kBAAkB;IAP5B,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,gBAAgB,CAA0B;gBAGxC,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB;IAG1C,MAAM,CACV,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAgG9B,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,uBAAuB;IAkC/B,OAAO,CAAC,eAAe;CAOxB"}
1
+ {"version":3,"file":"renderer-pipeline.d.ts","sourceRoot":"","sources":["../../src/renderer/renderer-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAenE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAI5E,OAAO,KAAK,EACV,kBAAkB,EAMnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAOzB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,MAAM,CAAC;IARjB,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,gBAAgB,CAA0B;gBAGxC,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,CAAC,EAAE,eAAe,YAAA;IAG5B,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiI7E;;;OAGG;YACW,oBAAoB;IAsDlC;;;OAGG;YACW,kBAAkB;IAqFhC;;;;OAIG;IACG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAO9E,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,gBAAgB;IA6CxB,OAAO,CAAC,eAAe;IAuCvB,OAAO,CAAC,uBAAuB;IAmC/B;;;;OAIG;IACH,OAAO,CAAC,mCAAmC;IAqB3C,OAAO,CAAC,eAAe;CAOxB"}