@petukhovart/agent-view 0.13.0 → 0.13.1

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.
@@ -1,21 +1,21 @@
1
- {
2
- "name": "agent-view",
3
- "description": "Visual verification CLI for desktop apps (Electron/Tauri/Browser) via Chrome DevTools Protocol. Ships the verify skill: run DOM, screenshot, eval, watch, console and log-feed checks against a live app.",
4
- "version": "0.13.0",
5
- "keywords": [
6
- "cdp",
7
- "electron",
8
- "tauri",
9
- "desktop",
10
- "testing",
11
- "accessibility",
12
- "screenshot",
13
- "automation"
14
- ],
15
- "author": {
16
- "name": "PetukhovArt"
17
- },
18
- "homepage": "https://github.com/PetukhovArt/agent-view",
19
- "repository": "https://github.com/PetukhovArt/agent-view",
20
- "license": "MIT"
21
- }
1
+ {
2
+ "name": "agent-view",
3
+ "description": "Visual verification CLI for desktop apps (Electron/Tauri/Browser) via Chrome DevTools Protocol. Ships the verify skill: run DOM, screenshot, eval, watch, console and log-feed checks against a live app.",
4
+ "version": "0.13.0",
5
+ "keywords": [
6
+ "cdp",
7
+ "electron",
8
+ "tauri",
9
+ "desktop",
10
+ "testing",
11
+ "accessibility",
12
+ "screenshot",
13
+ "automation"
14
+ ],
15
+ "author": {
16
+ "name": "PetukhovArt"
17
+ },
18
+ "homepage": "https://github.com/PetukhovArt/agent-view",
19
+ "repository": "https://github.com/PetukhovArt/agent-view",
20
+ "license": "MIT"
21
+ }
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Artem Petukhov
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Artem Petukhov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -322,7 +322,7 @@ Full form with all optional fields:
322
322
  | `consoleTargets` | no | Target types `agent-view console` auto-attaches to on first call. Any subset of `["page", "iframe", "shared_worker", "service_worker", "worker"]`. Default `["page", "shared_worker", "service_worker"]` |
323
323
  | `captureBody` | no | `true` to capture response bodies and request payloads for `agent-view network`. Off by default; opt-in since bodies can carry tokens/PII. WebSocket frame payloads are visible regardless |
324
324
  | `networkBufferSize` | no | Per-target network ring capacity. Positive integer. Default `200` (smaller than console — entries are heavier) |
325
- | `logFile` | no | Feed file for `agent-view logs`. Relative paths resolve against the project root. Default `.agent-view/console.log` (gitignore it) |
325
+ | `logFile` | no | Feed file for `agent-view logs`. Relative paths resolve against the project root. Default `.agent-view/console.log` (gitignore it). Keep it per-checkout: two ports recording into one file is refused |
326
326
  | `logMaxBytes` | no | Feed size cap in bytes; on overflow it rotates once to `<file>.prev`. Default `8388608` (8 MB) |
327
327
 
328
328
  ---
