@reticlehq/browser 2.0.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.
- package/LICENSE +202 -0
- package/README.md +17 -0
- package/dist/actions/actions-dom.d.ts +29 -0
- package/dist/actions/actions-dom.d.ts.map +1 -0
- package/dist/actions/actions-dom.js +153 -0
- package/dist/actions/actions-dom.js.map +1 -0
- package/dist/actions/actions.d.ts +92 -0
- package/dist/actions/actions.d.ts.map +1 -0
- package/dist/actions/actions.js +348 -0
- package/dist/actions/actions.js.map +1 -0
- package/dist/actions/scroll.d.ts +19 -0
- package/dist/actions/scroll.d.ts.map +1 -0
- package/dist/actions/scroll.js +44 -0
- package/dist/actions/scroll.js.map +1 -0
- package/dist/commands/commands.d.ts +5 -0
- package/dist/commands/commands.d.ts.map +1 -0
- package/dist/commands/commands.js +246 -0
- package/dist/commands/commands.js.map +1 -0
- package/dist/dom/a11y.d.ts +20 -0
- package/dist/dom/a11y.d.ts.map +1 -0
- package/dist/dom/a11y.js +263 -0
- package/dist/dom/a11y.js.map +1 -0
- package/dist/dom/auto-anchor.d.ts +66 -0
- package/dist/dom/auto-anchor.d.ts.map +1 -0
- package/dist/dom/auto-anchor.js +75 -0
- package/dist/dom/auto-anchor.js.map +1 -0
- package/dist/dom/dom-ignore.d.ts +7 -0
- package/dist/dom/dom-ignore.d.ts.map +1 -0
- package/dist/dom/dom-ignore.js +21 -0
- package/dist/dom/dom-ignore.js.map +1 -0
- package/dist/dom/query.d.ts +6 -0
- package/dist/dom/query.d.ts.map +1 -0
- package/dist/dom/query.js +236 -0
- package/dist/dom/query.js.map +1 -0
- package/dist/dom/refs.d.ts +15 -0
- package/dist/dom/refs.d.ts.map +1 -0
- package/dist/dom/refs.js +36 -0
- package/dist/dom/refs.js.map +1 -0
- package/dist/dom/snapshot.d.ts +22 -0
- package/dist/dom/snapshot.d.ts.map +1 -0
- package/dist/dom/snapshot.js +171 -0
- package/dist/dom/snapshot.js.map +1 -0
- package/dist/dom/theme.d.ts +26 -0
- package/dist/dom/theme.d.ts.map +1 -0
- package/dist/dom/theme.js +90 -0
- package/dist/dom/theme.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/observers/animation.d.ts +4 -0
- package/dist/observers/animation.d.ts.map +1 -0
- package/dist/observers/animation.js +35 -0
- package/dist/observers/animation.js.map +1 -0
- package/dist/observers/console.d.ts +4 -0
- package/dist/observers/console.d.ts.map +1 -0
- package/dist/observers/console.js +58 -0
- package/dist/observers/console.js.map +1 -0
- package/dist/observers/dom.d.ts +4 -0
- package/dist/observers/dom.d.ts.map +1 -0
- package/dist/observers/dom.js +96 -0
- package/dist/observers/dom.js.map +1 -0
- package/dist/observers/health.d.ts +8 -0
- package/dist/observers/health.d.ts.map +1 -0
- package/dist/observers/health.js +33 -0
- package/dist/observers/health.js.map +1 -0
- package/dist/observers/network.d.ts +11 -0
- package/dist/observers/network.d.ts.map +1 -0
- package/dist/observers/network.js +128 -0
- package/dist/observers/network.js.map +1 -0
- package/dist/observers/route.d.ts +4 -0
- package/dist/observers/route.d.ts.map +1 -0
- package/dist/observers/route.js +56 -0
- package/dist/observers/route.js.map +1 -0
- package/dist/observers/scroll.d.ts +4 -0
- package/dist/observers/scroll.d.ts.map +1 -0
- package/dist/observers/scroll.js +42 -0
- package/dist/observers/scroll.js.map +1 -0
- package/dist/observers/types.d.ts +6 -0
- package/dist/observers/types.d.ts.map +1 -0
- package/dist/observers/types.js +2 -0
- package/dist/observers/types.js.map +1 -0
- package/dist/presenter/overlay.d.ts +12 -0
- package/dist/presenter/overlay.d.ts.map +1 -0
- package/dist/presenter/overlay.js +31 -0
- package/dist/presenter/overlay.js.map +1 -0
- package/dist/presenter/presenter-config.d.ts +86 -0
- package/dist/presenter/presenter-config.d.ts.map +1 -0
- package/dist/presenter/presenter-config.js +51 -0
- package/dist/presenter/presenter-config.js.map +1 -0
- package/dist/presenter/presenter-controls.d.ts +74 -0
- package/dist/presenter/presenter-controls.d.ts.map +1 -0
- package/dist/presenter/presenter-controls.js +360 -0
- package/dist/presenter/presenter-controls.js.map +1 -0
- package/dist/presenter/presenter-effects.d.ts +14 -0
- package/dist/presenter/presenter-effects.d.ts.map +1 -0
- package/dist/presenter/presenter-effects.js +40 -0
- package/dist/presenter/presenter-effects.js.map +1 -0
- package/dist/presenter/presenter-glow.d.ts +43 -0
- package/dist/presenter/presenter-glow.d.ts.map +1 -0
- package/dist/presenter/presenter-glow.js +126 -0
- package/dist/presenter/presenter-glow.js.map +1 -0
- package/dist/presenter/presenter-log.d.ts +43 -0
- package/dist/presenter/presenter-log.d.ts.map +1 -0
- package/dist/presenter/presenter-log.js +118 -0
- package/dist/presenter/presenter-log.js.map +1 -0
- package/dist/presenter/presenter-run-state.d.ts +48 -0
- package/dist/presenter/presenter-run-state.d.ts.map +1 -0
- package/dist/presenter/presenter-run-state.js +37 -0
- package/dist/presenter/presenter-run-state.js.map +1 -0
- package/dist/presenter/presenter-styles.d.ts +7 -0
- package/dist/presenter/presenter-styles.d.ts.map +1 -0
- package/dist/presenter/presenter-styles.js +118 -0
- package/dist/presenter/presenter-styles.js.map +1 -0
- package/dist/presenter/presenter-tally.d.ts +20 -0
- package/dist/presenter/presenter-tally.d.ts.map +1 -0
- package/dist/presenter/presenter-tally.js +38 -0
- package/dist/presenter/presenter-tally.js.map +1 -0
- package/dist/presenter/presenter-verbs.d.ts +2 -0
- package/dist/presenter/presenter-verbs.d.ts.map +1 -0
- package/dist/presenter/presenter-verbs.js +29 -0
- package/dist/presenter/presenter-verbs.js.map +1 -0
- package/dist/presenter/presenter.d.ts +89 -0
- package/dist/presenter/presenter.d.ts.map +1 -0
- package/dist/presenter/presenter.js +428 -0
- package/dist/presenter/presenter.js.map +1 -0
- package/dist/recorder/recorder-styles.d.ts +12 -0
- package/dist/recorder/recorder-styles.d.ts.map +1 -0
- package/dist/recorder/recorder-styles.js +45 -0
- package/dist/recorder/recorder-styles.js.map +1 -0
- package/dist/recorder/recorder.d.ts +60 -0
- package/dist/recorder/recorder.d.ts.map +1 -0
- package/dist/recorder/recorder.js +436 -0
- package/dist/recorder/recorder.js.map +1 -0
- package/dist/registry/adapters.d.ts +31 -0
- package/dist/registry/adapters.d.ts.map +1 -0
- package/dist/registry/adapters.js +47 -0
- package/dist/registry/adapters.js.map +1 -0
- package/dist/registry/capabilities.d.ts +25 -0
- package/dist/registry/capabilities.d.ts.map +1 -0
- package/dist/registry/capabilities.js +48 -0
- package/dist/registry/capabilities.js.map +1 -0
- package/dist/registry/commit-and-signal.d.ts +9 -0
- package/dist/registry/commit-and-signal.d.ts.map +1 -0
- package/dist/registry/commit-and-signal.js +12 -0
- package/dist/registry/commit-and-signal.js.map +1 -0
- package/dist/registry/domains.d.ts +15 -0
- package/dist/registry/domains.d.ts.map +1 -0
- package/dist/registry/domains.js +19 -0
- package/dist/registry/domains.js.map +1 -0
- package/dist/registry/emitter.d.ts +28 -0
- package/dist/registry/emitter.d.ts.map +1 -0
- package/dist/registry/emitter.js +27 -0
- package/dist/registry/emitter.js.map +1 -0
- package/dist/registry/stores.d.ts +9 -0
- package/dist/registry/stores.d.ts.map +1 -0
- package/dist/registry/stores.js +30 -0
- package/dist/registry/stores.js.map +1 -0
- package/dist/reticle-presenter-helpers.d.ts +19 -0
- package/dist/reticle-presenter-helpers.d.ts.map +1 -0
- package/dist/reticle-presenter-helpers.js +81 -0
- package/dist/reticle-presenter-helpers.js.map +1 -0
- package/dist/reticle.d.ts +113 -0
- package/dist/reticle.d.ts.map +1 -0
- package/dist/reticle.js +379 -0
- package/dist/reticle.js.map +1 -0
- package/dist/review/annotator.d.ts +36 -0
- package/dist/review/annotator.d.ts.map +1 -0
- package/dist/review/annotator.js +321 -0
- package/dist/review/annotator.js.map +1 -0
- package/dist/review/mark-anchor.d.ts +23 -0
- package/dist/review/mark-anchor.d.ts.map +1 -0
- package/dist/review/mark-anchor.js +74 -0
- package/dist/review/mark-anchor.js.map +1 -0
- package/dist/security/serialization.d.ts +6 -0
- package/dist/security/serialization.d.ts.map +1 -0
- package/dist/security/serialization.js +103 -0
- package/dist/security/serialization.js.map +1 -0
- package/dist/timers/clock.d.ts +6 -0
- package/dist/timers/clock.d.ts.map +1 -0
- package/dist/timers/clock.js +80 -0
- package/dist/timers/clock.js.map +1 -0
- package/dist/timers/native-timers.d.ts +37 -0
- package/dist/timers/native-timers.d.ts.map +1 -0
- package/dist/timers/native-timers.js +79 -0
- package/dist/timers/native-timers.js.map +1 -0
- package/dist/transport/transport.d.ts +54 -0
- package/dist/transport/transport.d.ts.map +1 -0
- package/dist/transport/transport.js +182 -0
- package/dist/transport/transport.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/dom/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design-token (theme) awareness — the in-source answer to "is this color on-theme?". A DOM/a11y
|
|
3
|
+
* tool sees a color rendered; it does not know the app's INTENDED palette. Reticle reads the design
|
|
4
|
+
* tokens the app declares as `:root` CSS custom properties and reports, per element, whether its
|
|
5
|
+
* color/background maps to a token or is an off-palette hardcoded value. That is a theme-compliance
|
|
6
|
+
* signal no outside-the-page tool has without re-deriving the palette itself.
|
|
7
|
+
*
|
|
8
|
+
* Conservative by design: only a SET, opaque color with no matching token is flagged off-theme, and
|
|
9
|
+
* the matched token name is returned when there is one — so the agent can judge, not just trust a flag.
|
|
10
|
+
*/
|
|
11
|
+
interface ThemeReport {
|
|
12
|
+
/** Matched design-token name for the text color, or null when the color is off-palette. */
|
|
13
|
+
colorToken: string | null;
|
|
14
|
+
/** Matched design-token name for the background color, or null. */
|
|
15
|
+
backgroundToken: string | null;
|
|
16
|
+
/** True when a set, opaque color uses no design token — a theme violation worth surfacing. */
|
|
17
|
+
offTheme: boolean;
|
|
18
|
+
/** How many color tokens the app declared (0 ⇒ no palette found, so offTheme is never asserted). */
|
|
19
|
+
tokenCount: number;
|
|
20
|
+
}
|
|
21
|
+
/** Report an element's theme compliance from its computed style. */
|
|
22
|
+
export declare function themeReport(cs: CSSStyleDeclaration): ThemeReport;
|
|
23
|
+
/** Drop the cached palette (call if the app swaps themes at runtime). */
|
|
24
|
+
export declare function resetThemeCache(): void;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/dom/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA+DH,UAAU,WAAW;IACnB,2FAA2F;IAC3F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,mEAAmE;IACnE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,8FAA8F;IAC9F,QAAQ,EAAE,OAAO,CAAC;IAClB,oGAAoG;IACpG,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,EAAE,EAAE,mBAAmB,GAAG,WAAW,CAahE;AAED,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design-token (theme) awareness — the in-source answer to "is this color on-theme?". A DOM/a11y
|
|
3
|
+
* tool sees a color rendered; it does not know the app's INTENDED palette. Reticle reads the design
|
|
4
|
+
* tokens the app declares as `:root` CSS custom properties and reports, per element, whether its
|
|
5
|
+
* color/background maps to a token or is an off-palette hardcoded value. That is a theme-compliance
|
|
6
|
+
* signal no outside-the-page tool has without re-deriving the palette itself.
|
|
7
|
+
*
|
|
8
|
+
* Conservative by design: only a SET, opaque color with no matching token is flagged off-theme, and
|
|
9
|
+
* the matched token name is returned when there is one — so the agent can judge, not just trust a flag.
|
|
10
|
+
*/
|
|
11
|
+
let cached = null;
|
|
12
|
+
/** Resolve any CSS color string to canonical computed `rgb(...)`/`rgba(...)`, or null if not a color. */
|
|
13
|
+
function toRgb(value) {
|
|
14
|
+
if (value.length === 0)
|
|
15
|
+
return null;
|
|
16
|
+
const probe = document.createElement('span');
|
|
17
|
+
probe.style.color = '';
|
|
18
|
+
probe.style.color = value; // invalid colors leave it empty (the setter rejects them)
|
|
19
|
+
if (probe.style.color === '')
|
|
20
|
+
return null;
|
|
21
|
+
probe.style.position = 'absolute';
|
|
22
|
+
probe.style.pointerEvents = 'none';
|
|
23
|
+
document.body.appendChild(probe);
|
|
24
|
+
const rgb = getComputedStyle(probe).color;
|
|
25
|
+
probe.remove();
|
|
26
|
+
return rgb;
|
|
27
|
+
}
|
|
28
|
+
/** Collect `--token: value` declarations from every :root/html rule across the app's stylesheets. */
|
|
29
|
+
function collectTokens() {
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const sheet of Array.from(document.styleSheets)) {
|
|
32
|
+
let rules = null;
|
|
33
|
+
try {
|
|
34
|
+
rules = sheet.cssRules; // cross-origin sheets throw — skip them
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (rules === null)
|
|
40
|
+
continue;
|
|
41
|
+
for (const rule of Array.from(rules)) {
|
|
42
|
+
if (!(rule instanceof CSSStyleRule))
|
|
43
|
+
continue;
|
|
44
|
+
if (!/(^|,)\s*(:root|html)\b/.test(rule.selectorText))
|
|
45
|
+
continue;
|
|
46
|
+
for (const prop of Array.from(rule.style)) {
|
|
47
|
+
if (prop.startsWith('--'))
|
|
48
|
+
out[prop] = rule.style.getPropertyValue(prop).trim();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
/** The app's palette (color tokens → rgb), built once and cached (theme rarely changes at runtime). */
|
|
55
|
+
function palette() {
|
|
56
|
+
if (cached !== null)
|
|
57
|
+
return cached;
|
|
58
|
+
const byColor = new Map();
|
|
59
|
+
for (const [name, value] of Object.entries(collectTokens())) {
|
|
60
|
+
const rgb = toRgb(value);
|
|
61
|
+
if (rgb !== null && !byColor.has(rgb))
|
|
62
|
+
byColor.set(rgb, name);
|
|
63
|
+
}
|
|
64
|
+
cached = { byColor };
|
|
65
|
+
return cached;
|
|
66
|
+
}
|
|
67
|
+
/** True for a color that carries no visual weight (fully transparent) — never flagged off-theme. */
|
|
68
|
+
function isTransparent(rgb) {
|
|
69
|
+
return rgb === 'rgba(0, 0, 0, 0)' || rgb === 'transparent';
|
|
70
|
+
}
|
|
71
|
+
/** Report an element's theme compliance from its computed style. */
|
|
72
|
+
export function themeReport(cs) {
|
|
73
|
+
const p = palette();
|
|
74
|
+
const colorToken = p.byColor.get(cs.color) ?? null;
|
|
75
|
+
const backgroundToken = p.byColor.get(cs.backgroundColor) ?? null;
|
|
76
|
+
const colorOff = !isTransparent(cs.color) && colorToken === null;
|
|
77
|
+
const bgOff = !isTransparent(cs.backgroundColor) && backgroundToken === null;
|
|
78
|
+
return {
|
|
79
|
+
colorToken,
|
|
80
|
+
backgroundToken,
|
|
81
|
+
// Only meaningful when a palette exists; an app with no tokens can't violate one.
|
|
82
|
+
offTheme: p.byColor.size > 0 && (colorOff || bgOff),
|
|
83
|
+
tokenCount: p.byColor.size,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** Drop the cached palette (call if the app swaps themes at runtime). */
|
|
87
|
+
export function resetThemeCache() {
|
|
88
|
+
cached = null;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/dom/theme.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Reticle } from './reticle.js';
|
|
2
|
+
export declare const reticle: Reticle;
|
|
3
|
+
export { Reticle } from './reticle.js';
|
|
4
|
+
export type { ReticleConnectOptions } from './reticle.js';
|
|
5
|
+
export { SESSION_AUTO } from '@reticlehq/core';
|
|
6
|
+
export { setIgnoreSelectors } from './dom/dom-ignore.js';
|
|
7
|
+
export { registerAdapter, identifyComponent, readComponentState, elementHasHoverHandlers, adapterNames, } from './registry/adapters.js';
|
|
8
|
+
export type { ReticleAdapter, ComponentInfo, ComponentSource } from './registry/adapters.js';
|
|
9
|
+
export { registerStore, unregisterStore, storeNames, readStores } from './registry/stores.js';
|
|
10
|
+
export type { StoreGetter } from './registry/stores.js';
|
|
11
|
+
export { registerCapabilities, getCapabilities, hasCapabilities } from './registry/capabilities.js';
|
|
12
|
+
export type { Capabilities, CapabilitiesInput, CapabilityFlow } from './registry/capabilities.js';
|
|
13
|
+
export { createReticleEmitter } from './registry/emitter.js';
|
|
14
|
+
export type { ReticleEmitter, EmitterTarget, CreateReticleEmitterOptions, } from './registry/emitter.js';
|
|
15
|
+
export { commitAndSignal } from './registry/commit-and-signal.js';
|
|
16
|
+
export { registerReticleDomain } from './registry/domains.js';
|
|
17
|
+
export type { ReticleDomain } from './registry/domains.js';
|
|
18
|
+
export { buildSnapshot } from './dom/snapshot.js';
|
|
19
|
+
export { matchQuery, runQuery } from './dom/query.js';
|
|
20
|
+
export { executeAction, executeSequence } from './actions/actions.js';
|
|
21
|
+
export { describe, getRole, getAccessibleName, getStates, isVisible } from './dom/a11y.js';
|
|
22
|
+
export { refs, RefRegistry } from './dom/refs.js';
|
|
23
|
+
export { Annotator, installAnnotator, type AnnotatorDeps } from './review/annotator.js';
|
|
24
|
+
export { resolveMarkAnchor, type MarkAnchor } from './review/mark-anchor.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAQvC,eAAO,MAAM,OAAO,EAAE,OAA2D,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG7F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9F,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACpG,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGlG,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,YAAY,EACV,cAAc,EACd,aAAa,EACb,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Reticle } from './reticle.js';
|
|
2
|
+
/**
|
|
3
|
+
* The singleton embedded in the host app: `import { reticle } from '@reticlehq/browser'`.
|
|
4
|
+
* Persisted on a global so HMR module re-evaluation reuses the same (already-connected)
|
|
5
|
+
* instance instead of creating a second bridge connection (feedback #7).
|
|
6
|
+
*/
|
|
7
|
+
const globalStore = globalThis;
|
|
8
|
+
export const reticle = (globalStore.__reticleInstance ??= new Reticle());
|
|
9
|
+
export { Reticle } from './reticle.js';
|
|
10
|
+
// Session label sentinel: pass as `session` (or omit it) to get a unique per-tab id (no collisions).
|
|
11
|
+
export { SESSION_AUTO } from '@reticlehq/core';
|
|
12
|
+
// Exclude your own dev widgets from snapshots/observers.
|
|
13
|
+
export { setIgnoreSelectors } from './dom/dom-ignore.js';
|
|
14
|
+
// Adapter API (used by @reticlehq/react and other framework adapters).
|
|
15
|
+
export { registerAdapter, identifyComponent, readComponentState, elementHasHoverHandlers, adapterNames, } from './registry/adapters.js';
|
|
16
|
+
// Store registry: pull live framework/store state on demand.
|
|
17
|
+
export { registerStore, unregisterStore, storeNames, readStores } from './registry/stores.js';
|
|
18
|
+
// Capability registry: the app self-describes its testable surface via reticle.describe.
|
|
19
|
+
export { registerCapabilities, getCapabilities, hasCapabilities } from './registry/capabilities.js';
|
|
20
|
+
// SDK helpers: adopt the recommended integration patterns without boilerplate.
|
|
21
|
+
export { createReticleEmitter } from './registry/emitter.js';
|
|
22
|
+
export { commitAndSignal } from './registry/commit-and-signal.js';
|
|
23
|
+
export { registerReticleDomain } from './registry/domains.js';
|
|
24
|
+
// Lower-level building blocks (useful for tests and advanced embedding).
|
|
25
|
+
export { buildSnapshot } from './dom/snapshot.js';
|
|
26
|
+
export { matchQuery, runQuery } from './dom/query.js';
|
|
27
|
+
export { executeAction, executeSequence } from './actions/actions.js';
|
|
28
|
+
export { describe, getRole, getAccessibleName, getStates, isVisible } from './dom/a11y.js';
|
|
29
|
+
export { refs, RefRegistry } from './dom/refs.js';
|
|
30
|
+
export { Annotator, installAnnotator } from './review/annotator.js';
|
|
31
|
+
export { resolveMarkAnchor } from './review/mark-anchor.js';
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;;;GAIG;AACH,MAAM,WAAW,GAAG,UAAwD,CAAC;AAC7E,MAAM,CAAC,MAAM,OAAO,GAAY,CAAC,WAAW,CAAC,iBAAiB,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,qGAAqG;AACrG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,yDAAyD;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,uEAAuE;AACvE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAGhC,6DAA6D;AAC7D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG9F,yFAAyF;AACzF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGpG,+EAA+E;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAM7D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,yEAAyE;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAsB,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAmB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../../src/observers/animation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAmCrD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { EventType } from '@reticlehq/core';
|
|
2
|
+
import { refs } from '../dom/refs.js';
|
|
3
|
+
import { isReticleOverlay } from '../dom/dom-ignore.js';
|
|
4
|
+
/** Observe CSS animations + transitions and emit anim.start / anim.end (plan/03 §6). */
|
|
5
|
+
export function installAnimation(emit) {
|
|
6
|
+
const onStart = (event) => {
|
|
7
|
+
const target = event.target;
|
|
8
|
+
// Skip Reticle's own HUD keyframes (reticle-pulse/reticle-shimmer/…) so observe/record never
|
|
9
|
+
// self-pollute the agent's view of the app (matches the DOM observer's overlay filter).
|
|
10
|
+
if (target instanceof Element && !isReticleOverlay(target)) {
|
|
11
|
+
emit(EventType.ANIM_START, { name: event.animationName }, refs.refFor(target));
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const onEnd = (event) => {
|
|
15
|
+
const target = event.target;
|
|
16
|
+
if (target instanceof Element && !isReticleOverlay(target)) {
|
|
17
|
+
emit(EventType.ANIM_END, { name: event.animationName }, refs.refFor(target));
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const onTransitionEnd = (event) => {
|
|
21
|
+
const target = event.target;
|
|
22
|
+
if (target instanceof Element && !isReticleOverlay(target)) {
|
|
23
|
+
emit(EventType.ANIM_END, { name: event.propertyName, kind: 'transition' }, refs.refFor(target));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
document.addEventListener('animationstart', onStart, true);
|
|
27
|
+
document.addEventListener('animationend', onEnd, true);
|
|
28
|
+
document.addEventListener('transitionend', onTransitionEnd, true);
|
|
29
|
+
return () => {
|
|
30
|
+
document.removeEventListener('animationstart', onStart, true);
|
|
31
|
+
document.removeEventListener('animationend', onEnd, true);
|
|
32
|
+
document.removeEventListener('transitionend', onTransitionEnd, true);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=animation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.js","sourceRoot":"","sources":["../../src/observers/animation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,wFAAwF;AACxF,MAAM,UAAU,gBAAgB,CAAC,IAAU;IACzC,MAAM,OAAO,GAAG,CAAC,KAAqB,EAAQ,EAAE;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,6FAA6F;QAC7F,wFAAwF;QACxF,IAAI,MAAM,YAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,KAAqB,EAAQ,EAAE;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,YAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAQ,EAAE;QACvD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,IAAI,MAAM,YAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,IAAI,CACF,SAAS,CAAC,QAAQ,EAClB,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,EAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CACpB,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACvD,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IAElE,OAAO,GAAG,EAAE;QACV,QAAQ,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9D,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1D,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/observers/console.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAqBjD,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAuCnD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/* eslint-disable no-console -- this module's whole purpose is to wrap console.{log,warn,error} */
|
|
2
|
+
import { EventType } from '@reticlehq/core';
|
|
3
|
+
import { safeStringify } from '../security/serialization.js';
|
|
4
|
+
const METHOD_EVENT = {
|
|
5
|
+
log: EventType.CONSOLE_LOG,
|
|
6
|
+
warn: EventType.CONSOLE_WARN,
|
|
7
|
+
error: EventType.CONSOLE_ERROR,
|
|
8
|
+
};
|
|
9
|
+
function stringifyArgs(args) {
|
|
10
|
+
return args
|
|
11
|
+
.map((a) => {
|
|
12
|
+
if (typeof a === 'string')
|
|
13
|
+
return a;
|
|
14
|
+
if (a instanceof Error)
|
|
15
|
+
return a.message;
|
|
16
|
+
return safeStringify(a);
|
|
17
|
+
})
|
|
18
|
+
.join(' ');
|
|
19
|
+
}
|
|
20
|
+
/** Patch console.{log,warn,error} and window error events. Reversible. */
|
|
21
|
+
export function installConsole(emit) {
|
|
22
|
+
const methods = ['log', 'warn', 'error'];
|
|
23
|
+
const originals = new Map();
|
|
24
|
+
for (const method of methods) {
|
|
25
|
+
// Store the true original for teardown identity; call through a bound copy.
|
|
26
|
+
const original = console[method];
|
|
27
|
+
originals.set(method, original);
|
|
28
|
+
const callOriginal = original.bind(console);
|
|
29
|
+
console[method] = (...args) => {
|
|
30
|
+
emit(METHOD_EVENT[method], { message: stringifyArgs(args) });
|
|
31
|
+
callOriginal(...args);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const onError = (event) => {
|
|
35
|
+
emit(EventType.ERROR_UNCAUGHT, {
|
|
36
|
+
message: event.message,
|
|
37
|
+
source: event.filename,
|
|
38
|
+
line: event.lineno,
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
const onRejection = (event) => {
|
|
42
|
+
const reason = event.reason;
|
|
43
|
+
emit(EventType.ERROR_UNCAUGHT, {
|
|
44
|
+
message: reason instanceof Error ? reason.message : String(reason),
|
|
45
|
+
kind: 'unhandledrejection',
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
window.addEventListener('error', onError);
|
|
49
|
+
window.addEventListener('unhandledrejection', onRejection);
|
|
50
|
+
return () => {
|
|
51
|
+
for (const [method, original] of originals) {
|
|
52
|
+
console[method] = original;
|
|
53
|
+
}
|
|
54
|
+
window.removeEventListener('error', onError);
|
|
55
|
+
window.removeEventListener('unhandledrejection', onRejection);
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/observers/console.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAI7D,MAAM,YAAY,GAAqC;IACrD,GAAG,EAAE,SAAS,CAAC,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC,YAAY;IAC5B,KAAK,EAAE,SAAS,CAAC,aAAa;CAC/B,CAAC;AAEF,SAAS,aAAa,CAAC,IAAe;IACpC,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,YAAY,KAAK;YAAE,OAAO,CAAC,CAAC,OAAO,CAAC;QACzC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,IAAU;IACvC,MAAM,OAAO,GAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+C,CAAC;IAEzE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAiC,CAAC;QACjE,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChC,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE;YAC7C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7D,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAQ,EAAE;QAC1C,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,KAAK,CAAC,QAAQ;YACtB,IAAI,EAAE,KAAK,CAAC,MAAM;SACnB,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,CAAC,KAA4B,EAAQ,EAAE;QACzD,MAAM,MAAM,GAAY,KAAK,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAC7B,OAAO,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAClE,IAAI,EAAE,oBAAoB;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAE3D,OAAO,GAAG,EAAE;QACV,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,GAAG,QAA8B,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/observers/dom.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAwBjD,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CA0E/C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { EventType } from '@reticlehq/core';
|
|
2
|
+
import { getAccessibleName, getRole, isVisible } from '../dom/a11y.js';
|
|
3
|
+
import { refs } from '../dom/refs.js';
|
|
4
|
+
import { isReticleOverlay } from '../dom/dom-ignore.js';
|
|
5
|
+
const WATCHED_ATTRS = [
|
|
6
|
+
'class',
|
|
7
|
+
'hidden',
|
|
8
|
+
'disabled',
|
|
9
|
+
'open',
|
|
10
|
+
'aria-hidden',
|
|
11
|
+
'aria-expanded',
|
|
12
|
+
'aria-selected',
|
|
13
|
+
'aria-checked',
|
|
14
|
+
'data-state',
|
|
15
|
+
];
|
|
16
|
+
const DIALOG_ROLES = new Set(['dialog', 'alertdialog']);
|
|
17
|
+
const LIVE_ROLES = new Set(['alert', 'status']);
|
|
18
|
+
/** Max meaningful added/removed nodes reported per mutation batch (backpressure). */
|
|
19
|
+
const MAX_PER_BATCH = 40;
|
|
20
|
+
function isMeaningful(role, name) {
|
|
21
|
+
return role !== 'generic' || name.length > 0;
|
|
22
|
+
}
|
|
23
|
+
/** Observe DOM mutations and emit semantic (not raw) events. See plan/03 §1. */
|
|
24
|
+
export function installDom(emit) {
|
|
25
|
+
const observer = new MutationObserver((records) => {
|
|
26
|
+
let added = 0;
|
|
27
|
+
let removed = 0;
|
|
28
|
+
let changed = 0;
|
|
29
|
+
for (const record of records) {
|
|
30
|
+
if (record.type === 'attributes') {
|
|
31
|
+
const target = record.target;
|
|
32
|
+
if (target instanceof Element &&
|
|
33
|
+
record.attributeName !== null &&
|
|
34
|
+
changed < MAX_PER_BATCH &&
|
|
35
|
+
!isReticleOverlay(target)) {
|
|
36
|
+
changed += 1;
|
|
37
|
+
emit(EventType.DOM_ATTR, { attr: record.attributeName, value: target.getAttribute(record.attributeName) }, refs.refFor(target));
|
|
38
|
+
}
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (record.type === 'characterData') {
|
|
42
|
+
// In-place text change inside an existing subtree (wizard steps, inline edits) —
|
|
43
|
+
// childList-only would miss this.
|
|
44
|
+
const parent = record.target.parentElement;
|
|
45
|
+
if (parent !== null && changed < MAX_PER_BATCH && !isReticleOverlay(parent)) {
|
|
46
|
+
changed += 1;
|
|
47
|
+
const text = (record.target.textContent ?? '').trim().slice(0, 80);
|
|
48
|
+
emit(EventType.DOM_TEXT, { text }, refs.refFor(parent));
|
|
49
|
+
}
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
for (const node of record.addedNodes) {
|
|
53
|
+
if (!(node instanceof Element) || added >= MAX_PER_BATCH)
|
|
54
|
+
continue;
|
|
55
|
+
if (isReticleOverlay(node))
|
|
56
|
+
continue;
|
|
57
|
+
const role = getRole(node);
|
|
58
|
+
const name = getAccessibleName(node);
|
|
59
|
+
if (!isMeaningful(role, name))
|
|
60
|
+
continue;
|
|
61
|
+
added += 1;
|
|
62
|
+
const ref = refs.refFor(node);
|
|
63
|
+
emit(EventType.DOM_ADDED, { role, name }, ref);
|
|
64
|
+
if (DIALOG_ROLES.has(role) ||
|
|
65
|
+
LIVE_ROLES.has(role) ||
|
|
66
|
+
node.getAttribute('aria-modal') === 'true') {
|
|
67
|
+
if (isVisible(node))
|
|
68
|
+
emit(EventType.VISIBLE_SHOWN, { role, name }, ref);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for (const node of record.removedNodes) {
|
|
72
|
+
if (!(node instanceof Element) || removed >= MAX_PER_BATCH)
|
|
73
|
+
continue;
|
|
74
|
+
if (isReticleOverlay(node))
|
|
75
|
+
continue;
|
|
76
|
+
const role = getRole(node);
|
|
77
|
+
const name = getAccessibleName(node);
|
|
78
|
+
if (!isMeaningful(role, name))
|
|
79
|
+
continue;
|
|
80
|
+
removed += 1;
|
|
81
|
+
emit(EventType.DOM_REMOVED, { role, name });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
observer.observe(document.documentElement, {
|
|
86
|
+
subtree: true,
|
|
87
|
+
childList: true,
|
|
88
|
+
attributes: true,
|
|
89
|
+
attributeFilter: WATCHED_ATTRS,
|
|
90
|
+
characterData: true,
|
|
91
|
+
});
|
|
92
|
+
return () => {
|
|
93
|
+
observer.disconnect();
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=dom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/observers/dom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,MAAM,aAAa,GAAG;IACpB,OAAO;IACP,QAAQ;IACR,UAAU;IACV,MAAM;IACN,aAAa;IACb,eAAe;IACf,eAAe;IACf,cAAc;IACd,YAAY;CACb,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;AACxD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEhD,qFAAqF;AACrF,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY;IAC9C,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,OAAO,EAAE,EAAE;QAChD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,IACE,MAAM,YAAY,OAAO;oBACzB,MAAM,CAAC,aAAa,KAAK,IAAI;oBAC7B,OAAO,GAAG,aAAa;oBACvB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACzB,CAAC;oBACD,OAAO,IAAI,CAAC,CAAC;oBACb,IAAI,CACF,SAAS,CAAC,QAAQ,EAClB,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,EAChF,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CACpB,CAAC;gBACJ,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACpC,iFAAiF;gBACjF,kCAAkC;gBAClC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;gBAC3C,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,GAAG,aAAa,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5E,OAAO,IAAI,CAAC,CAAC;oBACb,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACnE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC1D,CAAC;gBACD,SAAS;YACX,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACrC,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC,IAAI,KAAK,IAAI,aAAa;oBAAE,SAAS;gBACnE,IAAI,gBAAgB,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;oBAAE,SAAS;gBACxC,KAAK,IAAI,CAAC,CAAC;gBACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC/C,IACE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;oBACtB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;oBACpB,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,MAAM,EAC1C,CAAC;oBACD,IAAI,SAAS,CAAC,IAAI,CAAC;wBAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC1E,CAAC;YACH,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACvC,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC,IAAI,OAAO,IAAI,aAAa;oBAAE,SAAS;gBACrE,IAAI,gBAAgB,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC3B,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC;oBAAE,SAAS;gBACxC,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;QACzC,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;QAChB,eAAe,EAAE,aAAa;QAC9B,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,OAAO,GAAG,EAAE;QACV,QAAQ,CAAC,UAAU,EAAE,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Emit, Teardown } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Report page visibility/focus immediately on change + a lightweight native heartbeat.
|
|
4
|
+
* Lets the bridge know whether the tab is foregrounded so the agent never drives a throttled
|
|
5
|
+
* tab blind. Uses a native (pre-bound) timer so a frozen app clock (reticle_clock) never stalls it.
|
|
6
|
+
*/
|
|
7
|
+
export declare function installHealth(emit: Emit): Teardown;
|
|
8
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/observers/health.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AASjD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAyBlD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { EventType, HealthReason, SESSION_HEALTH } from '@reticlehq/core';
|
|
2
|
+
import { nativeSetInterval } from '../timers/native-timers.js';
|
|
3
|
+
function snapshotHealth() {
|
|
4
|
+
return {
|
|
5
|
+
hidden: document.visibilityState === 'hidden',
|
|
6
|
+
focused: document.hasFocus(),
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Report page visibility/focus immediately on change + a lightweight native heartbeat.
|
|
11
|
+
* Lets the bridge know whether the tab is foregrounded so the agent never drives a throttled
|
|
12
|
+
* tab blind. Uses a native (pre-bound) timer so a frozen app clock (reticle_clock) never stalls it.
|
|
13
|
+
*/
|
|
14
|
+
export function installHealth(emit) {
|
|
15
|
+
const report = (reason) => {
|
|
16
|
+
emit(EventType.PAGE_HEALTH, { ...snapshotHealth(), reason });
|
|
17
|
+
};
|
|
18
|
+
const onVisibility = () => report(HealthReason.VISIBILITY);
|
|
19
|
+
const onFocus = () => report(HealthReason.FOCUS);
|
|
20
|
+
const onBlur = () => report(HealthReason.BLUR);
|
|
21
|
+
document.addEventListener('visibilitychange', onVisibility);
|
|
22
|
+
window.addEventListener('focus', onFocus);
|
|
23
|
+
window.addEventListener('blur', onBlur);
|
|
24
|
+
report(HealthReason.INITIAL); // baseline so the server knows state before the first change
|
|
25
|
+
const stopHeartbeat = nativeSetInterval(() => report(HealthReason.HEARTBEAT), SESSION_HEALTH.HEARTBEAT_MS);
|
|
26
|
+
return () => {
|
|
27
|
+
stopHeartbeat();
|
|
28
|
+
document.removeEventListener('visibilitychange', onVisibility);
|
|
29
|
+
window.removeEventListener('focus', onFocus);
|
|
30
|
+
window.removeEventListener('blur', onBlur);
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/observers/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAG/D,SAAS,cAAc;IACrB,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,eAAe,KAAK,QAAQ;QAC7C,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,MAAM,MAAM,GAAG,CAAC,MAAoB,EAAQ,EAAE;QAC5C,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,GAAG,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAErD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAExC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,6DAA6D;IAC3F,MAAM,aAAa,GAAG,iBAAiB,CACrC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EACpC,cAAc,CAAC,YAAY,CAC5B,CAAC;IAEF,OAAO,GAAG,EAAE;QACV,aAAa,EAAE,CAAC;QAChB,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Emit, Teardown } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Redact credential-bearing query params (`?access_token=…`, signed-URL keys, magic-link tokens) so
|
|
4
|
+
* they don't leak into the agent transcript / flow / run artifacts. Only the query string is rewritten
|
|
5
|
+
* — the path (relative or absolute) and any hash are preserved — and only when something actually
|
|
6
|
+
* matched, so non-sensitive URLs pass through byte-for-byte. Uses the shared `isSensitiveKey` regex.
|
|
7
|
+
*/
|
|
8
|
+
export declare function redactUrl(raw: string): string;
|
|
9
|
+
/** Patch fetch + XMLHttpRequest to emit net.request events. Fully reversible. */
|
|
10
|
+
export declare function installNetwork(emit: Emit): Teardown;
|
|
11
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/observers/network.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiB7C;AAqBD,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAiGnD"}
|