@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
@@ -1,26 +1,30 @@
1
- import { AccessibilityExtractor, isLandmarkRole, isHeadingRole, isInteractiveRole } from "./accessibility-extractor.js";
1
+ import { AccessibilityExtractor, isLandmarkRole, isHeadingRole, isInteractiveRole, } from "./accessibility-extractor.js";
2
2
  import { LayoutExtractor, ZERO_BOUNDS } from "./layout-extractor.js";
3
- import { InteractiveExtractor, ROLE_TO_ELEMENT_TYPE } from "./interactive-extractor.js";
3
+ import { InteractiveExtractor, ROLE_TO_ELEMENT_TYPE, reclassifyFileInputs, } from "./interactive-extractor.js";
4
4
  import { ContentExtractor } from "./content-extractor.js";
5
5
  import { ElementIdGenerator } from "./element-id-generator.js";
6
+ import { extractStructuralTree } from "./structural-tree-extractor.js";
6
7
  import { computeDOMPathSignature } from "./dom-path.js";
8
+ import { discoverFrames } from "./frame-discovery.js";
7
9
  import { logger } from "../utils/logger.js";
8
10
  export class RendererPipeline {
9
11
  cdpSessionManager;
10
12
  elementIdGenerator;
13
+ config;
11
14
  accessibilityExtractor = new AccessibilityExtractor();
12
15
  layoutExtractor = new LayoutExtractor();
13
16
  interactiveExtractor = new InteractiveExtractor();
14
17
  contentExtractor = new ContentExtractor();
15
- constructor(cdpSessionManager, elementIdGenerator) {
18
+ constructor(cdpSessionManager, elementIdGenerator, config) {
16
19
  this.cdpSessionManager = cdpSessionManager;
17
20
  this.elementIdGenerator = elementIdGenerator;
21
+ this.config = config;
18
22
  }
19
23
  async render(page, options) {
20
24
  const startTime = Date.now();
21
25
  logger.debug("Starting render pipeline", { detail: options.detail });
22
26
  const session = await this.cdpSessionManager.getSession(page);
23
- // Step 1: Extract accessibility tree
27
+ // Step 1: Extract accessibility tree (main frame)
24
28
  const rootNodes = await this.accessibilityExtractor.extract(session);
25
29
  // Step 2: Collect nodes that need layout data
26
30
  const nodesNeedingBounds = this.collectNodesNeedingBounds(rootNodes);
@@ -37,6 +41,8 @@ export class RendererPipeline {
37
41
  const headings = this.extractHeadings(rootNodes, freshIdGenerator);
38
42
  // Step 7: Extract interactive elements and forms
39
43
  const { elements, forms } = this.interactiveExtractor.extractInteractiveElements(rootNodes, boundsMap, freshIdGenerator);
44
+ // Step 7.5: Reclassify file inputs from "button" to "file_input"
45
+ await reclassifyFileInputs(elements, session, freshIdGenerator);
40
46
  // Step 8: Extract content based on detail level
41
47
  let contentSummary;
42
48
  let fullContent;
@@ -51,9 +57,28 @@ export class RendererPipeline {
51
57
  if (options.detail === "minimal") {
52
58
  interactiveSummary = this.buildInteractiveSummary(rootNodes);
53
59
  }
54
- // Step 9: Atomically replace the shared ID generator
60
+ // Step 9: Extract iframe content if enabled
61
+ let iframeInfos;
62
+ if (this.config?.includeIframes) {
63
+ const iframeResult = await this.extractIframeContent(page, options, freshIdGenerator, landmarks, headings, elements, forms);
64
+ if (iframeResult.iframeInfos.length > 0) {
65
+ iframeInfos = iframeResult.iframeInfos;
66
+ // Merge iframe content summaries
67
+ if (contentSummary !== undefined && iframeResult.contentSummaries.length > 0) {
68
+ contentSummary += "; " + iframeResult.contentSummaries.join("; ");
69
+ }
70
+ if (fullContent !== undefined && iframeResult.fullContents.length > 0) {
71
+ fullContent += "\n\n" + iframeResult.fullContents.join("\n\n");
72
+ }
73
+ // Rebuild interactive summary if needed (now includes iframe elements)
74
+ if (options.detail === "minimal") {
75
+ interactiveSummary = this.buildInteractiveSummaryFromElements(elements);
76
+ }
77
+ }
78
+ }
79
+ // Step 10: Atomically replace the shared ID generator
55
80
  this.elementIdGenerator.replaceWith(freshIdGenerator);
56
- // Step 10: Get page metadata
81
+ // Step 11: Get page metadata
57
82
  const url = page.url();
58
83
  const title = await page.title();
59
84
  const viewport = page.viewport() ?? { width: 1280, height: 720 };
@@ -72,6 +97,7 @@ export class RendererPipeline {
72
97
  interactive: elements,
73
98
  forms,
74
99
  ...(interactiveSummary ? { interactive_summary: interactiveSummary } : {}),
100
+ ...(iframeInfos ? { iframes: iframeInfos } : {}),
75
101
  errors: {
76
102
  console: [],
77
103
  network: [],
@@ -83,15 +109,111 @@ export class RendererPipeline {
83
109
  headings: headings.length,
84
110
  interactive: elements.length,
85
111
  forms: forms.length,
112
+ iframes: iframeInfos?.length ?? 0,
86
113
  });
87
114
  return representation;
88
115
  }
116
+ /**
117
+ * Extract content from all discoverable child frames and merge into the
118
+ * main-frame arrays (landmarks, headings, elements, forms).
119
+ */
120
+ async extractIframeContent(page, options, freshIdGenerator, landmarks, headings, elements, forms) {
121
+ const iframeInfos = [];
122
+ const contentSummaries = [];
123
+ const fullContents = [];
124
+ const maxDepth = this.config?.iframeDepth ?? 3;
125
+ let discoveredFrames;
126
+ try {
127
+ discoveredFrames = await discoverFrames(page, this.cdpSessionManager, maxDepth);
128
+ }
129
+ catch (error) {
130
+ logger.debug("Frame discovery failed", error);
131
+ return { iframeInfos, contentSummaries, fullContents };
132
+ }
133
+ for (const discoveredFrame of discoveredFrames) {
134
+ try {
135
+ await this.extractSingleFrame(discoveredFrame, options, freshIdGenerator, landmarks, headings, elements, forms, contentSummaries, fullContents);
136
+ iframeInfos.push({
137
+ frame_id: discoveredFrame.frameId,
138
+ url: discoveredFrame.url,
139
+ bounds: discoveredFrame.iframeBounds,
140
+ });
141
+ }
142
+ catch (error) {
143
+ logger.debug(`Failed to extract iframe content from ${discoveredFrame.url}`, error);
144
+ }
145
+ }
146
+ return { iframeInfos, contentSummaries, fullContents };
147
+ }
148
+ /**
149
+ * Extract AX tree, layout, landmarks, headings, interactive elements, forms,
150
+ * and content from a single child frame. Merges results into the provided arrays.
151
+ */
152
+ async extractSingleFrame(discoveredFrame, options, freshIdGenerator, landmarks, headings, elements, forms, contentSummaries, fullContents) {
153
+ const { session, frameId, url: frameUrl, contentOffset } = discoveredFrame;
154
+ // Extract AX tree for this frame
155
+ const frameRootNodes = await this.accessibilityExtractor.extract(session, frameId);
156
+ if (frameRootNodes.length === 0)
157
+ return;
158
+ // Collect and extract layout with offset
159
+ const nodesNeedingBounds = this.collectNodesNeedingBounds(frameRootNodes);
160
+ const backendNodeIds = nodesNeedingBounds
161
+ .filter((n) => n.backendDOMNodeId !== null)
162
+ .map((n) => n.backendDOMNodeId);
163
+ const boundsMap = await this.layoutExtractor.getBoundsForNodes(session, backendNodeIds, contentOffset);
164
+ // Extract landmarks (with frame annotation)
165
+ const frameLandmarks = this.extractLandmarks(frameRootNodes, boundsMap, freshIdGenerator, frameId);
166
+ for (const landmark of frameLandmarks) {
167
+ landmark.frame = frameUrl;
168
+ landmarks.push(landmark);
169
+ }
170
+ // Extract headings (with frame annotation)
171
+ const frameHeadings = this.extractHeadings(frameRootNodes, freshIdGenerator, frameId);
172
+ for (const heading of frameHeadings) {
173
+ heading.frame = frameUrl;
174
+ headings.push(heading);
175
+ }
176
+ // Extract interactive elements and forms (with frame annotation)
177
+ const frameResult = this.interactiveExtractor.extractInteractiveElements(frameRootNodes, boundsMap, freshIdGenerator, frameId);
178
+ // Reclassify file inputs for this frame
179
+ await reclassifyFileInputs(frameResult.elements, session, freshIdGenerator);
180
+ for (const element of frameResult.elements) {
181
+ element.frame = frameUrl;
182
+ elements.push(element);
183
+ }
184
+ for (const form of frameResult.forms) {
185
+ form.frame = frameUrl;
186
+ forms.push(form);
187
+ }
188
+ // Extract content
189
+ if (options.detail !== "minimal") {
190
+ const frameSummary = this.contentExtractor.extractSummary(frameRootNodes);
191
+ if (frameSummary) {
192
+ contentSummaries.push(`iframe (${frameUrl}): ${frameSummary}`);
193
+ }
194
+ }
195
+ if (options.detail === "full") {
196
+ const frameFullContent = this.contentExtractor.extractFullContent(frameRootNodes);
197
+ if (frameFullContent) {
198
+ fullContents.push(`--- iframe: ${frameUrl} ---\n${frameFullContent}`);
199
+ }
200
+ }
201
+ }
202
+ /**
203
+ * Lightweight render that returns only the structural tree view.
204
+ * Extracts the AX tree and produces a compact tree string — skips
205
+ * layout extraction, interactive extraction, and content extraction.
206
+ */
207
+ async renderTree(page, options) {
208
+ const session = await this.cdpSessionManager.getSession(page);
209
+ const rootNodes = await this.accessibilityExtractor.extract(session);
210
+ const title = await page.title();
211
+ return extractStructuralTree(rootNodes, title, options);
212
+ }
89
213
  collectNodesNeedingBounds(rootNodes) {
90
214
  const nodes = [];
91
215
  const traverse = (node) => {
92
- if (isLandmarkRole(node.role) ||
93
- isHeadingRole(node.role) ||
94
- this.isInteractiveNode(node)) {
216
+ if (isLandmarkRole(node.role) || isHeadingRole(node.role) || this.isInteractiveNode(node)) {
95
217
  nodes.push(node);
96
218
  }
97
219
  for (const child of node.children) {
@@ -105,14 +227,26 @@ export class RendererPipeline {
105
227
  }
106
228
  isInteractiveNode(node) {
107
229
  const interactiveRoles = new Set([
108
- "button", "link", "textbox", "combobox", "listbox",
109
- "checkbox", "radio", "switch", "slider", "spinbutton",
110
- "searchbox", "menuitem", "menuitemcheckbox", "menuitemradio",
111
- "tab", "treeitem",
230
+ "button",
231
+ "link",
232
+ "textbox",
233
+ "combobox",
234
+ "listbox",
235
+ "checkbox",
236
+ "radio",
237
+ "switch",
238
+ "slider",
239
+ "spinbutton",
240
+ "searchbox",
241
+ "menuitem",
242
+ "menuitemcheckbox",
243
+ "menuitemradio",
244
+ "tab",
245
+ "treeitem",
112
246
  ]);
113
247
  return interactiveRoles.has(node.role);
114
248
  }
115
- extractLandmarks(rootNodes, boundsMap, idGenerator) {
249
+ extractLandmarks(rootNodes, boundsMap, idGenerator, frameId) {
116
250
  const landmarks = [];
117
251
  const traverse = (node) => {
118
252
  if (isLandmarkRole(node.role)) {
@@ -121,7 +255,7 @@ export class RendererPipeline {
121
255
  bounds = boundsMap.get(node.backendDOMNodeId) ?? ZERO_BOUNDS;
122
256
  }
123
257
  const domPath = computeDOMPathSignature(node);
124
- const landmarkId = idGenerator.generateId("region", node.role, node.name, domPath, node.backendDOMNodeId);
258
+ const landmarkId = idGenerator.generateId("region", node.role, node.name, domPath, node.backendDOMNodeId, frameId);
125
259
  landmarks.push({
126
260
  id: landmarkId,
127
261
  role: node.role,
@@ -138,13 +272,13 @@ export class RendererPipeline {
138
272
  }
139
273
  return landmarks;
140
274
  }
141
- extractHeadings(rootNodes, idGenerator) {
275
+ extractHeadings(rootNodes, idGenerator, frameId) {
142
276
  const headings = [];
143
277
  const traverse = (node) => {
144
278
  if (isHeadingRole(node.role)) {
145
279
  const level = this.getHeadingLevel(node);
146
280
  const domPath = computeDOMPathSignature(node);
147
- const headingId = idGenerator.generateId("heading", node.role, node.name, domPath, node.backendDOMNodeId);
281
+ const headingId = idGenerator.generateId("heading", node.role, node.name, domPath, node.backendDOMNodeId, frameId);
148
282
  headings.push({
149
283
  level,
150
284
  text: node.name || "",
@@ -175,7 +309,8 @@ export class RendererPipeline {
175
309
  if (!landmarkCounts[landmarkKey]) {
176
310
  landmarkCounts[landmarkKey] = {};
177
311
  }
178
- landmarkCounts[landmarkKey][elementType] = (landmarkCounts[landmarkKey][elementType] ?? 0) + 1;
312
+ landmarkCounts[landmarkKey][elementType] =
313
+ (landmarkCounts[landmarkKey][elementType] ?? 0) + 1;
179
314
  total++;
180
315
  }
181
316
  for (const child of node.children) {
@@ -187,6 +322,27 @@ export class RendererPipeline {
187
322
  }
188
323
  return { total, by_landmark: landmarkCounts };
189
324
  }
325
+ /**
326
+ * Build interactive summary from the already-extracted elements array.
327
+ * Used when iframe elements have been merged in and we need to rebuild
328
+ * the summary to include them.
329
+ */
330
+ buildInteractiveSummaryFromElements(elements) {
331
+ const PAGE_ROOT_KEY = "(page root)";
332
+ const IFRAME_KEY = "(iframe)";
333
+ const landmarkCounts = {};
334
+ let total = 0;
335
+ for (const element of elements) {
336
+ const landmarkKey = element.frame ? IFRAME_KEY : PAGE_ROOT_KEY;
337
+ if (!landmarkCounts[landmarkKey]) {
338
+ landmarkCounts[landmarkKey] = {};
339
+ }
340
+ landmarkCounts[landmarkKey][element.type] =
341
+ (landmarkCounts[landmarkKey][element.type] ?? 0) + 1;
342
+ total++;
343
+ }
344
+ return { total, by_landmark: landmarkCounts };
345
+ }
190
346
  getHeadingLevel(node) {
191
347
  const level = node.properties["level"];
192
348
  if (typeof level === "number" && level >= 1 && level <= 6) {
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-pipeline.js","sourceRoot":"","sources":["../../src/renderer/renderer-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer-pipeline.js","sourceRoot":"","sources":["../../src/renderer/renderer-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ParsedAXNode } from "./accessibility-extractor.js";
2
+ export interface StructuralTreeOptions {
3
+ /** Include accessible names on interactive elements. Default: false. */
4
+ labelInteractive?: boolean;
5
+ }
6
+ export declare function extractStructuralTree(rootNodes: ParsedAXNode[], pageTitle?: string, options?: StructuralTreeOptions): string;
7
+ //# sourceMappingURL=structural-tree-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural-tree-extractor.d.ts","sourceRoot":"","sources":["../../src/renderer/structural-tree-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAuGjE,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA8LD,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,YAAY,EAAE,EACzB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,MAAM,CASR"}
@@ -0,0 +1,245 @@
1
+ import { isLandmarkRole, isHeadingRole, isInteractiveRole } from "./accessibility-extractor.js";
2
+ // ─── Role → display tag mappings ───
3
+ const INTERACTIVE_TAG = {
4
+ button: "button",
5
+ link: "link",
6
+ textbox: "input",
7
+ searchbox: "search",
8
+ combobox: "select",
9
+ listbox: "select",
10
+ checkbox: "checkbox",
11
+ radio: "radio",
12
+ switch: "toggle",
13
+ slider: "slider",
14
+ spinbutton: "spinbutton",
15
+ menuitem: "menuitem",
16
+ menuitemcheckbox: "menuitem",
17
+ menuitemradio: "menuitem",
18
+ tab: "tab",
19
+ treeitem: "treeitem",
20
+ };
21
+ const CONTENT_MARKER_ROLES = new Set([
22
+ "paragraph",
23
+ "blockquote",
24
+ "image",
25
+ "img",
26
+ "figure",
27
+ ]);
28
+ const LEAF_ROLES = new Set([
29
+ "StaticText",
30
+ "text",
31
+ "InlineTextBox",
32
+ "LineBreak",
33
+ "separator",
34
+ ]);
35
+ const LANDMARK_TAGS = new Set([
36
+ "banner",
37
+ "navigation",
38
+ "main",
39
+ "complementary",
40
+ "contentinfo",
41
+ "form",
42
+ "region",
43
+ "search",
44
+ ]);
45
+ // ─── Helpers ───
46
+ function containsInteractive(node) {
47
+ if (isInteractiveRole(node.role))
48
+ return true;
49
+ return node.children.some((child) => containsInteractive(child));
50
+ }
51
+ function countListItems(node) {
52
+ return node.children.filter((c) => c.role === "listitem").length;
53
+ }
54
+ function getTableDimensions(node) {
55
+ let rows = 0;
56
+ let maxCols = 0;
57
+ const countRows = (n) => {
58
+ if (n.role === "row") {
59
+ rows++;
60
+ const cols = n.children.filter((c) => c.role === "cell" ||
61
+ c.role === "columnheader" ||
62
+ c.role === "rowheader" ||
63
+ c.role === "gridcell").length;
64
+ if (cols > maxCols)
65
+ maxCols = cols;
66
+ }
67
+ for (const child of n.children)
68
+ countRows(child);
69
+ };
70
+ countRows(node);
71
+ return rows > 0 ? { rows, cols: maxCols } : null;
72
+ }
73
+ function getHeadingLevel(node) {
74
+ const level = node.properties["level"];
75
+ if (typeof level === "number" && level >= 1 && level <= 6)
76
+ return level;
77
+ return 2;
78
+ }
79
+ // ─── Tree building ───
80
+ function buildDisplayTree(nodes, options = {}) {
81
+ const result = [];
82
+ for (const node of nodes) {
83
+ if (LEAF_ROLES.has(node.role))
84
+ continue;
85
+ if (isLandmarkRole(node.role)) {
86
+ const label = node.name && node.name !== node.role ? node.name : undefined;
87
+ result.push({
88
+ tag: node.role,
89
+ label,
90
+ children: buildDisplayTree(node.children, options),
91
+ collapsible: false,
92
+ });
93
+ continue;
94
+ }
95
+ if (isHeadingRole(node.role)) {
96
+ const level = getHeadingLevel(node);
97
+ const hasLinkChild = node.children.some((c) => c.role === "link");
98
+ result.push({
99
+ tag: hasLinkChild ? `h${level}→link` : `h${level}`,
100
+ label: node.name || undefined,
101
+ children: [],
102
+ collapsible: false,
103
+ });
104
+ continue;
105
+ }
106
+ if (isInteractiveRole(node.role)) {
107
+ const tag = INTERACTIVE_TAG[node.role] ?? node.role;
108
+ const label = options.labelInteractive ? (node.name || undefined) : undefined;
109
+ result.push({
110
+ tag,
111
+ label,
112
+ children: [],
113
+ collapsible: !label,
114
+ });
115
+ continue;
116
+ }
117
+ if (CONTENT_MARKER_ROLES.has(node.role)) {
118
+ result.push({
119
+ tag: node.role === "img" ? "image" : node.role,
120
+ children: [],
121
+ collapsible: true,
122
+ });
123
+ continue;
124
+ }
125
+ // Lists: passthrough if they contain interactive elements, marker otherwise
126
+ if (node.role === "list") {
127
+ if (containsInteractive(node)) {
128
+ result.push(...buildDisplayTree(node.children, options));
129
+ }
130
+ else {
131
+ const count = countListItems(node);
132
+ result.push({
133
+ tag: "list",
134
+ metadata: count > 0 ? `(${count})` : undefined,
135
+ children: [],
136
+ collapsible: true,
137
+ });
138
+ }
139
+ continue;
140
+ }
141
+ // Tables: passthrough if they contain interactive elements, marker otherwise
142
+ if (node.role === "table") {
143
+ if (containsInteractive(node)) {
144
+ result.push(...buildDisplayTree(node.children, options));
145
+ }
146
+ else {
147
+ const dims = getTableDimensions(node);
148
+ result.push({
149
+ tag: "table",
150
+ metadata: dims ? `${dims.rows}×${dims.cols}` : undefined,
151
+ children: [],
152
+ collapsible: true,
153
+ });
154
+ }
155
+ continue;
156
+ }
157
+ // Everything else: passthrough — flatten children into parent
158
+ result.push(...buildDisplayTree(node.children, options));
159
+ }
160
+ return collapseConsecutive(result);
161
+ }
162
+ function collapseConsecutive(items) {
163
+ if (items.length <= 1)
164
+ return items;
165
+ const collapsed = [];
166
+ let i = 0;
167
+ while (i < items.length) {
168
+ const current = items[i];
169
+ if (!current.collapsible ||
170
+ current.children.length > 0 ||
171
+ current.label ||
172
+ current.metadata) {
173
+ collapsed.push(current);
174
+ i++;
175
+ continue;
176
+ }
177
+ // Count consecutive same-tag collapsible items
178
+ let count = 1;
179
+ while (i + count < items.length) {
180
+ const next = items[i + count];
181
+ if (next.tag !== current.tag ||
182
+ !next.collapsible ||
183
+ next.children.length > 0 ||
184
+ next.label ||
185
+ next.metadata) {
186
+ break;
187
+ }
188
+ count++;
189
+ }
190
+ if (count > 1) {
191
+ collapsed.push({
192
+ tag: `${current.tag} × ${count}`,
193
+ children: [],
194
+ collapsible: false,
195
+ });
196
+ }
197
+ else {
198
+ collapsed.push(current);
199
+ }
200
+ i += count;
201
+ }
202
+ return collapsed;
203
+ }
204
+ // ─── Rendering ───
205
+ function renderLines(items, isLastStack = []) {
206
+ const lines = [];
207
+ for (let i = 0; i < items.length; i++) {
208
+ const item = items[i];
209
+ const isLast = i === items.length - 1;
210
+ let prefix = "";
211
+ for (const parentIsLast of isLastStack) {
212
+ prefix += parentIsLast ? " " : "│ ";
213
+ }
214
+ prefix += isLast ? "└─ " : "├─ ";
215
+ let display;
216
+ if (LANDMARK_TAGS.has(item.tag)) {
217
+ display = item.label
218
+ ? `[${item.tag} "${item.label}"]`
219
+ : `[${item.tag}]`;
220
+ }
221
+ else {
222
+ display = item.tag;
223
+ if (item.label)
224
+ display += ` "${item.label}"`;
225
+ if (item.metadata)
226
+ display += ` ${item.metadata}`;
227
+ }
228
+ lines.push(prefix + display);
229
+ if (item.children.length > 0) {
230
+ lines.push(...renderLines(item.children, [...isLastStack, isLast]));
231
+ }
232
+ }
233
+ return lines;
234
+ }
235
+ // ─── Public API ───
236
+ export function extractStructuralTree(rootNodes, pageTitle, options) {
237
+ const displayTree = buildDisplayTree(rootNodes, options);
238
+ const treeLines = renderLines(displayTree);
239
+ const parts = [];
240
+ if (pageTitle)
241
+ parts.push(pageTitle);
242
+ parts.push(...treeLines);
243
+ return parts.join("\n");
244
+ }
245
+ //# sourceMappingURL=structural-tree-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structural-tree-extractor.js","sourceRoot":"","sources":["../../src/renderer/structural-tree-extractor.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { BrowserManager } from "./browser/browser-manager.js";
3
3
  import type { PageManager } from "./browser/page-manager.js";
4
+ import type { CDPSessionManager } from "./browser/cdp-session.js";
4
5
  import type { RendererPipeline } from "./renderer/renderer-pipeline.js";
5
6
  import type { ElementIdGenerator } from "./renderer/element-id-generator.js";
6
7
  import type { SnapshotStore } from "./state/snapshot-store.js";
@@ -12,6 +13,7 @@ import type { DevModeState } from "./dev/dev-mode-state.js";
12
13
  export interface ServerDeps {
13
14
  browserManager: BrowserManager;
14
15
  pageManager: PageManager;
16
+ cdpSessionManager: CDPSessionManager;
15
17
  rendererPipeline: RendererPipeline;
16
18
  elementIdGenerator: ElementIdGenerator;
17
19
  snapshotStore: SnapshotStore;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASzD,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAMnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE,aAAkB,GAC1B,kBAAkB,CA0FpB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASzD,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAMnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,GAAE,aAAkB,GAAG,kBAAkB,CAqF9F"}
package/dist/server.js CHANGED
@@ -23,9 +23,7 @@ export function createServer(deps, options = {}) {
23
23
  const activeLabel = profileName
24
24
  ? `Active profile: ${profileName}.`
25
25
  : `Active groups: ${options.toolGroups.join(", ")}.`;
26
- const instructionLines = [
27
- `Charlotte browser automation server. ${activeLabel}`,
28
- ];
26
+ const instructionLines = [`Charlotte browser automation server. ${activeLabel}`];
29
27
  if (fullyDisabledGroups.length > 0) {
30
28
  instructionLines.push("Additional tool groups available via charlotte:tools:");
31
29
  for (const group of fullyDisabledGroups) {
@@ -35,7 +33,7 @@ export function createServer(deps, options = {}) {
35
33
  }
36
34
  const server = new McpServer({
37
35
  name: "charlotte",
38
- version: "0.4.1",
36
+ version: "0.4.2",
39
37
  }, {
40
38
  capabilities: {
41
39
  tools: {},
@@ -53,6 +51,7 @@ export function createServer(deps, options = {}) {
53
51
  const toolDeps = {
54
52
  browserManager: deps.browserManager,
55
53
  pageManager: deps.pageManager,
54
+ cdpSessionManager: deps.cdpSessionManager,
56
55
  rendererPipeline: deps.rendererPipeline,
57
56
  elementIdGenerator: deps.elementIdGenerator,
58
57
  snapshotStore: deps.snapshotStore,