ugly-app 0.1.712 → 0.1.714

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 (100) hide show
  1. package/dist/cli/version.d.ts +1 -1
  2. package/dist/cli/version.js +1 -1
  3. package/dist/inspect/agent/console.d.ts +13 -0
  4. package/dist/inspect/agent/console.d.ts.map +1 -0
  5. package/dist/inspect/agent/console.js +110 -0
  6. package/dist/inspect/agent/console.js.map +1 -0
  7. package/dist/inspect/agent/dom.d.ts +4 -0
  8. package/dist/inspect/agent/dom.d.ts.map +1 -0
  9. package/dist/inspect/agent/dom.js +93 -0
  10. package/dist/inspect/agent/dom.js.map +1 -0
  11. package/dist/inspect/agent/element.d.ts +7 -0
  12. package/dist/inspect/agent/element.d.ts.map +1 -0
  13. package/dist/inspect/agent/element.js +141 -0
  14. package/dist/inspect/agent/element.js.map +1 -0
  15. package/dist/inspect/agent/eval.d.ts +17 -0
  16. package/dist/inspect/agent/eval.d.ts.map +1 -0
  17. package/dist/inspect/agent/eval.js +54 -0
  18. package/dist/inspect/agent/eval.js.map +1 -0
  19. package/dist/inspect/agent/install.d.ts +5 -0
  20. package/dist/inspect/agent/install.d.ts.map +1 -0
  21. package/dist/inspect/agent/install.js +99 -0
  22. package/dist/inspect/agent/install.js.map +1 -0
  23. package/dist/inspect/agent/network.d.ts +9 -0
  24. package/dist/inspect/agent/network.d.ts.map +1 -0
  25. package/dist/inspect/agent/network.js +154 -0
  26. package/dist/inspect/agent/network.js.map +1 -0
  27. package/dist/inspect/agent/nodeRegistry.d.ts +9 -0
  28. package/dist/inspect/agent/nodeRegistry.d.ts.map +1 -0
  29. package/dist/inspect/agent/nodeRegistry.js +30 -0
  30. package/dist/inspect/agent/nodeRegistry.js.map +1 -0
  31. package/dist/inspect/agent/picker.d.ts +14 -0
  32. package/dist/inspect/agent/picker.d.ts.map +1 -0
  33. package/dist/inspect/agent/picker.js +102 -0
  34. package/dist/inspect/agent/picker.js.map +1 -0
  35. package/dist/inspect/agent/profile.d.ts +3 -0
  36. package/dist/inspect/agent/profile.d.ts.map +1 -0
  37. package/dist/inspect/agent/profile.js +88 -0
  38. package/dist/inspect/agent/profile.js.map +1 -0
  39. package/dist/inspect/agent/serialize.d.ts +20 -0
  40. package/dist/inspect/agent/serialize.d.ts.map +1 -0
  41. package/dist/inspect/agent/serialize.js +241 -0
  42. package/dist/inspect/agent/serialize.js.map +1 -0
  43. package/dist/inspect/agent/storage.d.ts +3 -0
  44. package/dist/inspect/agent/storage.d.ts.map +1 -0
  45. package/dist/inspect/agent/storage.js +76 -0
  46. package/dist/inspect/agent/storage.js.map +1 -0
  47. package/dist/inspect/agent/types.d.ts +50 -0
  48. package/dist/inspect/agent/types.d.ts.map +1 -0
  49. package/dist/inspect/agent/types.js +6 -0
  50. package/dist/inspect/agent/types.js.map +1 -0
  51. package/dist/inspect/agent/vitals.d.ts +10 -0
  52. package/dist/inspect/agent/vitals.d.ts.map +1 -0
  53. package/dist/inspect/agent/vitals.js +83 -0
  54. package/dist/inspect/agent/vitals.js.map +1 -0
  55. package/dist/inspect/client.d.ts +33 -0
  56. package/dist/inspect/client.d.ts.map +1 -0
  57. package/dist/inspect/client.js +71 -0
  58. package/dist/inspect/client.js.map +1 -0
  59. package/dist/inspect/dispatch.d.ts +12 -0
  60. package/dist/inspect/dispatch.d.ts.map +1 -0
  61. package/dist/inspect/dispatch.js +61 -0
  62. package/dist/inspect/dispatch.js.map +1 -0
  63. package/dist/inspect/index.d.ts +6 -0
  64. package/dist/inspect/index.d.ts.map +1 -0
  65. package/dist/inspect/index.js +8 -0
  66. package/dist/inspect/index.js.map +1 -0
  67. package/dist/inspect/protocol.d.ts +265 -0
  68. package/dist/inspect/protocol.d.ts.map +1 -0
  69. package/dist/inspect/protocol.js +13 -0
  70. package/dist/inspect/protocol.js.map +1 -0
  71. package/dist/native/contract-meta.d.ts.map +1 -1
  72. package/dist/native/contract-meta.js +15 -0
  73. package/dist/native/contract-meta.js.map +1 -1
  74. package/dist/native/contract.d.ts +94 -1
  75. package/dist/native/contract.d.ts.map +1 -1
  76. package/dist/native/contract.js.map +1 -1
  77. package/package.json +4 -2
  78. package/src/cli/version.ts +1 -1
  79. package/src/inspect/agent/console.ts +117 -0
  80. package/src/inspect/agent/dom.test.ts +85 -0
  81. package/src/inspect/agent/dom.ts +100 -0
  82. package/src/inspect/agent/element.ts +151 -0
  83. package/src/inspect/agent/eval.ts +70 -0
  84. package/src/inspect/agent/install.ts +110 -0
  85. package/src/inspect/agent/network.ts +162 -0
  86. package/src/inspect/agent/nodeRegistry.ts +33 -0
  87. package/src/inspect/agent/picker.ts +119 -0
  88. package/src/inspect/agent/profile.ts +98 -0
  89. package/src/inspect/agent/serialize.test.ts +114 -0
  90. package/src/inspect/agent/serialize.ts +274 -0
  91. package/src/inspect/agent/storage.ts +75 -0
  92. package/src/inspect/agent/types.ts +57 -0
  93. package/src/inspect/agent/vitals.ts +98 -0
  94. package/src/inspect/client.test.ts +93 -0
  95. package/src/inspect/client.ts +113 -0
  96. package/src/inspect/dispatch.ts +70 -0
  97. package/src/inspect/index.ts +9 -0
  98. package/src/inspect/protocol.ts +316 -0
  99. package/src/native/contract-meta.ts +15 -0
  100. package/src/native/contract.ts +52 -1
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.712";
1
+ export declare const CLI_VERSION = "0.1.714";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.712";
2
+ export const CLI_VERSION = "0.1.714";
3
3
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,13 @@
1
+ import { RingBuffer } from '../../client/inspect/buffer.js';
2
+ import type { ConsoleEntry, StackFrame } from '../protocol.js';
3
+ import { type ObjectRegistry } from './serialize.js';
4
+ export interface ConsoleCaptureDeps {
5
+ buffer: RingBuffer<ConsoleEntry>;
6
+ registry: ObjectRegistry;
7
+ nodeIdFor: (node: unknown) => string;
8
+ onEntry?: (e: ConsoleEntry) => void;
9
+ now: () => number;
10
+ }
11
+ export declare function installConsoleCapture(deps: ConsoleCaptureDeps): () => void;
12
+ export declare function parseStack(stack: string | undefined, skip?: number): StackFrame[];
13
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/inspect/agent/console.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAA2B,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,gBAAgB,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACjC,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACpC,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAID,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,IAAI,CA8D1E;AAkBD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,SAAI,GAAG,UAAU,EAAE,CAkB5E"}
@@ -0,0 +1,110 @@
1
+ // Console capture: wraps console.{log,info,warn,error,debug} + uncaught errors
2
+ // into a ring buffer of structured `ConsoleEntry`s (args serialized as
3
+ // RemoteValue, not flattened to strings) and streams each to `onEntry`.
4
+ import { serialize } from './serialize.js';
5
+ const LEVELS = ['log', 'info', 'warn', 'error', 'debug'];
6
+ export function installConsoleCapture(deps) {
7
+ if (typeof console === 'undefined')
8
+ return () => { };
9
+ let seq = 0;
10
+ const original = {};
11
+ for (const level of LEVELS) {
12
+ const orig = console[level];
13
+ if (typeof orig !== 'function')
14
+ continue;
15
+ original[level] = orig;
16
+ console[level] = (...args) => {
17
+ try {
18
+ record(level, args);
19
+ }
20
+ catch {
21
+ // never let capture break the page
22
+ }
23
+ orig.apply(console, args);
24
+ };
25
+ }
26
+ const onError = (e) => {
27
+ record('error', [e.message], {
28
+ stack: parseStack(e.error?.stack),
29
+ source: { url: e.filename || '', line: e.lineno || 0, col: e.colno || 0 },
30
+ });
31
+ };
32
+ const onRejection = (e) => {
33
+ const reason = e.reason;
34
+ record('error', [`Unhandled rejection: ${reason?.message ?? String(e.reason)}`], {
35
+ stack: parseStack(reason?.stack),
36
+ });
37
+ };
38
+ if (typeof window !== 'undefined') {
39
+ window.addEventListener('error', onError);
40
+ window.addEventListener('unhandledrejection', onRejection);
41
+ }
42
+ function record(level, args, extra) {
43
+ const serialized = args.map((a) => serialize(a, { registry: deps.registry, nodeIdFor: deps.nodeIdFor }));
44
+ const stack = extra?.stack ?? parseStack(new Error().stack, 1);
45
+ const entry = {
46
+ seq: ++seq,
47
+ ts: deps.now(),
48
+ level,
49
+ args: serialized,
50
+ text: renderText(args),
51
+ stack: stack.length ? stack : undefined,
52
+ source: extra?.source ?? stack[0] ? { url: stack[0].url, line: stack[0].line, col: stack[0].col } : undefined,
53
+ };
54
+ deps.buffer.push(entry);
55
+ deps.onEntry?.(entry);
56
+ }
57
+ return () => {
58
+ for (const level of LEVELS) {
59
+ const orig = original[level];
60
+ if (orig)
61
+ console[level] = orig;
62
+ }
63
+ if (typeof window !== 'undefined') {
64
+ window.removeEventListener('error', onError);
65
+ window.removeEventListener('unhandledrejection', onRejection);
66
+ }
67
+ };
68
+ }
69
+ function renderText(args) {
70
+ return args
71
+ .map((a) => {
72
+ if (typeof a === 'string')
73
+ return a;
74
+ if (a instanceof Error)
75
+ return `${a.name}: ${a.message}`;
76
+ try {
77
+ return JSON.stringify(a);
78
+ }
79
+ catch {
80
+ return String(a);
81
+ }
82
+ })
83
+ .join(' ')
84
+ .slice(0, 2000);
85
+ }
86
+ // Parse a V8/SpiderMonkey stack string into frames, skipping `skip` leading frames.
87
+ export function parseStack(stack, skip = 0) {
88
+ if (!stack)
89
+ return [];
90
+ const out = [];
91
+ const lines = stack.split('\n');
92
+ for (const raw of lines) {
93
+ const line = raw.trim();
94
+ // V8: "at fn (url:line:col)" or "at url:line:col"
95
+ let m = /^at\s+(.*?)\s+\((.*?):(\d+):(\d+)\)$/.exec(line) || /^at\s+(.*?):(\d+):(\d+)$/.exec(line);
96
+ if (m) {
97
+ if (m.length === 5)
98
+ out.push({ functionName: m[1], url: m[2], line: +m[3], col: +m[4] });
99
+ else
100
+ out.push({ functionName: '(anonymous)', url: m[1], line: +m[2], col: +m[3] });
101
+ continue;
102
+ }
103
+ // SpiderMonkey: "fn@url:line:col"
104
+ m = /^(.*?)@(.*?):(\d+):(\d+)$/.exec(line);
105
+ if (m)
106
+ out.push({ functionName: m[1] || '(anonymous)', url: m[2], line: +m[3], col: +m[4] });
107
+ }
108
+ return out.slice(skip);
109
+ }
110
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/inspect/agent/console.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DomSnapshot } from '../protocol.js';
2
+ import type { NodeRegistry } from './nodeRegistry.js';
3
+ export declare function captureDom(reg: NodeRegistry, maxDepth?: number, now?: () => number): DomSnapshot;
4
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/inspect/agent/dom.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,SAAoB,EAAE,GAAG,GAAE,MAAM,MAAiB,GAAG,WAAW,CAUrH"}
@@ -0,0 +1,93 @@
1
+ // DOM tree serialization into the `DomNode` shape with stable nodeIds (so later
2
+ // element/highlight calls resolve back to live nodes). Includes open shadow
3
+ // roots and ::before/::after pseudo nodes.
4
+ const DEFAULT_MAX_DEPTH = 40;
5
+ const MAX_TEXT = 200;
6
+ export function captureDom(reg, maxDepth = DEFAULT_MAX_DEPTH, now = Date.now) {
7
+ const root = typeof document !== 'undefined' && document.documentElement
8
+ ? serializeNode(document.documentElement, reg, maxDepth, 0)
9
+ : emptyRoot();
10
+ return {
11
+ documentUrl: typeof location !== 'undefined' ? location.href : '',
12
+ capturedAt: now(),
13
+ root,
14
+ };
15
+ }
16
+ function serializeNode(node, reg, maxDepth, depth) {
17
+ const out = {
18
+ nodeId: reg.idFor(node),
19
+ nodeType: node.nodeType,
20
+ nodeName: node.nodeName,
21
+ };
22
+ if (node.nodeType === Node.TEXT_NODE || node.nodeType === Node.COMMENT_NODE) {
23
+ const text = (node.textContent ?? '').trim();
24
+ if (text)
25
+ out.textContent = text.slice(0, MAX_TEXT);
26
+ return out;
27
+ }
28
+ if (node.nodeType !== Node.ELEMENT_NODE)
29
+ return out;
30
+ const el = node;
31
+ out.attributes = attributesOf(el);
32
+ out.rect = rectOf(el);
33
+ if (depth >= maxDepth)
34
+ return out;
35
+ // Open shadow root, if any.
36
+ const shadow = el.shadowRoot;
37
+ if (shadow) {
38
+ out.shadowRoots = Array.from(shadow.childNodes)
39
+ .filter(keepNode)
40
+ .map((c) => serializeNode(c, reg, maxDepth, depth + 1));
41
+ }
42
+ const children = [];
43
+ const before = pseudoNode(el, 'before');
44
+ if (before)
45
+ children.push(before);
46
+ for (const child of Array.from(el.childNodes)) {
47
+ if (keepNode(child))
48
+ children.push(serializeNode(child, reg, maxDepth, depth + 1));
49
+ }
50
+ const after = pseudoNode(el, 'after');
51
+ if (after)
52
+ children.push(after);
53
+ if (children.length)
54
+ out.children = children;
55
+ return out;
56
+ }
57
+ function pseudoNode(el, which) {
58
+ if (typeof getComputedStyle === 'undefined')
59
+ return undefined;
60
+ let content;
61
+ try {
62
+ content = getComputedStyle(el, `::${which}`).content;
63
+ }
64
+ catch {
65
+ return undefined;
66
+ }
67
+ if (!content || content === 'none' || content === 'normal')
68
+ return undefined;
69
+ return { nodeId: `${idOf(el)}::${which}`, nodeType: 1, nodeName: `::${which}`, pseudo: which, textContent: content };
70
+ }
71
+ // Pseudo nodes need a stable parent-derived id without registering (they have no Node).
72
+ function idOf(el) {
73
+ return el.__inspectPseudoBase ?? el.tagName;
74
+ }
75
+ function keepNode(n) {
76
+ if (n.nodeType === Node.TEXT_NODE)
77
+ return !!(n.textContent ?? '').trim();
78
+ return n.nodeType === Node.ELEMENT_NODE || n.nodeType === Node.COMMENT_NODE;
79
+ }
80
+ function attributesOf(el) {
81
+ const out = {};
82
+ for (const attr of Array.from(el.attributes))
83
+ out[attr.name] = attr.value;
84
+ return out;
85
+ }
86
+ function rectOf(el) {
87
+ const r = el.getBoundingClientRect();
88
+ return { x: r.x, y: r.y, w: r.width, h: r.height };
89
+ }
90
+ function emptyRoot() {
91
+ return { nodeId: 'n0', nodeType: 9, nodeName: '#document' };
92
+ }
93
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../src/inspect/agent/dom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ElementDetail } from '../protocol.js';
2
+ import type { NodeRegistry } from './nodeRegistry.js';
3
+ export declare function elementDetail(reg: NodeRegistry, opts: {
4
+ nodeId?: string;
5
+ selector?: string;
6
+ }): ElementDetail;
7
+ //# sourceMappingURL=element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../../src/inspect/agent/element.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAA0C,aAAa,EAAe,MAAM,gBAAgB,CAAC;AACzG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAkB5G"}
@@ -0,0 +1,141 @@
1
+ // Per-element detail: computed styles, matched CSS rules, box model, event
2
+ // listeners, and accessibility props.
3
+ export function elementDetail(reg, opts) {
4
+ const el = resolve(reg, opts);
5
+ if (!el)
6
+ throw new Error(`inspect.element: node not found (${opts.nodeId ?? opts.selector ?? '?'})`);
7
+ const cs = getComputedStyle(el);
8
+ const rect = rectOf(el);
9
+ return {
10
+ nodeId: reg.idFor(el),
11
+ tag: el.tagName.toLowerCase(),
12
+ attributes: attributesOf(el),
13
+ computedStyles: computedStyles(cs),
14
+ matchedRules: matchedRules(el),
15
+ boxModel: boxModel(el, cs, rect),
16
+ eventListeners: eventListeners(el),
17
+ accessibility: accessibility(el),
18
+ rect,
19
+ };
20
+ }
21
+ function resolve(reg, opts) {
22
+ if (opts.nodeId) {
23
+ const n = reg.get(opts.nodeId);
24
+ return n?.nodeType === 1 ? n : null;
25
+ }
26
+ if (opts.selector && typeof document !== 'undefined')
27
+ return document.querySelector(opts.selector);
28
+ return null;
29
+ }
30
+ function computedStyles(cs) {
31
+ const out = {};
32
+ for (let i = 0; i < cs.length; i++) {
33
+ const prop = cs.item(i);
34
+ out[prop] = cs.getPropertyValue(prop);
35
+ }
36
+ return out;
37
+ }
38
+ function matchedRules(el) {
39
+ const out = [];
40
+ if (typeof document === 'undefined')
41
+ return out;
42
+ for (const sheet of Array.from(document.styleSheets)) {
43
+ let rules;
44
+ try {
45
+ rules = sheet.cssRules; // throws for cross-origin sheets
46
+ }
47
+ catch {
48
+ continue;
49
+ }
50
+ const href = sheet.href ?? undefined;
51
+ for (const rule of Array.from(rules)) {
52
+ if (!(rule instanceof CSSStyleRule))
53
+ continue;
54
+ let matches = false;
55
+ try {
56
+ matches = el.matches(rule.selectorText);
57
+ }
58
+ catch {
59
+ matches = false;
60
+ }
61
+ if (!matches)
62
+ continue;
63
+ out.push({
64
+ selector: rule.selectorText,
65
+ source: href ? { url: href, line: 0, col: 0 } : undefined,
66
+ props: ruleProps(rule.style),
67
+ });
68
+ }
69
+ }
70
+ return out;
71
+ }
72
+ function ruleProps(style) {
73
+ const out = {};
74
+ for (let i = 0; i < style.length; i++) {
75
+ const p = style.item(i);
76
+ out[p] = style.getPropertyValue(p);
77
+ }
78
+ return out;
79
+ }
80
+ function boxModel(el, cs, content) {
81
+ const quad = (prefix, suffix) => ({
82
+ top: px(cs.getPropertyValue(`${prefix}-top${suffix}`)),
83
+ right: px(cs.getPropertyValue(`${prefix}-right${suffix}`)),
84
+ bottom: px(cs.getPropertyValue(`${prefix}-bottom${suffix}`)),
85
+ left: px(cs.getPropertyValue(`${prefix}-left${suffix}`)),
86
+ });
87
+ return {
88
+ content,
89
+ padding: quad('padding', ''),
90
+ border: quad('border', '-width'),
91
+ margin: quad('margin', ''),
92
+ };
93
+ }
94
+ function eventListeners(el) {
95
+ // Chromium exposes getEventListeners only in the DevTools console scope; when
96
+ // the host injects via CDP it can populate window.__inspectGetEventListeners.
97
+ const store = (typeof window !== 'undefined' ? window : {});
98
+ const fn = store.__inspectGetEventListeners;
99
+ if (!fn)
100
+ return [];
101
+ try {
102
+ const map = fn(el);
103
+ const out = [];
104
+ for (const [type, list] of Object.entries(map)) {
105
+ for (const l of list)
106
+ out.push({ type, useCapture: l.useCapture, passive: l.passive });
107
+ }
108
+ return out;
109
+ }
110
+ catch {
111
+ return [];
112
+ }
113
+ }
114
+ function accessibility(el) {
115
+ const props = {};
116
+ for (const attr of Array.from(el.attributes)) {
117
+ if (attr.name.startsWith('aria-'))
118
+ props[attr.name] = attr.value;
119
+ }
120
+ const role = el.getAttribute('role') ?? undefined;
121
+ const name = el.getAttribute('aria-label') ??
122
+ el.title ??
123
+ (el.textContent ?? '').trim().slice(0, 80) ??
124
+ undefined;
125
+ return { role, name: name || undefined, properties: props };
126
+ }
127
+ function attributesOf(el) {
128
+ const out = {};
129
+ for (const attr of Array.from(el.attributes))
130
+ out[attr.name] = attr.value;
131
+ return out;
132
+ }
133
+ function rectOf(el) {
134
+ const r = el.getBoundingClientRect();
135
+ return { x: r.x, y: r.y, w: r.width, h: r.height };
136
+ }
137
+ function px(v) {
138
+ const n = parseFloat(v);
139
+ return Number.isFinite(n) ? n : 0;
140
+ }
141
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../../src/inspect/agent/element.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { EvalResult } from '../protocol.js';
2
+ import { type ObjectRegistry } from './serialize.js';
3
+ export interface EvalDeps {
4
+ registry: ObjectRegistry;
5
+ nodeIdFor: (n: unknown) => string;
6
+ now: () => number;
7
+ /** Last picked DOM node, exposed as `$0`. */
8
+ getPicked: () => unknown;
9
+ /** Last successful result, exposed as `$_`. */
10
+ getLast: () => unknown;
11
+ setLast: (v: unknown) => void;
12
+ }
13
+ export declare function evaluate(expression: string, deps: EvalDeps, opts?: {
14
+ awaitPromise?: boolean;
15
+ replMode?: boolean;
16
+ }): Promise<EvalResult>;
17
+ //# sourceMappingURL=eval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/inspect/agent/eval.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,gBAAgB,CAAC;AAEhE,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;IAClC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,OAAO,CAAC;IACvB,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/B;AAED,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,EACd,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GACpD,OAAO,CAAC,UAAU,CAAC,CAmBrB"}
@@ -0,0 +1,54 @@
1
+ // REPL eval ("exec command"): evaluate JS in the page's global scope and return
2
+ // a structured RemoteValue. Exposes `$0` (last picked node) and `$_` (last
3
+ // result) like the Chrome console.
4
+ import { parseStack } from './console.js';
5
+ import { serialize } from './serialize.js';
6
+ export async function evaluate(expression, deps, opts) {
7
+ const start = deps.now();
8
+ try {
9
+ let value = runInGlobalScope(expression, opts?.replMode ? { $0: deps.getPicked(), $_: deps.getLast() } : {});
10
+ if (opts?.awaitPromise && isThenable(value))
11
+ value = await value;
12
+ deps.setLast(value);
13
+ return {
14
+ ok: true,
15
+ value: serialize(value, { registry: deps.registry, nodeIdFor: deps.nodeIdFor }),
16
+ tookMs: deps.now() - start,
17
+ };
18
+ }
19
+ catch (err) {
20
+ const e = err;
21
+ return {
22
+ ok: false,
23
+ exception: { text: `${e?.name ?? 'Error'}: ${e?.message ?? String(err)}`, stack: parseStack(e?.stack) },
24
+ tookMs: deps.now() - start,
25
+ };
26
+ }
27
+ }
28
+ // Indirect eval runs in global scope. We bind `$0`/`$_` via a wrapper so REPL
29
+ // helpers work without polluting globals permanently.
30
+ function runInGlobalScope(expr, bindings) {
31
+ const names = Object.keys(bindings);
32
+ if (names.length === 0) {
33
+ return (0, eval)(expr); // eslint-disable-line no-eval
34
+ }
35
+ // REPL eval IS the feature here — the Function constructor binds $0/$_ into scope.
36
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
37
+ const fn = new Function(...names, `return (${expr});`);
38
+ try {
39
+ return fn(...names.map((n) => bindings[n]));
40
+ }
41
+ catch (err) {
42
+ // Statements (not expressions) — retry without the wrapping parens.
43
+ if (err instanceof SyntaxError) {
44
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
45
+ const stmt = new Function(...names, expr);
46
+ return stmt(...names.map((n) => bindings[n]));
47
+ }
48
+ throw err;
49
+ }
50
+ }
51
+ function isThenable(v) {
52
+ return typeof v?.then === 'function';
53
+ }
54
+ //# sourceMappingURL=eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/inspect/agent/eval.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,mCAAmC;AAGnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAuB,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAahE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,UAAkB,EAClB,IAAc,EACd,IAAqD;IAErD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7G,IAAI,IAAI,EAAE,YAAY,IAAI,UAAU,CAAC,KAAK,CAAC;YAAE,KAAK,GAAG,MAAM,KAAK,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/E,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC3B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAY,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;YACvG,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,sDAAsD;AACtD,SAAS,gBAAgB,CAAC,IAAY,EAAE,QAAiC;IACvE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B;IACxD,CAAC;IACD,mFAAmF;IACnF,8DAA8D;IAC9D,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,oEAAoE;QACpE,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,8DAA8D;YAC9D,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,CAAU;IAC5B,OAAO,OAAQ,CAAwB,EAAE,IAAI,KAAK,UAAU,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AgentEvents, InspectAgent } from './types.js';
2
+ export declare function createInspectAgent(events?: AgentEvents): InspectAgent;
3
+ /** Install once and expose on window. Idempotent. */
4
+ export declare function installInspectAgent(events?: AgentEvents): InspectAgent;
5
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/inspect/agent/install.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,WAAW,EAAa,YAAY,EAAE,MAAM,YAAY,CAAC;AAUvE,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,WAAgB,GAAG,YAAY,CA0EzE;AAED,qDAAqD;AACrD,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,YAAY,CAKtE"}
@@ -0,0 +1,99 @@
1
+ // Assembles the in-page inspect agent and exposes it as window.__uglyInspectAgent.
2
+ // The native shell (Electron preload / WKWebView / Android WebView) injects the
3
+ // built bundle at document-start and bridges these methods to the `inspect.*`
4
+ // native channels. Pure per-document object — see agent/types.ts.
5
+ import { RingBuffer } from '../../client/inspect/buffer.js';
6
+ import { installConsoleCapture } from './console.js';
7
+ import { captureDom } from './dom.js';
8
+ import { elementDetail } from './element.js';
9
+ import { evaluate } from './eval.js';
10
+ import { installNetworkCapture } from './network.js';
11
+ import { NodeRegistry } from './nodeRegistry.js';
12
+ import { installPicker } from './picker.js';
13
+ import { selfProfile } from './profile.js';
14
+ import { expand as expandValue, ObjectRegistry } from './serialize.js';
15
+ import { captureStorage } from './storage.js';
16
+ import { installVitals } from './vitals.js';
17
+ const BUFFER_SIZE = 1000;
18
+ function nowMs() {
19
+ if (typeof performance !== 'undefined' && performance.now)
20
+ return performance.timeOrigin + performance.now();
21
+ return Date.now();
22
+ }
23
+ export function createInspectAgent(events = {}) {
24
+ const objects = new ObjectRegistry();
25
+ const nodes = new NodeRegistry();
26
+ const nodeIdFor = (n) => nodes.idFor(n);
27
+ const consoleBuf = new RingBuffer(BUFFER_SIZE);
28
+ const networkBuf = new RingBuffer(BUFFER_SIZE);
29
+ let pickedNode = null;
30
+ let lastEval = undefined;
31
+ const stopConsole = installConsoleCapture({
32
+ buffer: consoleBuf,
33
+ registry: objects,
34
+ nodeIdFor,
35
+ onEntry: (e) => events.onConsole?.(e),
36
+ now: nowMs,
37
+ });
38
+ const stopNetwork = installNetworkCapture({
39
+ buffer: networkBuf,
40
+ onEntry: (e) => events.onNetwork?.(e),
41
+ now: nowMs,
42
+ });
43
+ const vitals = installVitals({ nodeIdFor, now: nowMs });
44
+ const picker = installPicker({
45
+ reg: nodes,
46
+ onPicked: (p) => events.onPicked?.(p),
47
+ setPickedNode: (n) => (pickedNode = n),
48
+ });
49
+ const agent = {
50
+ meta() {
51
+ return {
52
+ url: typeof location !== 'undefined' ? location.href : '',
53
+ title: typeof document !== 'undefined' ? document.title : '',
54
+ isUglyApp: typeof window !== 'undefined' && '__uglyInspect' in window,
55
+ viewport: {
56
+ w: typeof window !== 'undefined' ? window.innerWidth : 0,
57
+ h: typeof window !== 'undefined' ? window.innerHeight : 0,
58
+ dpr: typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1,
59
+ },
60
+ };
61
+ },
62
+ consoleBuffer: (sinceSeq) => sinceSeq == null ? consoleBuf.all() : consoleBuf.all().filter((e) => e.seq > sinceSeq),
63
+ networkBuffer: (sinceTs) => sinceTs == null ? networkBuf.all() : networkBuf.since(sinceTs, (e) => e.ts),
64
+ evaluate: (expression, opts) => evaluate(expression, { registry: objects, nodeIdFor, now: nowMs, getPicked: () => pickedNode, getLast: () => lastEval, setLast: (v) => (lastEval = v) }, opts),
65
+ expand: (objectId) => ({ entries: expandValue(objects.get(objectId), { registry: objects, nodeIdFor }) }),
66
+ domCapture: (maxDepth) => captureDom(nodes, maxDepth, nowMs),
67
+ element: (opts) => elementDetail(nodes, opts),
68
+ highlight: (nodeId) => picker.highlight(nodeId),
69
+ setPicker: (enabled) => picker.setEnabled(enabled),
70
+ vitals: () => vitals.read(),
71
+ profile: (durationMs) => selfProfile(durationMs, nowMs),
72
+ storage: () => captureStorage(),
73
+ reset: () => {
74
+ objects.clear();
75
+ nodes.clear();
76
+ consoleBuf.clear();
77
+ networkBuf.clear();
78
+ pickedNode = null;
79
+ lastEval = undefined;
80
+ },
81
+ stop: () => {
82
+ stopConsole();
83
+ stopNetwork();
84
+ vitals.stop();
85
+ picker.destroy();
86
+ },
87
+ };
88
+ return agent;
89
+ }
90
+ /** Install once and expose on window. Idempotent. */
91
+ export function installInspectAgent(events) {
92
+ if (typeof window !== 'undefined' && window.__uglyInspectAgent)
93
+ return window.__uglyInspectAgent;
94
+ const agent = createInspectAgent(events);
95
+ if (typeof window !== 'undefined')
96
+ window.__uglyInspectAgent = agent;
97
+ return agent;
98
+ }
99
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/inspect/agent/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { RingBuffer } from '../../client/inspect/buffer.js';
2
+ import type { NetworkEntry } from '../protocol.js';
3
+ export interface NetworkCaptureDeps {
4
+ buffer: RingBuffer<NetworkEntry>;
5
+ onEntry?: (e: NetworkEntry) => void;
6
+ now: () => number;
7
+ }
8
+ export declare function installNetworkCapture(deps: NetworkCaptureDeps): () => void;
9
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../src/inspect/agent/network.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACpC,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAID,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAoF1E"}