@reticlehq/browser 2.1.0 → 2.2.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 (156) hide show
  1. package/NOTICE +5 -0
  2. package/dist/actions/actions.d.ts +1 -1
  3. package/dist/actions/actions.d.ts.map +1 -1
  4. package/dist/actions/actions.js +37 -19
  5. package/dist/actions/actions.js.map +1 -1
  6. package/dist/commands/commands.d.ts +2 -0
  7. package/dist/commands/commands.d.ts.map +1 -1
  8. package/dist/commands/commands.js +20 -6
  9. package/dist/commands/commands.js.map +1 -1
  10. package/dist/dom/a11y.d.ts +17 -6
  11. package/dist/dom/a11y.d.ts.map +1 -1
  12. package/dist/dom/a11y.js +68 -32
  13. package/dist/dom/a11y.js.map +1 -1
  14. package/dist/dom/auto-anchor.d.ts +10 -10
  15. package/dist/dom/auto-anchor.js +10 -10
  16. package/dist/dom/blind-spots.d.ts +14 -0
  17. package/dist/dom/blind-spots.d.ts.map +1 -0
  18. package/dist/dom/blind-spots.js +30 -0
  19. package/dist/dom/blind-spots.js.map +1 -0
  20. package/dist/dom/chart.d.ts +93 -0
  21. package/dist/dom/chart.d.ts.map +1 -0
  22. package/dist/dom/chart.js +119 -0
  23. package/dist/dom/chart.js.map +1 -0
  24. package/dist/dom/dom-ignore.d.ts.map +1 -1
  25. package/dist/dom/dom-ignore.js +7 -2
  26. package/dist/dom/dom-ignore.js.map +1 -1
  27. package/dist/dom/query.d.ts +17 -4
  28. package/dist/dom/query.d.ts.map +1 -1
  29. package/dist/dom/query.js +185 -30
  30. package/dist/dom/query.js.map +1 -1
  31. package/dist/dom/refs.d.ts +25 -2
  32. package/dist/dom/refs.d.ts.map +1 -1
  33. package/dist/dom/refs.js +78 -3
  34. package/dist/dom/refs.js.map +1 -1
  35. package/dist/dom/snapshot.d.ts +6 -0
  36. package/dist/dom/snapshot.d.ts.map +1 -1
  37. package/dist/dom/snapshot.js +6 -1
  38. package/dist/dom/snapshot.js.map +1 -1
  39. package/dist/dom/source.d.ts +40 -0
  40. package/dist/dom/source.d.ts.map +1 -0
  41. package/dist/dom/source.js +59 -0
  42. package/dist/dom/source.js.map +1 -0
  43. package/dist/dom/theme.js +2 -2
  44. package/dist/dom/theme.js.map +1 -1
  45. package/dist/index.d.ts +6 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +9 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/observers/blind-spots.d.ts +19 -0
  50. package/dist/observers/blind-spots.d.ts.map +1 -0
  51. package/dist/observers/blind-spots.js +89 -0
  52. package/dist/observers/blind-spots.js.map +1 -0
  53. package/dist/observers/console.d.ts.map +1 -1
  54. package/dist/observers/console.js +39 -6
  55. package/dist/observers/console.js.map +1 -1
  56. package/dist/observers/dom.d.ts.map +1 -1
  57. package/dist/observers/dom.js +68 -9
  58. package/dist/observers/dom.js.map +1 -1
  59. package/dist/observers/focus.d.ts +10 -0
  60. package/dist/observers/focus.d.ts.map +1 -0
  61. package/dist/observers/focus.js +49 -0
  62. package/dist/observers/focus.js.map +1 -0
  63. package/dist/observers/network-body.d.ts +19 -0
  64. package/dist/observers/network-body.d.ts.map +1 -0
  65. package/dist/observers/network-body.js +143 -0
  66. package/dist/observers/network-body.js.map +1 -0
  67. package/dist/observers/network-redact.d.ts +8 -0
  68. package/dist/observers/network-redact.d.ts.map +1 -0
  69. package/dist/observers/network-redact.js +66 -0
  70. package/dist/observers/network-redact.js.map +1 -0
  71. package/dist/observers/network.d.ts +13 -6
  72. package/dist/observers/network.d.ts.map +1 -1
  73. package/dist/observers/network.js +288 -162
  74. package/dist/observers/network.js.map +1 -1
  75. package/dist/observers/route.d.ts.map +1 -1
  76. package/dist/observers/route.js +15 -9
  77. package/dist/observers/route.js.map +1 -1
  78. package/dist/observers/scroll.d.ts.map +1 -1
  79. package/dist/observers/scroll.js +35 -8
  80. package/dist/observers/scroll.js.map +1 -1
  81. package/dist/observers/state.d.ts +20 -0
  82. package/dist/observers/state.d.ts.map +1 -0
  83. package/dist/observers/state.js +87 -0
  84. package/dist/observers/state.js.map +1 -0
  85. package/dist/observers/storage.d.ts +9 -0
  86. package/dist/observers/storage.d.ts.map +1 -1
  87. package/dist/observers/storage.js +105 -3
  88. package/dist/observers/storage.js.map +1 -1
  89. package/dist/observers/types.d.ts +15 -0
  90. package/dist/observers/types.d.ts.map +1 -1
  91. package/dist/observers/types.js +29 -1
  92. package/dist/observers/types.js.map +1 -1
  93. package/dist/patching/capture-method.d.ts +27 -0
  94. package/dist/patching/capture-method.d.ts.map +1 -0
  95. package/dist/patching/capture-method.js +37 -0
  96. package/dist/patching/capture-method.js.map +1 -0
  97. package/dist/presenter/presenter-config.d.ts +3 -3
  98. package/dist/presenter/presenter-config.d.ts.map +1 -1
  99. package/dist/presenter/presenter-config.js +3 -3
  100. package/dist/presenter/presenter-config.js.map +1 -1
  101. package/dist/presenter/presenter-controls.d.ts +1 -1
  102. package/dist/presenter/presenter-controls.d.ts.map +1 -1
  103. package/dist/presenter/presenter-controls.js +3 -3
  104. package/dist/presenter/presenter-controls.js.map +1 -1
  105. package/dist/presenter/presenter-glow.d.ts +1 -1
  106. package/dist/presenter/presenter-glow.js +1 -1
  107. package/dist/presenter/presenter-styles.d.ts +1 -1
  108. package/dist/presenter/presenter-styles.d.ts.map +1 -1
  109. package/dist/presenter/presenter-styles.js +12 -3
  110. package/dist/presenter/presenter-styles.js.map +1 -1
  111. package/dist/presenter/presenter.d.ts +4 -4
  112. package/dist/presenter/presenter.d.ts.map +1 -1
  113. package/dist/presenter/presenter.js +5 -5
  114. package/dist/presenter/presenter.js.map +1 -1
  115. package/dist/recorder/recorder.d.ts +8 -8
  116. package/dist/recorder/recorder.d.ts.map +1 -1
  117. package/dist/recorder/recorder.js +9 -9
  118. package/dist/recorder/recorder.js.map +1 -1
  119. package/dist/registry/capabilities.d.ts +2 -2
  120. package/dist/registry/capabilities.d.ts.map +1 -1
  121. package/dist/registry/capabilities.js +1 -1
  122. package/dist/registry/capabilities.js.map +1 -1
  123. package/dist/registry/domains.d.ts +1 -1
  124. package/dist/registry/domains.js +1 -1
  125. package/dist/registry/emitter.d.ts +2 -2
  126. package/dist/registry/emitter.js +2 -2
  127. package/dist/registry/store-adapters.d.ts +128 -0
  128. package/dist/registry/store-adapters.d.ts.map +1 -0
  129. package/dist/registry/store-adapters.js +135 -0
  130. package/dist/registry/store-adapters.js.map +1 -0
  131. package/dist/registry/stores.d.ts +38 -2
  132. package/dist/registry/stores.d.ts.map +1 -1
  133. package/dist/registry/stores.js +109 -8
  134. package/dist/registry/stores.js.map +1 -1
  135. package/dist/reticle.d.ts +22 -3
  136. package/dist/reticle.d.ts.map +1 -1
  137. package/dist/reticle.js +79 -13
  138. package/dist/reticle.js.map +1 -1
  139. package/dist/review/annotator.js +1 -1
  140. package/dist/review/annotator.js.map +1 -1
  141. package/dist/review/mark-anchor.d.ts.map +1 -1
  142. package/dist/review/mark-anchor.js +1 -21
  143. package/dist/review/mark-anchor.js.map +1 -1
  144. package/dist/security/serialization.d.ts +29 -3
  145. package/dist/security/serialization.d.ts.map +1 -1
  146. package/dist/security/serialization.js +169 -28
  147. package/dist/security/serialization.js.map +1 -1
  148. package/dist/timers/clock.d.ts +13 -0
  149. package/dist/timers/clock.d.ts.map +1 -1
  150. package/dist/timers/clock.js +76 -6
  151. package/dist/timers/clock.js.map +1 -1
  152. package/dist/transport/transport.d.ts +1 -1
  153. package/dist/transport/transport.d.ts.map +1 -1
  154. package/dist/transport/transport.js +42 -4
  155. package/dist/transport/transport.js.map +1 -1
  156. package/package.json +7 -3