@@ -0,0 +1,35 @@
1
+ import type { RuntimeSession, ConsoleMessage, ConsoleLevel, TargetType } from './types.js';
2
+ export type ConsoleStreamOptions = {
3
+ /** Per-target ring size. Default 500. */
4
+ capacity?: number;
5
+ };
6
+ export type ConsoleFilter = {
7
+ since?: number;
8
+ level?: ReadonlySet<ConsoleLevel>;
9
+ targetId?: string;
10
+ };
11
+ export type StampedConsoleMessage = ConsoleMessage & {
12
+ targetId: string;
13
+ targetType: TargetType;
14
+ };
15
+ /**
16
+ * Multi-target console subscription with per-target ring buffer.
17
+ * Server owns one instance for its lifetime; commands attach/drain.
18
+ */
19
+ export declare class ConsoleStream {
20
+ private readonly capacity;
21
+ private readonly targets;
22
+ private readonly extraSubscribers;
23
+ constructor(opts?: ConsoleStreamOptions);
24
+ get attachedCount(): number;
25
+ /** Idempotent per target id — second attach for same id is a no-op. */
26
+ attach(session: RuntimeSession): void;
27
+ detach(targetId?: string): void;
28
+ clear(targetId?: string): void;
29
+ /** Snapshot of buffered messages, sorted by timestamp (oldest first). */
30
+ drain(filter?: ConsoleFilter): StampedConsoleMessage[];
31
+ /** Subscribe to live messages. Returns disposer. Used by --follow streaming. */
32
+ subscribe(handler: (msg: StampedConsoleMessage) => void): () => void;
33
+ private snapshot;
34
+ }
35
+ //# sourceMappingURL=console-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-stream.d.ts","sourceRoot":"","sources":["../../src/cdp/console-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI1F,MAAM,MAAM,oBAAoB,GAAG;IACjC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG;IACnD,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAUD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkD;gBAEvE,IAAI,GAAE,oBAAyB;IAI3C,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,uEAAuE;IACvE,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IA6BrC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAY/B,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAc9B,yEAAyE;IACzE,KAAK,CAAC,MAAM,GAAE,aAAkB,GAAG,qBAAqB,EAAE;IAe1D,gFAAgF;IAChF,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,IAAI,GAAG,MAAM,IAAI;IAKpE,OAAO,CAAC,QAAQ;CAIjB"}
@@ -0,0 +1,103 @@
1
+ const DEFAULT_CAPACITY = 500;
2
+ /**
3
+ * Multi-target console subscription with per-target ring buffer.
4
+ * Server owns one instance for its lifetime; commands attach/drain.
5
+ */
6
+ export class ConsoleStream {
7
+ capacity;
8
+ targets = new Map();
9
+ extraSubscribers = new Set();
10
+ constructor(opts = {}) {
11
+ this.capacity = opts.capacity ?? DEFAULT_CAPACITY;
12
+ }
13
+ get attachedCount() {
14
+ return this.targets.size;
15
+ }
16
+ /** Idempotent per target id — second attach for same id is a no-op. */
17
+ attach(session) {
18
+ const id = session.target.id;
19
+ if (this.targets.has(id))
20
+ return;
21
+ const entry = {
22
+ session,
23
+ ring: new Array(this.capacity),
24
+ cursor: 0,
25
+ full: false,
26
+ dispose: () => { },
27
+ };
28
+ entry.dispose = session.onConsole((msg) => {
29
+ const stamped = {
30
+ ...msg,
31
+ targetId: id,
32
+ targetType: session.target.type,
33
+ };
34
+ entry.ring[entry.cursor] = stamped;
35
+ entry.cursor = (entry.cursor + 1) % this.capacity;
36
+ if (entry.cursor === 0)
37
+ entry.full = true;
38
+ for (const sub of this.extraSubscribers) {
39
+ try {
40
+ sub(stamped);
41
+ }
42
+ catch { /* ignore */ }
43
+ }
44
+ });
45
+ this.targets.set(id, entry);
46
+ }
47
+ detach(targetId) {
48
+ if (targetId === undefined) {
49
+ for (const t of this.targets.values())
50
+ t.dispose();
51
+ this.targets.clear();
52
+ return;
53
+ }
54
+ const t = this.targets.get(targetId);
55
+ if (!t)
56
+ return;
57
+ t.dispose();
58
+ this.targets.delete(targetId);
59
+ }
60
+ clear(targetId) {
61
+ if (targetId === undefined) {
62
+ for (const t of this.targets.values()) {
63
+ t.cursor = 0;
64
+ t.full = false;
65
+ }
66
+ return;
67
+ }
68
+ const t = this.targets.get(targetId);
69
+ if (!t)
70
+ return;
71
+ t.cursor = 0;
72
+ t.full = false;
73
+ }
74
+ /** Snapshot of buffered messages, sorted by timestamp (oldest first). */
75
+ drain(filter = {}) {
76
+ const result = [];
77
+ for (const [id, entry] of this.targets) {
78
+ if (filter.targetId && filter.targetId !== id)
79
+ continue;
80
+ const msgs = this.snapshot(entry);
81
+ for (const m of msgs) {
82
+ if (filter.since !== undefined && m.ts < filter.since)
83
+ continue;
84
+ if (filter.level && !filter.level.has(m.level))
85
+ continue;
86
+ result.push(m);
87
+ }
88
+ }
89
+ result.sort((a, b) => a.ts - b.ts);
90
+ return result;
91
+ }
92
+ /** Subscribe to live messages. Returns disposer. Used by --follow streaming. */
93
+ subscribe(handler) {
94
+ this.extraSubscribers.add(handler);
95
+ return () => this.extraSubscribers.delete(handler);
96
+ }
97
+ snapshot(entry) {
98
+ if (!entry.full)
99
+ return entry.ring.slice(0, entry.cursor);
100
+ return [...entry.ring.slice(entry.cursor), ...entry.ring.slice(0, entry.cursor)];
101
+ }
102
+ }
103
+ //# sourceMappingURL=console-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-stream.js","sourceRoot":"","sources":["../../src/cdp/console-stream.ts"],"names":[],"mappings":"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"}
@@ -753,10 +753,10 @@ export async function connectToPage(port, target, cache) {
753
753
  const { object } = await DOM.resolveNode({ backendNodeId });
754
754
  const climbed = await Runtime.callFunctionOn({
755
755
  objectId: object.objectId,
756
- functionDeclaration: `function(levels) {
757
- let el = this.nodeType === Node.TEXT_NODE ? this.parentElement : this;
758
- for (let i = 0; i < levels && el.parentElement; i++) el = el.parentElement;
759
- return el;
756
+ functionDeclaration: `function(levels) {
757
+ let el = this.nodeType === Node.TEXT_NODE ? this.parentElement : this;
758
+ for (let i = 0; i < levels && el.parentElement; i++) el = el.parentElement;
759
+ return el;
760
760
  }`,
761
761
  arguments: [{ value: levels }],
762
762
  });
@@ -907,13 +907,13 @@ export async function connectToPage(port, target, cache) {
907
907
  await DOM.focus({ backendNodeId });
908
908
  await Runtime.callFunctionOn({
909
909
  objectId: object.objectId,
910
- functionDeclaration: `function(val) {
911
- const nativeSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')?.set
912
- || Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value')?.set;
913
- if (nativeSetter) nativeSetter.call(this, val);
914
- else this.value = val;
915
- this.dispatchEvent(new Event('input', { bubbles: true }));
916
- this.dispatchEvent(new Event('change', { bubbles: true }));
910
+ functionDeclaration: `function(val) {
911
+ const nativeSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')?.set
912
+ || Object.getOwnPropertyDescriptor(window.HTMLTextAreaElement.prototype, 'value')?.set;
913
+ if (nativeSetter) nativeSetter.call(this, val);
914
+ else this.value = val;
915
+ this.dispatchEvent(new Event('input', { bubbles: true }));
916
+ this.dispatchEvent(new Event('change', { bubbles: true }));
917
917
  }`,
918
918
  arguments: [{ value }],
919
919
  });
@@ -0,0 +1,17 @@
1
+ import type { AXNode } from '../cdp/types.js';
2
+ export type RefEntry = {
3
+ ref: number;
4
+ backendDOMNodeId: number;
5
+ };
6
+ export type DOMSnapshotOptions = {
7
+ filter?: string;
8
+ depth?: number;
9
+ startRef?: number;
10
+ };
11
+ export type DOMSnapshotResult = {
12
+ text: string;
13
+ refs: RefEntry[];
14
+ nextRef: number;
15
+ };
16
+ export declare function formatAccessibilityTree(nodes: AXNode[], options?: DOMSnapshotOptions): DOMSnapshotResult;
17
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/inspectors/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAgInB"}
@@ -0,0 +1,131 @@
1
+ export function formatAccessibilityTree(nodes, options = {}) {
2
+ const { filter, depth: maxDepth } = options;
3
+ const refs = [];
4
+ let nextRef = options.startRef ?? 1;
5
+ const lines = [];
6
+ const nodeMap = new Map();
7
+ for (const node of nodes) {
8
+ nodeMap.set(node.nodeId, node);
9
+ }
10
+ const rootNodeId = nodes[0]?.nodeId;
11
+ if (!rootNodeId)
12
+ return { text: '(empty)', refs: [], nextRef };
13
+ const ALWAYS_SKIP_ROLES = new Set(['InlineTextBox']);
14
+ const SKIP_WHEN_EMPTY_ROLES = new Set(['none', 'generic', 'StaticText']);
15
+ // WAI-ARIA-like fallback: when a node has no accessible name,
16
+ // walk its children to find the first non-empty name, description, or title.
17
+ // This handles cases like v-list-item with title on a child v-icon.
18
+ function resolveNameFromChildren(node, depthLimit = 5) {
19
+ if (depthLimit <= 0 || !node.childIds)
20
+ return '';
21
+ for (const childId of node.childIds) {
22
+ const child = nodeMap.get(childId);
23
+ if (!child)
24
+ continue;
25
+ // Check child's own name
26
+ if (child.name?.value)
27
+ return child.name.value;
28
+ // Check description/title in AX properties
29
+ const desc = child.properties?.find(p => p.name === 'description');
30
+ if (desc?.value?.value && typeof desc.value.value === 'string')
31
+ return desc.value.value;
32
+ // Recurse into grandchildren
33
+ const deeper = resolveNameFromChildren(child, depthLimit - 1);
34
+ if (deeper)
35
+ return deeper;
36
+ }
37
+ return '';
38
+ }
39
+ // Collect all descendant text for heuristic filter matching.
40
+ // Searches name and description of all descendants, not just current node.
41
+ function getDescendantText(node, depthLimit = 10) {
42
+ const parts = [];
43
+ function collect(n, depth) {
44
+ if (depth > depthLimit || !n.childIds)
45
+ return;
46
+ for (const childId of n.childIds) {
47
+ const child = nodeMap.get(childId);
48
+ if (!child)
49
+ continue;
50
+ if (child.name?.value)
51
+ parts.push(child.name.value);
52
+ const desc = child.properties?.find(p => p.name === 'description');
53
+ if (desc?.value?.value && typeof desc.value.value === 'string')
54
+ parts.push(desc.value.value);
55
+ collect(child, depth + 1);
56
+ }
57
+ }
58
+ collect(node, 0);
59
+ return parts.join(' ').toLowerCase();
60
+ }
61
+ function hasMatchingDescendant(node, lowerFilter) {
62
+ if (!node.childIds)
63
+ return false;
64
+ for (const childId of node.childIds) {
65
+ const child = nodeMap.get(childId);
66
+ if (!child)
67
+ continue;
68
+ const childRole = child.role?.value ?? '';
69
+ if (ALWAYS_SKIP_ROLES.has(childRole))
70
+ continue;
71
+ const childName = child.name?.value?.toLowerCase() ?? '';
72
+ if (childName.includes(lowerFilter) || childRole.toLowerCase().includes(lowerFilter))
73
+ return true;
74
+ if (hasMatchingDescendant(child, lowerFilter))
75
+ return true;
76
+ }
77
+ return false;
78
+ }
79
+ const HARD_MAX_DEPTH = 100;
80
+ function walk(nodeId, depth, indent) {
81
+ if (indent > HARD_MAX_DEPTH)
82
+ return;
83
+ if (maxDepth !== undefined && indent > maxDepth)
84
+ return;
85
+ const node = nodeMap.get(nodeId);
86
+ if (!node)
87
+ return;
88
+ const role = node.role?.value ?? '';
89
+ const ownName = node.name?.value ?? '';
90
+ // Fallback: resolve name from children when node has no accessible name
91
+ const fallbackName = !ownName ? resolveNameFromChildren(node) : '';
92
+ const name = ownName || fallbackName;
93
+ if (ALWAYS_SKIP_ROLES.has(role))
94
+ return;
95
+ const skip = SKIP_WHEN_EMPTY_ROLES.has(role) && !name;
96
+ if (!skip) {
97
+ if (filter) {
98
+ const lowerFilter = filter.toLowerCase();
99
+ const matchesName = name.toLowerCase().includes(lowerFilter);
100
+ const matchesRole = role.toLowerCase().includes(lowerFilter);
101
+ // Heuristic: also search descendant names/descriptions
102
+ const matchesDescendants = !matchesName && !matchesRole
103
+ ? getDescendantText(node, 10).includes(lowerFilter)
104
+ : false;
105
+ if (!matchesName && !matchesRole && !matchesDescendants && !hasMatchingDescendant(node, lowerFilter)) {
106
+ return;
107
+ }
108
+ }
109
+ const ref = nextRef++;
110
+ if (node.backendDOMNodeId) {
111
+ refs.push({ ref, backendDOMNodeId: node.backendDOMNodeId });
112
+ }
113
+ const padding = ' '.repeat(indent);
114
+ const isFallback = !ownName && fallbackName;
115
+ const nameStr = name ? ` "${name}"${isFallback ? ' [fallback]' : ''}` : '';
116
+ lines.push(`${padding}${role}${nameStr} [ref=${ref}]`);
117
+ }
118
+ if (node.childIds) {
119
+ for (const childId of node.childIds) {
120
+ walk(childId, depth + 1, skip ? indent : indent + 1);
121
+ }
122
+ }
123
+ }
124
+ walk(rootNodeId, 0, 0);
125
+ return {
126
+ text: lines.join('\n') || '(no matching elements)',
127
+ refs,
128
+ nextRef,
129
+ };
130
+ }
131
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/inspectors/dom.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,uBAAuB,CACrC,KAAe,EACf,UAA8B,EAAE;IAEhC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAC3C,MAAM,IAAI,GAAe,EAAE,CAAA;IAC3B,IAAI,OAAO,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAA;IACnC,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAA;IACnC,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAA;IAE9D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;IACpD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IAExE,8DAA8D;IAC9D,6EAA6E;IAC7E,oEAAoE;IACpE,SAAS,uBAAuB,CAAC,IAAY,EAAE,UAAU,GAAG,CAAC;QAC3D,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAA;QAChD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAClC,IAAI,CAAC,KAAK;gBAAE,SAAQ;YACpB,yBAAyB;YACzB,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK;gBAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAA;YAC9C,2CAA2C;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;YAClE,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAA;YACvF,6BAA6B;YAC7B,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,CAAC,CAAA;YAC7D,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAA;QAC3B,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,6DAA6D;IAC7D,2EAA2E;IAC3E,SAAS,iBAAiB,CAAC,IAAY,EAAE,UAAU,GAAG,EAAE;QACtD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,SAAS,OAAO,CAAC,CAAS,EAAE,KAAa;YACvC,IAAI,KAAK,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ;gBAAE,OAAM;YAC7C,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAClC,IAAI,CAAC,KAAK;oBAAE,SAAQ;gBACpB,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK;oBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACnD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAA;gBAClE,IAAI,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC5F,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IACtC,CAAC;IAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,WAAmB;QAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAA;QAChC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAClC,IAAI,CAAC,KAAK;gBAAE,SAAQ;YACpB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;YACzC,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAQ;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;YACxD,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,OAAO,IAAI,CAAA;YACjG,IAAI,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC;gBAAE,OAAO,IAAI,CAAA;QAC5D,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,cAAc,GAAG,GAAG,CAAA;IAE1B,SAAS,IAAI,CAAC,MAAc,EAAE,KAAa,EAAE,MAAc;QACzD,IAAI,MAAM,GAAG,cAAc;YAAE,OAAM;QACnC,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ;YAAE,OAAM;QAEvD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;QACtC,wEAAwE;QACxE,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAClE,MAAM,IAAI,GAAG,OAAO,IAAI,YAAY,CAAA;QAEpC,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAM;QAEvC,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;QAErD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;gBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;gBAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;gBAC5D,uDAAuD;gBACvD,MAAM,kBAAkB,GAAG,CAAC,WAAW,IAAI,CAAC,WAAW;oBACrD,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACnD,CAAC,CAAC,KAAK,CAAA;gBACT,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,IAAI,CAAC,kBAAkB,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;oBACrG,OAAM;gBACR,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,OAAO,EAAE,CAAA;YACrB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;YAC7D,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACnC,MAAM,UAAU,GAAG,CAAC,OAAO,IAAI,YAAY,CAAA;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC1E,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,SAAS,GAAG,GAAG,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAEtB,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,wBAAwB;QAClD,IAAI;QACJ,OAAO;KACR,CAAA;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SceneExtractor } from './types.js';
2
+ export declare const pixiExtractor: SceneExtractor;
3
+ //# sourceMappingURL=pixi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixi.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/pixi.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,YAAY,CAAA;AA8C3D,eAAO,MAAM,aAAa,EAAE,cAM3B,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { WebGLEngine } from '../../types.js';
2
+ // Depth limit is also enforced in JS to guard against stack overflow
3
+ // in the target process for pathologically deep trees
4
+ const EXTRACT_JS = `
5
+ (function() {
6
+ const devtools = window.__PIXI_DEVTOOLS__;
7
+ if (!devtools) return null;
8
+ const app = devtools.app || devtools.stage?.parent;
9
+ if (!app) return null;
10
+ const stage = app.stage || devtools.stage;
11
+ if (!stage) return null;
12
+
13
+ function serialize(node, depth) {
14
+ if (depth > 100) return null;
15
+ const result = {
16
+ type: node.constructor?.name || 'Unknown',
17
+ name: node.label || node.name || '',
18
+ x: Math.round(node.x || 0),
19
+ y: Math.round(node.y || 0),
20
+ visible: node.visible !== false,
21
+ tint: typeof node.tint === 'number' ? '#' + node.tint.toString(16).padStart(6, '0') : '0xffffff',
22
+ alpha: node.alpha ?? 1,
23
+ scaleX: node.scale?.x ?? 1,
24
+ scaleY: node.scale?.y ?? 1,
25
+ rotation: Math.round((node.rotation || 0) * 180 / Math.PI * 100) / 100,
26
+ width: Math.round(node.width || 0),
27
+ height: Math.round(node.height || 0),
28
+ };
29
+ const kids = node.children || [];
30
+ if (kids.length > 0) {
31
+ result.children = kids.map(c => serialize(c, depth + 1)).filter(Boolean);
32
+ }
33
+ return result;
34
+ }
35
+
36
+ return serialize(stage, 0);
37
+ })()
38
+ `;
39
+ function isSceneNode(val) {
40
+ if (!val || typeof val !== 'object')
41
+ return false;
42
+ const n = val;
43
+ return typeof n.type === 'string' && typeof n.name === 'string';
44
+ }
45
+ export const pixiExtractor = {
46
+ engine: WebGLEngine.Pixi,
47
+ async extract(conn) {
48
+ const result = await conn.evaluate(EXTRACT_JS);
49
+ return isSceneNode(result) ? result : null;
50
+ },
51
+ };
52
+ //# sourceMappingURL=pixi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixi.js","sourceRoot":"","sources":["../../../src/inspectors/scene/pixi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAI5C,qEAAqE;AACrE,sDAAsD;AACtD,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkClB,CAAA;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACjD,MAAM,CAAC,GAAG,GAA8B,CAAA;IACxC,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAA;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,MAAM,EAAE,WAAW,CAAC,IAAI;IACxB,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC9C,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5C,CAAC;CACF,CAAA"}
@@ -31,17 +31,16 @@ export declare class AgentViewServer {
31
31
  private sceneCache;
32
32
  private domTextCache;
33
33
  private axTreeCache;
34
- private consoleStream;
35
- private networkStream;
36
- private networkRefs;
37
- private networkNextRef;
34
+ private portStates;
38
35
  private token;
39
36
  private activeWatches;
40
- private logRecorder;
41
37
  private readonly handlers;
42
38
  private readonly streamingCommands;
43
39
  private readonly validCommands;
44
40
  start(): Promise<void>;
41
+ /** Per-port state bucket, created on first use. */
42
+ private stateFor;
43
+ private isAnyRecording;
45
44
  private resetIdleTimer;
46
45
  private handleSocket;
47
46
  private processRequest;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}