@petukhovart/agent-view 0.9.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.claude-plugin/plugin.json +21 -21
  2. package/LICENSE +21 -21
  3. package/README.md +38 -13
  4. package/dist/cdp/network-stream.d.ts +27 -0
  5. package/dist/cdp/network-stream.d.ts.map +1 -0
  6. package/dist/cdp/network-stream.js +336 -0
  7. package/dist/cdp/network-stream.js.map +1 -0
  8. package/dist/cdp/transport.d.ts.map +1 -1
  9. package/dist/cdp/transport.js +167 -8
  10. package/dist/cdp/transport.js.map +1 -1
  11. package/dist/cdp/types.d.ts +187 -0
  12. package/dist/cdp/types.d.ts.map +1 -1
  13. package/dist/cdp/types.js +55 -0
  14. package/dist/cdp/types.js.map +1 -1
  15. package/dist/cli/commands/network.d.ts +19 -0
  16. package/dist/cli/commands/network.d.ts.map +1 -0
  17. package/dist/cli/commands/network.js +55 -0
  18. package/dist/cli/commands/network.js.map +1 -0
  19. package/dist/cli/index.js +23 -1
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/config/manager.d.ts.map +1 -1
  22. package/dist/config/manager.js +6 -0
  23. package/dist/config/manager.js.map +1 -1
  24. package/dist/config/types.d.ts +8 -0
  25. package/dist/config/types.d.ts.map +1 -1
  26. package/dist/inspectors/network/index.d.ts +19 -0
  27. package/dist/inspectors/network/index.d.ts.map +1 -0
  28. package/dist/inspectors/network/index.js +169 -0
  29. package/dist/inspectors/network/index.js.map +1 -0
  30. package/dist/server/server.d.ts +12 -0
  31. package/dist/server/server.d.ts.map +1 -1
  32. package/dist/server/server.js +191 -17
  33. package/dist/server/server.js.map +1 -1
  34. package/package.json +9 -8
  35. package/skills/verify/SKILL.md +319 -292
  36. package/skills/verify-recipe/SKILL.md +286 -286
  37. package/dist/cdp/console-stream.d.ts +0 -35
  38. package/dist/cdp/console-stream.d.ts.map +0 -1
  39. package/dist/cdp/console-stream.js +0 -103
  40. package/dist/cdp/console-stream.js.map +0 -1
  41. package/dist/inspectors/dom.d.ts +0 -17
  42. package/dist/inspectors/dom.d.ts.map +0 -1
  43. package/dist/inspectors/dom.js +0 -131
  44. package/dist/inspectors/dom.js.map +0 -1
  45. package/dist/inspectors/scene/pixi.d.ts +0 -3
  46. package/dist/inspectors/scene/pixi.d.ts.map +0 -1
  47. package/dist/inspectors/scene/pixi.js +0 -52
  48. package/dist/inspectors/scene/pixi.js.map +0 -1
@@ -1,103 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"console-stream.js","sourceRoot":"","sources":["../../src/cdp/console-stream.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,131 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/inspectors/dom.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { SceneExtractor } from './types.js';
2
- export declare const pixiExtractor: SceneExtractor;
3
- //# sourceMappingURL=pixi.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,52 +0,0 @@
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
@@ -1 +0,0 @@
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"}