package/dist/dom/query.js CHANGED
@@ -1,32 +1,38 @@
1
1
  import { queryAllByRole, queryAllByText, queryAllByLabelText, queryAllByPlaceholderText, queryAllByTestId, queryAllByAltText, } from '@testing-library/dom';
2
- import { ElementState, QueryBy, } from '@reticlehq/core';
3
- import { describe, getStates } from './a11y.js';
2
+ import { DATA_RETICLE_SOURCE_ATTR, ElementState, QueryBy, REDACTED_VALUE, TRANSPORT_LIMITS, } from '@reticlehq/core';
3
+ import { describe, getStates, isVisible } from './a11y.js';
4
+ import { isSensitiveKey } from '../security/serialization.js';
4
5
  import { getCapabilities } from '../registry/capabilities.js';
5
6
  import { identifyComponent } from '../registry/adapters.js';
6
7
  import { refs } from './refs.js';
7
8
  const TESTID_ATTR = 'data-testid';
8
- const SOURCE_ATTR = 'data-reticle-source';
9
+ const SOURCE_ATTR = DATA_RETICLE_SOURCE_ATTR;
9
10
  const MAX_PRESENT_TESTIDS = 12;
10
11
  /** Bound the fiber-walk fallback so a component-name query can't scan an unbounded DOM. */
11
12
  const MAX_COMPONENT_CANDIDATES = 2000;
12
13
  /** Likely-actionable elements considered when resolving a component anchor without a source stamp. */
13
- const COMPONENT_CANDIDATE_SELECTOR = '[data-reticle-source], [data-testid], button, a, input, select, textarea, [role]';
14
+ const COMPONENT_CANDIDATE_SELECTOR = `[${SOURCE_ATTR}], [${TESTID_ATTR}], button, a, input, select, textarea, [role]`;
15
+ /**
16
+ * Resolve a scope to its container. A container of `null` means a scope was GIVEN but resolved to
17
+ * nothing (unmounted, or a selector that matches no element) — the caller must NOT fall back to the
18
+ * whole page, or a scoped query silently widens into a phantom match. `scope === undefined` (no scope)
19
+ * legitimately searches the body.
20
+ */
14
21
  function resolveContainer(scope) {
15
- const body = document.body;
16
22
  if (scope === undefined)
17
- return body;
23
+ return { container: document.body, scopeMissing: false };
18
24
  const byRef = refs.resolve(scope);
19
25
  if (byRef instanceof HTMLElement)
20
- return byRef;
26
+ return { container: byRef, scopeMissing: false };
21
27
  try {
22
28
  const found = document.querySelector(scope);
23
29
  if (found instanceof HTMLElement)
24
- return found;
30
+ return { container: found, scopeMissing: false };
25
31
  }
26
32
  catch {
27
- // invalid selector — fall through to body
33
+ // invalid selector — treat as a missing scope, never a whole-page search
28
34
  }
29
- return body;
35
+ return { container: null, scopeMissing: true };
30
36
  }
31
37
  /**
32
38
  * Resolve an element by its SOURCE location — the precise, granular auto-anchor. The babel plugin
@@ -74,9 +80,8 @@ function findByComponent(container, query) {
74
80
  }
75
81
  return [];
76
82
  }
77
- /** Run the appropriate Testing-Library query for the given ElementQuery. */
78
- function findCandidates(query) {
79
- const container = resolveContainer(query.scope);
83
+ /** Run the appropriate Testing-Library query against ONE root (light DOM or a shadow root). */
84
+ function findIn(container, query) {
80
85
  const by = query.by;
81
86
  const value = query.value;
82
87
  // Explicit `by`+`value` form.
@@ -95,7 +100,7 @@ function findCandidates(query) {
95
100
  case QueryBy.ALT:
96
101
  return queryAllByAltText(container, value, { exact: false });
97
102
  case QueryBy.COMPONENT:
98
- // value is the component name; .source (if present) still takes precedence inside.
103
+ // value is the component name;.source (if present) still takes precedence inside.
99
104
  return findByComponent(container, { ...query, component: query.component ?? value });
100
105
  default:
101
106
  return [];
@@ -127,25 +132,163 @@ function findCandidates(query) {
127
132
  return queryAllByAltText(container, query.alt, { exact: false });
128
133
  return [];
129
134
  }
130
- function inState(el, state) {
131
- return getStates(el).includes(state);
135
+ /**
136
+ * Every open shadow root at or beneath `root`, in document order.
137
+ *
138
+ * A closed root is deliberately unreachable — `element.shadowRoot` is null by design, and the SDK
139
+ * reports that as a blind spot rather than pretending to see through it.
140
+ */
141
+ function openShadowRootsUnder(root) {
142
+ const found = [];
143
+ const walk = (node) => {
144
+ for (const el of node.querySelectorAll('*')) {
145
+ const shadow = el.shadowRoot;
146
+ if (shadow !== null) {
147
+ found.push(shadow);
148
+ walk(shadow); // nested web components
149
+ }
150
+ }
151
+ };
152
+ walk(root);
153
+ return found;
154
+ }
155
+ /**
156
+ * NOTE ON COST. The walk above is a `querySelectorAll('*')` over the container, and `reticle_query` is
157
+ * a hot-path tool, so every query on every app pays it — including the overwhelming majority that hold
158
+ * no web components.
159
+ *
160
+ * A cache invalidated by a MutationObserver was written and then REMOVED, because it is not sound:
161
+ * `attachShadow` on an element that is already in the document mutates only the shadow tree, which an
162
+ * observer watching documentElement's subtree never sees. The cached "no shadow roots here" would
163
+ * persist and the content would be silently missed — a false negative indistinguishable from a genuinely
164
+ * absent element, which is the exact bug the piercing was added to fix.
165
+ *
166
+ * Correctness wins until there is a measurement saying the walk actually matters. The allocation is
167
+ * avoided (iterate the live NodeList rather than copying it); the traversal itself stays.
168
+ */
169
+ /**
170
+ * Run the query against the light DOM AND every open shadow root beneath the scope.
171
+ *
172
+ * Testing Library only walks the light DOM, so a control inside a web component returned zero matches
173
+ * on a completely healthy page — a miss indistinguishable from a genuinely absent element. The
174
+ * snapshot has always pierced open roots; this makes `query` agree with it.
175
+ */
176
+ function findCandidates(query) {
177
+ const { container, scopeMissing } = resolveContainer(query.scope);
178
+ // A given-but-missing scope searches NOTHING — never the whole page. The empty result plus the
179
+ // scopeMissing flag is what keeps "gone scope" distinct from "absent element".
180
+ if (container === null)
181
+ return { candidates: [], scopeMissing: true };
182
+ const seen = new Set();
183
+ const out = [];
184
+ const collect = (els) => {
185
+ for (const el of els) {
186
+ if (seen.has(el))
187
+ continue; // reachable from both host and root — count once
188
+ seen.add(el);
189
+ out.push(el);
190
+ }
191
+ };
192
+ collect(findIn(container, query));
193
+ for (const shadow of openShadowRootsUnder(container)) {
194
+ // A ShadowRoot is a DocumentFragment; the Testing-Library queries accept any HTMLElement-like
195
+ // container, and every call site below only reads from it.
196
+ collect(findIn(shadow, query));
197
+ }
198
+ return { candidates: out, scopeMissing };
199
+ }
200
+ /** Longest attribute value returned; one enormous href must not blow the response budget. */
201
+ export const ATTR_VALUE_MAX = 512;
202
+ /** Most attributes projected per element — a guard against a caller asking for everything. */
203
+ const ATTR_KEYS_MAX = 12;
204
+ /**
205
+ * Read the requested attributes off an element.
206
+ *
207
+ * Absent attributes are OMITTED rather than returned empty, so "not present" and "present but blank"
208
+ * stay distinguishable. Credential-bearing names are redacted with the same rule the network and
209
+ * storage paths use — a projection API must not become an exfiltration path.
210
+ */
211
+ function projectAttrs(el, keys) {
212
+ const out = {};
213
+ for (const key of keys.slice(0, ATTR_KEYS_MAX)) {
214
+ const raw = el.getAttribute(key);
215
+ if (raw === null)
216
+ continue;
217
+ out[key] = isSensitiveKey(key) ? REDACTED_VALUE : raw.slice(0, ATTR_VALUE_MAX);
218
+ }
219
+ return Object.keys(out).length > 0 ? out : undefined;
132
220
  }
133
- /** Match an element predicate against the live DOM. */
134
- export function matchQuery(query, state) {
221
+ function inState(el, state, memo) {
222
+ return getStates(el, isVisible(el, memo)).includes(state);
223
+ }
224
+ /**
225
+ * How many matches are DESCRIBED, however many are found.
226
+ *
227
+ * describe() is the expensive part of a query: it resolves the accessible name and forces a style
228
+ * computation for every ancestor to decide visibility. Describing every match on a page with
229
+ * thousands of them freezes the main thread for seconds — and then the wire discards all but the
230
+ * first `MAX_COLLECTION_ITEMS` anyway, so the work past that point was never observable by anyone.
231
+ * Matching one to the other means the cost of a broad query is bounded by the transport rather than
232
+ * by the size of the page.
233
+ */
234
+ const MAX_DESCRIBED = TRANSPORT_LIMITS.MAX_COLLECTION_ITEMS;
235
+ /**
236
+ * Match an element predicate against the live DOM.
237
+ *
238
+ * `count` is every match; `elements` is the described prefix. Keeping those separate is what lets
239
+ * "how many?" stay exact while the answer stays affordable.
240
+ */
241
+ export function matchQuery(query, state, limit = MAX_DESCRIBED) {
135
242
  let elements;
243
+ let scopeMissing = false;
136
244
  try {
137
- elements = findCandidates(query);
245
+ const found = findCandidates(query);
246
+ elements = found.candidates;
247
+ scopeMissing = found.scopeMissing;
138
248
  }
139
249
  catch {
140
250
  elements = [];
141
251
  }
142
- const filtered = state === undefined ? elements : elements.filter((el) => inState(el, state));
143
- const descriptors = filtered.map((el) => describe(el));
144
- return { matched: descriptors.length > 0, count: descriptors.length, elements: descriptors };
252
+ // One visibility cache for the whole (synchronous) query pass. isVisible is an O(depth) forced-style
253
+ // walk; the state filter runs it over EVERY candidate (the count must be exact) — on a match-heavy
254
+ // page (e.g. a 3k-row grid) that is tens of thousands of getComputedStyle calls on the host's main
255
+ // thread. The memo makes each element's ancestors resolve once, then short-circuit for every sibling.
256
+ const visMemo = new Map();
257
+ const filtered = state === undefined ? elements : elements.filter((el) => inState(el, state, visMemo));
258
+ const attrs = query.attrs;
259
+ const described = filtered.slice(0, Math.max(0, Math.min(limit, MAX_DESCRIBED)));
260
+ const descriptors = described.map((el) => {
261
+ const base = describe(el, visMemo);
262
+ if (attrs === undefined || attrs.length === 0)
263
+ return base;
264
+ const projected = projectAttrs(el, attrs);
265
+ return projected === undefined ? base : { ...base, attrs: projected };
266
+ });
267
+ return {
268
+ matched: filtered.length > 0,
269
+ count: filtered.length,
270
+ elements: descriptors,
271
+ ...(scopeMissing ? { scopeMissing: true } : {}),
272
+ };
273
+ }
274
+ /** Resolve `aria-labelledby` (one or more element IDs) to the referenced elements' text — a bare ID is
275
+ * not a human-readable name. Undefined when unset or nothing resolves. */
276
+ function resolveLabelledBy(el) {
277
+ const ids = el.getAttribute('aria-labelledby');
278
+ if (ids === null)
279
+ return undefined;
280
+ const text = ids
281
+ .split(/\s+/)
282
+ .map((id) => id.length > 0 ? (el.ownerDocument.getElementById(id)?.textContent?.trim() ?? '') : '')
283
+ .filter((t) => t.length > 0)
284
+ .join(' ');
285
+ return text.length > 0 ? text : undefined;
145
286
  }
146
287
  /** Structural clusters of the page — the successor to the raw testid list in zero-match hints. */
147
288
  function buildPresentRegions(query) {
148
- const container = resolveContainer(query.scope);
289
+ // For the diagnostic hint we WANT the page's orientation even when the scope is gone, so fall back
290
+ // to the body here (the match path above already reported scopeMissing, so this can't mask it).
291
+ const container = resolveContainer(query.scope).container ?? document.body;
149
292
  const regions = [];
150
293
  const CONTAINER_ROLES = [
151
294
  'list',
@@ -175,7 +318,7 @@ function buildPresentRegions(query) {
175
318
  }
176
319
  for (const el of containers) {
177
320
  const name = el.getAttribute('aria-label') ??
178
- el.getAttribute('aria-labelledby') ??
321
+ resolveLabelledBy(el) ?? // aria-labelledby is an element ID — resolve it to the referenced TEXT
179
322
  el.getAttribute('data-testid') ??
180
323
  undefined;
181
324
  const children = el.querySelectorAll('[role]');
@@ -204,7 +347,7 @@ function buildPresentRegions(query) {
204
347
  }
205
348
  /** Diagnostic hint for a zero-match query: what testids ARE present in the searched scope. */
206
349
  function buildEmptyHint(query) {
207
- const container = resolveContainer(query.scope);
350
+ const container = resolveContainer(query.scope).container ?? document.body;
208
351
  const all = container.querySelectorAll(`[${TESTID_ATTR}]`);
209
352
  const present = [];
210
353
  for (const el of Array.from(all)) {
@@ -225,12 +368,24 @@ function buildEmptyHint(query) {
225
368
  knownEmptyState,
226
369
  };
227
370
  }
228
- /** Resolve a query to descriptors for the `query` MCP tool. */
229
- export function runQuery(query) {
230
- const result = matchQuery(query);
371
+ /**
372
+ * Resolve a query to descriptors for the `query` MCP tool.
373
+ *
374
+ * `count` is carried through deliberately: the server reports match totals from it rather than from
375
+ * the array, because the array is capped in transit. Dropping it here — which this function used to
376
+ * do — silently put the server back to counting survivors and calling that the answer.
377
+ */
378
+ export function runQuery(query, limit) {
379
+ const result = matchQuery(query, undefined, limit);
380
+ const scopeFields = result.scopeMissing === true ? { scopeMissing: true } : {};
231
381
  if (result.elements.length === 0) {
232
- return { elements: result.elements, hint: buildEmptyHint(query) };
382
+ return {
383
+ elements: result.elements,
384
+ count: result.count,
385
+ hint: buildEmptyHint(query),
386
+ ...scopeFields,
387
+ };
233
388
  }
234
- return { elements: result.elements };
389
+ return { elements: result.elements, count: result.count, ...scopeFields };
235
390
  }
236
391
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/dom/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/dom/query.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,36 @@
1
+ import { type Ref } from '@reticlehq/core';
1
2
  /**
2
3
  * Stable, human-meaningful element handles. Each element gets a ref like `e7`; the same
3
4
  * element keeps its ref across snapshots, and a ref re-resolves to its element as long as
4
5
  * the element is still in the document.
5
6
  */
7
+ /**
8
+ * How many ref -> element entries are retained.
9
+ *
10
+ * The forward map is weak, so elements are always collectable; this bounds the BOOKKEEPING, which was
11
+ * not. Refs are minted far more often than an agent asks about them — every meaningful DOM addition,
12
+ * every transitionend, every scroll reveal — and the only eviction used to be "the agent happened to
13
+ * resolve this exact dead ref". A busy app over a long session therefore accumulated entries for
14
+ * elements that had been garbage for hours.
15
+ *
16
+ * Sized generously because eviction is not free of consequence (see refFor): the useful lifetime of a
17
+ * ref is one agent turn, and this is far more than any one turn produces.
18
+ */
19
+ export declare const MAX_TRACKED_REFS = 10000;
6
20
  export declare class RefRegistry {
7
21
  #private;
22
+ /** How many reverse entries are currently retained. Exposed so the bound can be asserted. */
23
+ get size(): number;
8
24
  /** Get the existing ref for an element, or mint a new one. */
9
- refFor(el: Element): string;
10
- /** Resolve a ref back to its element, or null if it's gone/detached. */
25
+ refFor(el: Element): Ref;
26
+ /**
27
+ * Resolve a ref back to its element, or null if it's gone/detached.
28
+ *
29
+ * Takes a plain `string` ON PURPOSE: this is the untrusted-input path — the ref comes from the agent
30
+ * over the wire, and a miss is answered with null rather than an error. Requiring a branded Ref here
31
+ * would force a meaningless cast at every wire boundary and buy nothing; the brand's value is on the
32
+ * MINT (refFor) so our own code cannot pass, say, a sessionId where a handle is expected.
33
+ */
11
34
  resolve(ref: string): Element | null;
12
35
  }
13
36
  /** Process-wide registry shared by snapshot, query, and the action executor. */
@@ -1 +1 @@
1
- {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/dom/refs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,WAAW;;IAKtB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAU3B,wEAAwE;IACxE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;CAUrC;AAED,gFAAgF;AAChF,eAAO,MAAM,IAAI,aAAoB,CAAC"}
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/dom/refs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAClD;;;;GAIG;AACH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAWtC,qBAAa,WAAW;;IAMtB,6FAA6F;IAC7F,IAAI,IAAI,IAAI,MAAM,CAEjB;IAmBD,8DAA8D;IAC9D,MAAM,CAAC,EAAE,EAAE,OAAO,GAAG,GAAG;IA4BxB;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;CAerC;AAED,gFAAgF;AAChF,eAAO,MAAM,IAAI,aAAoB,CAAC"}
package/dist/dom/refs.js CHANGED
@@ -1,24 +1,94 @@
1
+ import { asRef } from '@reticlehq/core';
1
2
  /**
2
3
  * Stable, human-meaningful element handles. Each element gets a ref like `e7`; the same
3
4
  * element keeps its ref across snapshots, and a ref re-resolves to its element as long as
4
5
  * the element is still in the document.
5
6
  */
7
+ /**
8
+ * How many ref -> element entries are retained.
9
+ *
10
+ * The forward map is weak, so elements are always collectable; this bounds the BOOKKEEPING, which was
11
+ * not. Refs are minted far more often than an agent asks about them — every meaningful DOM addition,
12
+ * every transitionend, every scroll reveal — and the only eviction used to be "the agent happened to
13
+ * resolve this exact dead ref". A busy app over a long session therefore accumulated entries for
14
+ * elements that had been garbage for hours.
15
+ *
16
+ * Sized generously because eviction is not free of consequence (see refFor): the useful lifetime of a
17
+ * ref is one agent turn, and this is far more than any one turn produces.
18
+ */
19
+ export const MAX_TRACKED_REFS = 10000;
20
+ /**
21
+ * Full-sweep cadence. The deref-sweep is O(retained), and a page legitimately holding ≥ MAX_TRACKED_REFS
22
+ * live elements (a 10k-node dashboard) can never get under the cap that way, so running it on EVERY mint
23
+ * over the cap turned each mint into a 10k-entry scan — measured 264µs vs 0.20µs (1,300x) on the app's
24
+ * main thread, ~2.6% of it forever on a churning page. The cap is instead held by an O(1) oldest-drop per
25
+ * over-cap mint, and the expensive dead-entry sweep runs once per this many mints (amortized O(1)).
26
+ */
27
+ const SWEEP_EVERY_MINTS = 1000;
6
28
  export class RefRegistry {
7
29
  #toRef = new WeakMap();
8
30
  #fromRef = new Map();
9
31
  #seq = 0;
32
+ #mintsSinceSweep = 0;
33
+ /** How many reverse entries are currently retained. Exposed so the bound can be asserted. */
34
+ get size() {
35
+ return this.#fromRef.size;
36
+ }
37
+ /** O(1): drop the least-recently-minted reverse entry. Map iterates in insertion order, so the front
38
+ * is the oldest. A still-live element whose entry is dropped re-registers on its next refFor. */
39
+ #evictOldest() {
40
+ const oldest = this.#fromRef.keys().next();
41
+ if (oldest.done !== true)
42
+ this.#fromRef.delete(oldest.value);
43
+ }
44
+ /** Full pass: drop every entry whose element has been collected or detached (frees genuinely dead
45
+ * bookkeeping), then any remaining excess by age. Amortized — called once per SWEEP_EVERY_MINTS. */
46
+ #sweep() {
47
+ for (const [ref, weak] of this.#fromRef) {
48
+ const el = weak.deref();
49
+ if (el === undefined || !el.isConnected)
50
+ this.#fromRef.delete(ref);
51
+ }
52
+ while (this.#fromRef.size > MAX_TRACKED_REFS)
53
+ this.#evictOldest();
54
+ }
10
55
  /** Get the existing ref for an element, or mint a new one. */
11
56
  refFor(el) {
12
57
  const existing = this.#toRef.get(el);
13
- if (existing !== undefined)
58
+ if (existing !== undefined) {
59
+ // Re-register if this element's entry was evicted while it was off the agent's radar. Without
60
+ // this, an element that is still on the page could hold a ref that no longer resolves — the
61
+ // eviction would surface as "element not found", which is a wrong answer rather than a slow one.
62
+ // Either way, TOUCH it to the recent end (LRU): an element being surfaced right now must not be
63
+ // the oldest-drop victim of a mint storm before the agent gets to act on it.
64
+ const weak = this.#fromRef.get(existing);
65
+ this.#fromRef.delete(existing);
66
+ this.#fromRef.set(existing, weak ?? new WeakRef(el));
14
67
  return existing;
68
+ }
15
69
  this.#seq += 1;
16
- const ref = `e${String(this.#seq)}`;
70
+ const ref = asRef(`e${String(this.#seq)}`);
17
71
  this.#toRef.set(el, ref);
18
72
  this.#fromRef.set(ref, new WeakRef(el));
73
+ // Keep bounded cheaply on every mint; run the full dead-entry sweep only periodically.
74
+ this.#mintsSinceSweep += 1;
75
+ if (this.#mintsSinceSweep >= SWEEP_EVERY_MINTS) {
76
+ this.#mintsSinceSweep = 0;
77
+ this.#sweep();
78
+ }
79
+ else if (this.#fromRef.size > MAX_TRACKED_REFS) {
80
+ this.#evictOldest();
81
+ }
19
82
  return ref;
20
83
  }
21
- /** Resolve a ref back to its element, or null if it's gone/detached. */
84
+ /**
85
+ * Resolve a ref back to its element, or null if it's gone/detached.
86
+ *
87
+ * Takes a plain `string` ON PURPOSE: this is the untrusted-input path — the ref comes from the agent
88
+ * over the wire, and a miss is answered with null rather than an error. Requiring a branded Ref here
89
+ * would force a meaningless cast at every wire boundary and buy nothing; the brand's value is on the
90
+ * MINT (refFor) so our own code cannot pass, say, a sessionId where a handle is expected.
91
+ */
22
92
  resolve(ref) {
23
93
  const weak = this.#fromRef.get(ref);
24
94
  if (weak === undefined)
@@ -28,6 +98,11 @@ export class RefRegistry {
28
98
  this.#fromRef.delete(ref);
29
99
  return null;
30
100
  }
101
+ // LRU touch: a ref the agent just resolved is in ACTIVE use — move it to the most-recent end so an
102
+ // oldest-drop eviction between this resolve and the follow-up act can't reclaim it and turn a live
103
+ // element into a false "ref no longer resolves". O(1) — Map preserves insertion order.
104
+ this.#fromRef.delete(ref);
105
+ this.#fromRef.set(ref, weak);
31
106
  return el;
32
107
  }
33
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/dom/refs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,WAAW;IACb,MAAM,GAAG,IAAI,OAAO,EAAmB,CAAC;IACxC,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IACxD,IAAI,GAAG,CAAC,CAAC;IAET,8DAA8D;IAC9D,MAAM,CAAC,EAAW;QAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAC5C,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,GAAW;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,EAAE,KAAK,SAAS,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/dom/refs.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,12 @@ export interface SnapshotResult {
9
9
  status: SnapshotStatus;
10
10
  nodes: number;
11
11
  truncated: boolean;
12
+ /**
13
+ * True when a `scope` was given but resolved to nothing. The snapshot then covers NOTHING rather
14
+ * than silently falling back to the whole page — an agent snapshotting "the modal" after it closed
15
+ * must not receive the entire page as if it were the modal.
16
+ */
17
+ scopeMissing?: boolean;
12
18
  }
13
19
  interface SnapshotOptions {
14
20
  scope?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/dom/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAyC7D,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAmJD,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,cAAc,CA4B3E"}
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/dom/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAyC7D,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAmJD,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,cAAc,CAiC3E"}
@@ -169,8 +169,13 @@ export function buildSnapshot(options = {}) {
169
169
  const scopeEl = options.scope !== undefined
170
170
  ? (refs.resolve(options.scope) ?? document.querySelector(options.scope))
171
171
  : document.body;
172
- const root = scopeEl ?? document.body;
172
+ // A given-but-missing scope snapshots NOTHING and says so — never a silent whole-page fallback.
173
+ const scopeMissing = options.scope !== undefined && !(scopeEl instanceof Element);
174
+ const root = scopeEl instanceof Element ? scopeEl : document.body;
173
175
  const status = buildStatus(root);
176
+ if (scopeMissing) {
177
+ return { tree: '', status, nodes: 0, truncated: false, scopeMissing: true };
178
+ }
174
179
  if (mode === SnapshotMode.STATUS) {
175
180
  return { tree: '', status, nodes: 0, truncated: false };
176
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/dom/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,QAAQ;IACR,MAAM;IACN,SAAS;IACT,UAAU;IACV,OAAO;IACP,UAAU;IACV,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,KAAK;IACL,UAAU;IACV,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/F,gFAAgF;AAChF,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB;;;;;GAKG;AACH,SAAS,UAAU,CAAC,EAAW;IAC7B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,oBAAoB;YAAE,GAAG,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,OAAO,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACtF,CAAC;AAsBD,uFAAuF;AACvF,SAAS,SAAS,CAAC,EAAW;IAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,SAAS,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,uCAAuC;IACvE,IAAI,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,EAAE,YAAY,WAAW,IAAI,EAAE,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,EAAW;IAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,KAAK,YAAY,CAAC,QAAQ;QAC3B,CAAC,KAAK,YAAY,CAAC,OAAO;QAC1B,CAAC,KAAK,YAAY,CAAC,QAAQ;QAC3B,CAAC,KAAK,YAAY,CAAC,OAAO,CAC7B,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CACjB,EAAW,EACX,KAAa,EACb,IAAY,EACZ,IAAY,EACZ,MAAc;IAEd,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9F,CAAC;AAED,+FAA+F;AAC/F,SAAS,cAAc,CAAC,KAAa,EAAE,IAAY;IACjD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAiC;IACxD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,8FAA8F;IAC9F,2FAA2F;IAC3F,4EAA4E;IAC5E,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB,CAAC;QACvC,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAWD;;;;;GAKG;AACH,SAAS,cAAc,CAAC,MAAe;IACrC,MAAM,GAAG,GAAc,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;IACjC,IAAI,MAAM,KAAK,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,MAAM,YAAY,iBAAiB,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC;YAC1C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,IAAI,CAAC,MAAe,EAAE,KAAa,EAAE,GAAY;IACxD,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ;QAAE,OAAO;IACjC,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,SAAS;QAC/B,gGAAgG;QAChG,0FAA0F;QAC1F,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM;YAAE,SAAS;QACzD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,6FAA6F;QAC7F,8FAA8F;QAC9F,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,WAAW,CAAC;QACnD,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,oFAAoF;QACpF,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,UAAU,GACd,WAAW,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;QAChD,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,IAAI,CACZ,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBACzD,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC;gBAC7B,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CACjD,CAAC;YACF,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,oDAAoD,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,IAAgB;IACnC,OAAO;QACL,KAAK,EAAE,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE;QAC/D,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,cAAc,EAAE,cAAc,CAAC,IAAI,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,UAA2B,EAAE;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC;IAC/C,MAAM,OAAO,GACX,OAAO,CAAC,KAAK,KAAK,SAAS;QACzB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpB,MAAM,IAAI,GAAG,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEjC,IAAI,IAAI,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,GAAG,GAAY;QACnB,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,KAAK;QAChB,IAAI;QACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,GAAG;QACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;KACjC,CAAC;IACF,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACnB,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,MAAM;QACN,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/dom/snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Where an element is defined in the codebase.
3
+ *
4
+ * This is the single most valuable thing Reticle can hand an agent that has to fix what Reticle just
5
+ * found. Locating the right FILE is what turns a report into an edit; without it the agent pays for a
6
+ * search loop that the instrumentation already knows the answer to.
7
+ *
8
+ * Two lookups, because the callers have very different cost budgets:
9
+ *
10
+ * sourceFromDom — reads the babel-stamped `data-reticle-source` off the nearest ancestor. One
11
+ * native upward walk, bounded by tree depth. Safe to call per element on paths
12
+ * that describe many elements at once (query results, snapshots).
13
+ * sourceFor — prefers a framework adapter's answer (which knows the component that RENDERED
14
+ * the element, not just the nearest stamped host) and falls back to the DOM. The
15
+ * adapter path walks the fiber tree, so this belongs on single-element paths
16
+ * (inspect, act, review) and not in a loop.
17
+ *
18
+ * Both report source independently of how the element is ANCHORED. Anchor answers "how do I find this
19
+ * again", source answers "where is it written" — collapsing the two once meant that adding a
20
+ * data-testid, which Reticle's own docs recommend, silently removed the source pointer.
21
+ */
22
+ export interface SourceLocation {
23
+ file: string;
24
+ line: number;
25
+ }
26
+ /** Parse a `data-reticle-source="file:line:column"` value into `{ file, line }` (column dropped). */
27
+ export declare function parseSourceAttr(value: string | null): SourceLocation | undefined;
28
+ /** The nearest babel-stamped source at or above this element. Cheap enough to call in bulk. */
29
+ export declare function sourceFromDom(el: Element): SourceLocation | undefined;
30
+ /** Best source for the element: the framework adapter's, else the nearest babel-stamped attribute. */
31
+ export declare function sourceFor(el: Element, adapterSource: SourceLocation | undefined): SourceLocation | undefined;
32
+ /**
33
+ * `file:line` — the form an agent can act on directly.
34
+ *
35
+ * Deliberately a single compact string rather than an object: it costs a couple of dozen bytes on a
36
+ * descriptor that may repeat hundreds of times in one response, and every consumer of it is either
37
+ * opening an editor or printing it.
38
+ */
39
+ export declare function formatSource(source: SourceLocation | undefined): string | undefined;
40
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/dom/source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,GAAG,SAAS,CAQhF;AAED,+FAA+F;AAC/F,wBAAgB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAGrE;AAED,sGAAsG;AACtG,wBAAgB,SAAS,CACvB,EAAE,EAAE,OAAO,EACX,aAAa,EAAE,cAAc,GAAG,SAAS,GACxC,cAAc,GAAG,SAAS,CAG5B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEnF"}