@petukhovart/agent-view 0.1.0 → 0.5.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 (131) hide show
  1. package/.claude-plugin/marketplace.json +14 -0
  2. package/.claude-plugin/plugin.json +13 -2
  3. package/README.md +211 -61
  4. package/dist/adapters/browser.d.ts.map +1 -1
  5. package/dist/adapters/browser.js +11 -11
  6. package/dist/adapters/browser.js.map +1 -1
  7. package/dist/adapters/electron.d.ts.map +1 -1
  8. package/dist/adapters/electron.js +11 -11
  9. package/dist/adapters/electron.js.map +1 -1
  10. package/dist/adapters/tauri.d.ts.map +1 -1
  11. package/dist/adapters/tauri.js +11 -11
  12. package/dist/adapters/tauri.js.map +1 -1
  13. package/dist/adapters/types.d.ts +5 -2
  14. package/dist/adapters/types.d.ts.map +1 -1
  15. package/dist/cdp/_tests/console-stream.d.ts +35 -0
  16. package/dist/cdp/_tests/console-stream.d.ts.map +1 -0
  17. package/dist/cdp/_tests/console-stream.js +103 -0
  18. package/dist/cdp/_tests/console-stream.js.map +1 -0
  19. package/dist/cdp/ax-cache.d.ts +16 -0
  20. package/dist/cdp/ax-cache.d.ts.map +1 -0
  21. package/dist/cdp/ax-cache.js +31 -0
  22. package/dist/cdp/ax-cache.js.map +1 -0
  23. package/dist/cdp/console-stream.d.ts +35 -0
  24. package/dist/cdp/console-stream.d.ts.map +1 -0
  25. package/dist/cdp/console-stream.js +103 -0
  26. package/dist/cdp/console-stream.js.map +1 -0
  27. package/dist/cdp/transport.d.ts +5 -2
  28. package/dist/cdp/transport.d.ts.map +1 -1
  29. package/dist/cdp/transport.js +309 -26
  30. package/dist/cdp/transport.js.map +1 -1
  31. package/dist/cdp/types.d.ts +109 -8
  32. package/dist/cdp/types.d.ts.map +1 -1
  33. package/dist/cdp/types.js +35 -1
  34. package/dist/cdp/types.js.map +1 -1
  35. package/dist/cli/commands/console.d.ts +12 -0
  36. package/dist/cli/commands/console.d.ts.map +1 -0
  37. package/dist/cli/commands/console.js +32 -0
  38. package/dist/cli/commands/console.js.map +1 -0
  39. package/dist/cli/commands/dom.d.ts +5 -0
  40. package/dist/cli/commands/dom.d.ts.map +1 -1
  41. package/dist/cli/commands/dom.js +5 -0
  42. package/dist/cli/commands/dom.js.map +1 -1
  43. package/dist/cli/commands/drag.d.ts +13 -0
  44. package/dist/cli/commands/drag.d.ts.map +1 -0
  45. package/dist/cli/commands/drag.js +72 -0
  46. package/dist/cli/commands/drag.js.map +1 -0
  47. package/dist/cli/commands/eval.d.ts +9 -0
  48. package/dist/cli/commands/eval.d.ts.map +1 -0
  49. package/dist/cli/commands/eval.js +30 -0
  50. package/dist/cli/commands/eval.js.map +1 -0
  51. package/dist/cli/commands/scene.d.ts +1 -0
  52. package/dist/cli/commands/scene.d.ts.map +1 -1
  53. package/dist/cli/commands/scene.js +2 -0
  54. package/dist/cli/commands/scene.js.map +1 -1
  55. package/dist/cli/commands/screenshot.d.ts +2 -0
  56. package/dist/cli/commands/screenshot.d.ts.map +1 -1
  57. package/dist/cli/commands/screenshot.js +6 -0
  58. package/dist/cli/commands/screenshot.js.map +1 -1
  59. package/dist/cli/commands/snap.d.ts +1 -0
  60. package/dist/cli/commands/snap.d.ts.map +1 -1
  61. package/dist/cli/commands/snap.js +2 -0
  62. package/dist/cli/commands/snap.js.map +1 -1
  63. package/dist/cli/commands/targets.d.ts +7 -0
  64. package/dist/cli/commands/targets.d.ts.map +1 -0
  65. package/dist/cli/commands/targets.js +30 -0
  66. package/dist/cli/commands/targets.js.map +1 -0
  67. package/dist/cli/commands/watch.d.ts +12 -0
  68. package/dist/cli/commands/watch.d.ts.map +1 -0
  69. package/dist/cli/commands/watch.js +233 -0
  70. package/dist/cli/commands/watch.js.map +1 -0
  71. package/dist/cli/index.js +86 -1
  72. package/dist/cli/index.js.map +1 -1
  73. package/dist/config/manager.d.ts.map +1 -1
  74. package/dist/config/manager.js +11 -1
  75. package/dist/config/manager.js.map +1 -1
  76. package/dist/config/types.d.ts +11 -3
  77. package/dist/config/types.d.ts.map +1 -1
  78. package/dist/inspectors/dom/index.d.ts +30 -0
  79. package/dist/inspectors/dom/index.d.ts.map +1 -0
  80. package/dist/inspectors/dom/index.js +283 -0
  81. package/dist/inspectors/dom/index.js.map +1 -0
  82. package/dist/inspectors/scene/adapters/pixi/adapter.d.ts +3 -0
  83. package/dist/inspectors/scene/adapters/pixi/adapter.d.ts.map +1 -0
  84. package/dist/inspectors/scene/adapters/pixi/adapter.js +51 -0
  85. package/dist/inspectors/scene/adapters/pixi/adapter.js.map +1 -0
  86. package/dist/inspectors/scene/adapters/pixi/index.d.ts +2 -0
  87. package/dist/inspectors/scene/adapters/pixi/index.d.ts.map +1 -0
  88. package/dist/inspectors/scene/adapters/pixi/index.js +2 -0
  89. package/dist/inspectors/scene/adapters/pixi/index.js.map +1 -0
  90. package/dist/inspectors/scene/adapters/pixi/injection.d.ts +39 -0
  91. package/dist/inspectors/scene/adapters/pixi/injection.d.ts.map +1 -0
  92. package/dist/inspectors/scene/adapters/pixi/injection.js +41 -0
  93. package/dist/inspectors/scene/adapters/pixi/injection.js.map +1 -0
  94. package/dist/inspectors/scene/formatter.d.ts +0 -1
  95. package/dist/inspectors/scene/formatter.d.ts.map +1 -1
  96. package/dist/inspectors/scene/formatter.js +100 -43
  97. package/dist/inspectors/scene/formatter.js.map +1 -1
  98. package/dist/inspectors/scene/index.d.ts +4 -4
  99. package/dist/inspectors/scene/index.d.ts.map +1 -1
  100. package/dist/inspectors/scene/index.js +8 -5
  101. package/dist/inspectors/scene/index.js.map +1 -1
  102. package/dist/inspectors/scene/pixi.js.map +1 -1
  103. package/dist/inspectors/scene/registry.d.ts +2 -2
  104. package/dist/inspectors/scene/registry.d.ts.map +1 -1
  105. package/dist/inspectors/scene/registry.js +8 -8
  106. package/dist/inspectors/scene/registry.js.map +1 -1
  107. package/dist/inspectors/scene/types.d.ts +6 -10
  108. package/dist/inspectors/scene/types.d.ts.map +1 -1
  109. package/dist/inspectors/watch/index.d.ts +18 -0
  110. package/dist/inspectors/watch/index.d.ts.map +1 -0
  111. package/dist/inspectors/watch/index.js +39 -0
  112. package/dist/inspectors/watch/index.js.map +1 -0
  113. package/dist/inspectors/watch/types.d.ts +70 -0
  114. package/dist/inspectors/watch/types.d.ts.map +1 -0
  115. package/dist/inspectors/watch/types.js +21 -0
  116. package/dist/inspectors/watch/types.js.map +1 -0
  117. package/dist/server/server.d.ts +31 -1
  118. package/dist/server/server.d.ts.map +1 -1
  119. package/dist/server/server.js +620 -67
  120. package/dist/server/server.js.map +1 -1
  121. package/dist/server/watch-session.d.ts +32 -0
  122. package/dist/server/watch-session.d.ts.map +1 -0
  123. package/dist/server/watch-session.js +165 -0
  124. package/dist/server/watch-session.js.map +1 -0
  125. package/dist/types.d.ts +4 -1
  126. package/dist/types.d.ts.map +1 -1
  127. package/dist/types.js +1 -0
  128. package/dist/types.js.map +1 -1
  129. package/package.json +61 -59
  130. package/skills/verify/SKILL.md +146 -11
  131. package/skills/verify-recipe/SKILL.md +185 -0
@@ -0,0 +1,51 @@
1
+ import { WebGLEngine } from '../../../../types.js';
2
+ import { PIXI_EXTRACT_SCRIPT } from './injection.js';
3
+ const TINT_WHITE = 0xffffff;
4
+ function isRawPixiNode(value) {
5
+ if (!value || typeof value !== 'object')
6
+ return false;
7
+ const n = value;
8
+ return typeof n.type === 'string' && typeof n.name === 'string' && Array.isArray(n.children);
9
+ }
10
+ function tintToHex(tint) {
11
+ return '#' + tint.toString(16).padStart(6, '0');
12
+ }
13
+ function radToDegRounded(rad) {
14
+ return Math.round((rad * 180) / Math.PI * 100) / 100;
15
+ }
16
+ function convert(raw) {
17
+ const extras = {};
18
+ const verboseExtras = {};
19
+ if (raw.tint !== null && raw.tint !== TINT_WHITE) {
20
+ extras.tint = tintToHex(raw.tint);
21
+ }
22
+ if (raw.alpha !== 1)
23
+ verboseExtras.alpha = String(raw.alpha);
24
+ if (raw.scaleX !== 1 || raw.scaleY !== 1)
25
+ verboseExtras.scale = `(${raw.scaleX},${raw.scaleY})`;
26
+ const rotDeg = radToDegRounded(raw.rotationRad);
27
+ if (rotDeg !== 0)
28
+ verboseExtras.rot = `${rotDeg}°`;
29
+ if (raw.width !== 0 || raw.height !== 0)
30
+ verboseExtras.size = `${raw.width}x${raw.height}`;
31
+ return {
32
+ type: raw.type,
33
+ name: raw.name,
34
+ x: raw.x,
35
+ y: raw.y,
36
+ visible: raw.visible,
37
+ extras: Object.keys(extras).length > 0 ? extras : undefined,
38
+ verboseExtras: Object.keys(verboseExtras).length > 0 ? verboseExtras : undefined,
39
+ children: raw.children.length > 0 ? raw.children.map(convert) : undefined,
40
+ };
41
+ }
42
+ export const pixiAdapter = {
43
+ engine: WebGLEngine.Pixi,
44
+ extractScript: PIXI_EXTRACT_SCRIPT,
45
+ normalize(raw) {
46
+ if (!isRawPixiNode(raw))
47
+ return null;
48
+ return convert(raw);
49
+ },
50
+ };
51
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../../src/inspectors/scene/adapters/pixi/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { pixiAdapter } from './adapter.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/inspectors/scene/adapters/pixi/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { pixiAdapter } from './adapter.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/inspectors/scene/adapters/pixi/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,39 @@
1
+ export type RawPixiNode = {
2
+ type: string;
3
+ name: string;
4
+ x: number;
5
+ y: number;
6
+ visible: boolean;
7
+ tint: number | null;
8
+ alpha: number;
9
+ scaleX: number;
10
+ scaleY: number;
11
+ rotationRad: number;
12
+ width: number;
13
+ height: number;
14
+ children: RawPixiNode[];
15
+ };
16
+ type PixiDisplayObject = {
17
+ constructor?: {
18
+ name?: string;
19
+ };
20
+ label?: string;
21
+ name?: string;
22
+ x?: number;
23
+ y?: number;
24
+ visible?: boolean;
25
+ tint?: number;
26
+ alpha?: number;
27
+ scale?: {
28
+ x?: number;
29
+ y?: number;
30
+ };
31
+ rotation?: number;
32
+ width?: number;
33
+ height?: number;
34
+ children?: PixiDisplayObject[];
35
+ };
36
+ export declare function serializePixiStage(stage: PixiDisplayObject, depth: number): RawPixiNode | null;
37
+ export declare const PIXI_EXTRACT_SCRIPT: string;
38
+ export {};
39
+ //# sourceMappingURL=injection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injection.d.ts","sourceRoot":"","sources":["../../../../../src/inspectors/scene/adapters/pixi/injection.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,WAAW,EAAE,CAAA;CACxB,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;CAC/B,CAAA;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAuB9F;AAED,eAAO,MAAM,mBAAmB,QAU/B,CAAA"}
@@ -0,0 +1,41 @@
1
+ // Injected via Runtime.evaluate; serializePixiStage is embedded by .toString()
2
+ // so the same TS function runs in the page and is unit-testable on the host.
3
+ const HARD_DEPTH_LIMIT = 100;
4
+ export function serializePixiStage(stage, depth) {
5
+ if (depth > HARD_DEPTH_LIMIT)
6
+ return null;
7
+ const kids = stage.children ?? [];
8
+ const children = [];
9
+ for (const kid of kids) {
10
+ const child = serializePixiStage(kid, depth + 1);
11
+ if (child)
12
+ children.push(child);
13
+ }
14
+ return {
15
+ type: stage.constructor?.name ?? 'Unknown',
16
+ name: stage.label || stage.name || '',
17
+ x: Math.round(stage.x ?? 0),
18
+ y: Math.round(stage.y ?? 0),
19
+ visible: stage.visible !== false,
20
+ tint: typeof stage.tint === 'number' ? stage.tint : null,
21
+ alpha: stage.alpha ?? 1,
22
+ scaleX: stage.scale?.x ?? 1,
23
+ scaleY: stage.scale?.y ?? 1,
24
+ rotationRad: stage.rotation ?? 0,
25
+ width: Math.round(stage.width ?? 0),
26
+ height: Math.round(stage.height ?? 0),
27
+ children,
28
+ };
29
+ }
30
+ export const PIXI_EXTRACT_SCRIPT = `
31
+ (function () {
32
+ var devtools = window.__PIXI_DEVTOOLS__;
33
+ if (!devtools) return null;
34
+ var app = devtools.app || (devtools.stage && devtools.stage.parent);
35
+ var stage = (app && app.stage) || devtools.stage;
36
+ if (!stage) return null;
37
+ var serialize = ${serializePixiStage.toString()};
38
+ return serialize(stage, 0);
39
+ })()
40
+ `;
41
+ //# sourceMappingURL=injection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injection.js","sourceRoot":"","sources":["../../../../../src/inspectors/scene/adapters/pixi/injection.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAkC7E,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAE5B,MAAM,UAAU,kBAAkB,CAAC,KAAwB,EAAE,KAAa;IACxE,IAAI,KAAK,GAAG,gBAAgB;QAAE,OAAO,IAAI,CAAA;IACzC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAA;IACjC,MAAM,QAAQ,GAAkB,EAAE,CAAA;IAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAChD,IAAI,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IACD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,SAAS;QAC1C,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE;QACrC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,KAAK;QAChC,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QACxD,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;QACvB,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC;QAC3B,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC;QAC3B,WAAW,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;QAChC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QACnC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACrC,QAAQ;KACT,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;oBAOf,kBAAkB,CAAC,QAAQ,EAAE;;;CAGhD,CAAA"}
@@ -1,5 +1,4 @@
1
1
  import type { SceneNode, SceneOptions } from './types.js';
2
2
  export declare function formatNode(node: SceneNode, depth: number, lines: string[], options: SceneOptions): void;
3
3
  export declare function diffScenes(prev: SceneNode, curr: SceneNode): string;
4
- export declare function hasMatch(node: SceneNode, filter: string): boolean;
5
4
  //# sourceMappingURL=formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIzD,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAqCvG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAInE;AA0CD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAMjE"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIzD,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAevG;AA6ED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAInE"}
@@ -4,38 +4,85 @@ export function formatNode(node, depth, lines, options) {
4
4
  return;
5
5
  if (options.depth !== undefined && depth > options.depth)
6
6
  return;
7
- const matchesFilter = !options.filter ||
8
- node.name.toLowerCase().includes(options.filter.toLowerCase()) ||
9
- node.type.toLowerCase().includes(options.filter.toLowerCase());
10
- const hasMatchingChildren = options.filter
11
- ? (node.children || []).some(c => hasMatch(c, options.filter))
12
- : false;
13
- if (matchesFilter || hasMatchingChildren) {
14
- const indent = ' '.repeat(depth);
15
- const vis = node.visible ? '' : ' [hidden]';
16
- const nameStr = node.name ? ` "${node.name}"` : '';
17
- let line = `${indent}${node.type}${nameStr} (${node.x},${node.y})${vis}`;
18
- if (node.tint !== '0xffffff' && node.tint !== '#ffffff') {
19
- line += ` tint=${node.tint}`;
7
+ const lowerFilter = options.filter?.toLowerCase();
8
+ if (lowerFilter && !subtreeMatches(node, lowerFilter))
9
+ return;
10
+ if (options.compact) {
11
+ formatNodeCompact(node, depth, lines, options);
12
+ }
13
+ else {
14
+ lines.push(formatLine(node, depth, options));
15
+ for (const child of node.children ?? []) {
16
+ formatNode(child, depth + 1, lines, options);
20
17
  }
21
- if (options.verbose) {
22
- const extras = [];
23
- if (node.alpha !== undefined && node.alpha !== 1)
24
- extras.push(`alpha=${node.alpha}`);
25
- if (node.scaleX !== 1 || node.scaleY !== 1)
26
- extras.push(`scale=(${node.scaleX},${node.scaleY})`);
27
- if (node.rotation !== 0)
28
- extras.push(`rot=${node.rotation}°`);
29
- if (node.width || node.height)
30
- extras.push(`size=${node.width}x${node.height}`);
31
- if (extras.length > 0)
32
- line += ` ${extras.join(' ')}`;
18
+ }
19
+ }
20
+ /**
21
+ * Compact mode: merge single-child chains onto one line separated by " > ".
22
+ * Multi-child nodes render normally (each child on its own line).
23
+ */
24
+ function formatNodeCompact(node, depth, lines, options) {
25
+ const chain = collectSingleChildChain(node, options);
26
+ const tail = chain[chain.length - 1];
27
+ const tailChildren = tail.children ?? [];
28
+ const chainParts = chain.map(n => nodeLabel(n, options));
29
+ const indent = ' '.repeat(depth);
30
+ lines.push(`${indent}${chainParts.join(' > ')}`);
31
+ for (const child of tailChildren) {
32
+ formatNodeCompact(child, depth + 1, lines, options);
33
+ }
34
+ }
35
+ /**
36
+ * Walk down while the current node has exactly one child (and that child
37
+ * passes the depth limit). Returns every node in the single-child chain,
38
+ * including the node that breaks the pattern (0 or 2+ children).
39
+ */
40
+ function collectSingleChildChain(node, options) {
41
+ const chain = [node];
42
+ let current = node;
43
+ while (true) {
44
+ const children = current.children ?? [];
45
+ if (children.length !== 1)
46
+ break;
47
+ const next = children[0];
48
+ if (options.depth !== undefined) {
49
+ // depth limit: stop chaining if we'd exceed it
50
+ const nextDepth = chain.length; // relative depth from start of chain
51
+ if (nextDepth > options.depth)
52
+ break;
33
53
  }
34
- lines.push(line);
54
+ chain.push(next);
55
+ current = next;
35
56
  }
36
- for (const child of node.children || []) {
37
- formatNode(child, depth + 1, lines, options);
57
+ return chain;
58
+ }
59
+ /** Single-node label without indent — used inside compact chains. */
60
+ function nodeLabel(node, options) {
61
+ const vis = node.visible ? '' : ' [hidden]';
62
+ const nameStr = node.name ? ` "${node.name}"` : '';
63
+ let label = `${node.type}${nameStr} (${node.x},${node.y})${vis}`;
64
+ if (node.extras) {
65
+ for (const [key, value] of Object.entries(node.extras)) {
66
+ label += ` ${key}=${value}`;
67
+ }
68
+ }
69
+ if (options.verbose && node.verboseExtras) {
70
+ for (const [key, value] of Object.entries(node.verboseExtras)) {
71
+ label += ` ${key}=${value}`;
72
+ }
73
+ }
74
+ return label;
75
+ }
76
+ function formatLine(node, depth, options) {
77
+ const indent = ' '.repeat(depth);
78
+ return `${indent}${nodeLabel(node, options)}`;
79
+ }
80
+ function subtreeMatches(node, lowerFilter) {
81
+ if (node.name.toLowerCase().includes(lowerFilter) ||
82
+ node.type.toLowerCase().includes(lowerFilter)) {
83
+ return true;
38
84
  }
85
+ return (node.children ?? []).some(child => subtreeMatches(child, lowerFilter));
39
86
  }
40
87
  export function diffScenes(prev, curr) {
41
88
  const changes = [];
@@ -48,19 +95,36 @@ function diffNode(prev, curr, depth, changes) {
48
95
  const indent = ' '.repeat(depth);
49
96
  const nameStr = curr.name ? ` "${curr.name}"` : '';
50
97
  const diffs = [];
51
- if (prev.x !== curr.x || prev.y !== curr.y)
98
+ if (prev.x !== curr.x || prev.y !== curr.y) {
52
99
  diffs.push(`pos: (${prev.x},${prev.y})→(${curr.x},${curr.y})`);
53
- if (prev.visible !== curr.visible)
100
+ }
101
+ if (prev.visible !== curr.visible) {
54
102
  diffs.push(`visible: ${prev.visible}→${curr.visible}`);
55
- if (prev.tint !== curr.tint)
56
- diffs.push(`tint: ${prev.tint}→${curr.tint}`);
57
- if (prev.alpha !== curr.alpha)
58
- diffs.push(`alpha: ${prev.alpha}→${curr.alpha}`);
103
+ }
104
+ diffExtras(prev, curr, diffs);
59
105
  if (diffs.length > 0) {
60
106
  changes.push(`${indent}~ ${curr.type}${nameStr}: ${diffs.join(', ')}`);
61
107
  }
62
- const prevChildren = prev.children || [];
63
- const currChildren = curr.children || [];
108
+ diffChildren(prev, curr, depth, changes, indent);
109
+ }
110
+ function diffExtras(prev, curr, diffs) {
111
+ const prevAll = mergeExtras(prev);
112
+ const currAll = mergeExtras(curr);
113
+ const keys = new Set([...Object.keys(prevAll), ...Object.keys(currAll)]);
114
+ for (const key of keys) {
115
+ const before = prevAll[key];
116
+ const after = currAll[key];
117
+ if (before !== after) {
118
+ diffs.push(`${key}: ${before ?? '∅'}→${after ?? '∅'}`);
119
+ }
120
+ }
121
+ }
122
+ function mergeExtras(node) {
123
+ return { ...(node.extras ?? {}), ...(node.verboseExtras ?? {}) };
124
+ }
125
+ function diffChildren(prev, curr, depth, changes, indent) {
126
+ const prevChildren = prev.children ?? [];
127
+ const currChildren = curr.children ?? [];
64
128
  const prevByKey = new Map(prevChildren.map((c, i) => [childKey(c, i), c]));
65
129
  const currByKey = new Map(currChildren.map((c, i) => [childKey(c, i), c]));
66
130
  for (const [key, child] of currByKey) {
@@ -81,11 +145,4 @@ function diffNode(prev, curr, depth, changes) {
81
145
  function childKey(node, index) {
82
146
  return node.name ? `${node.type}:${node.name}` : `${node.type}:${index}`;
83
147
  }
84
- export function hasMatch(node, filter) {
85
- const lower = filter.toLowerCase();
86
- if (node.name.toLowerCase().includes(lower) || node.type.toLowerCase().includes(lower)) {
87
- return true;
88
- }
89
- return (node.children || []).some(c => hasMatch(c, lower));
90
- }
91
148
  //# sourceMappingURL=formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/inspectors/scene/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/inspectors/scene/formatter.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import type { CDPConnection } from '../../cdp/types.js';
1
+ import type { RuntimeSession } from '../../cdp/types.js';
2
2
  import type { WebGLEngine } from '../../types.js';
3
3
  import type { SceneOptions, SceneNode } from './types.js';
4
- export declare function getSceneGraph(conn: CDPConnection, engine: WebGLEngine | undefined, options?: SceneOptions): Promise<string>;
5
- export declare function getRawScene(conn: CDPConnection, engine: WebGLEngine | undefined): Promise<SceneNode | null>;
4
+ export declare function getSceneGraph(conn: RuntimeSession, engine: WebGLEngine | undefined, options?: SceneOptions): Promise<string>;
5
+ export declare function getRawScene(conn: RuntimeSession, engine: WebGLEngine | undefined): Promise<SceneNode | null>;
6
6
  export { diffScenes } from './formatter.js';
7
- export type { SceneNode, SceneOptions } from './types.js';
7
+ export type { SceneNode, SceneOptions, SceneAdapter } from './types.js';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEzD,wBAAsB,aAAa,CACjC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,WAAW,GAAG,SAAS,GAC9B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAI3B;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEzD,wBAAsB,aAAa,CACjC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,WAAW,GAAG,SAAS,GAC9B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAG3B;AAQD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA"}
@@ -1,11 +1,10 @@
1
- import { getExtractor } from './registry.js';
1
+ import { getAdapter } from './registry.js';
2
2
  import { formatNode } from './formatter.js';
3
3
  export async function getSceneGraph(conn, engine, options = {}) {
4
4
  if (!engine) {
5
5
  return 'No WebGL engine configured. Add "webgl": { "engine": "pixi" } to agent-view.config.json';
6
6
  }
7
- const extractor = getExtractor(engine);
8
- const tree = await extractor.extract(conn);
7
+ const tree = await extract(conn, engine);
9
8
  if (!tree) {
10
9
  return `No ${engine} scene found`;
11
10
  }
@@ -19,8 +18,12 @@ export async function getSceneGraph(conn, engine, options = {}) {
19
18
  export async function getRawScene(conn, engine) {
20
19
  if (!engine)
21
20
  return null;
22
- const extractor = getExtractor(engine);
23
- return extractor.extract(conn);
21
+ return extract(conn, engine);
22
+ }
23
+ async function extract(conn, engine) {
24
+ const adapter = getAdapter(engine);
25
+ const raw = await conn.evaluate(adapter.extractScript);
26
+ return adapter.normalize(raw);
24
27
  }
25
28
  export { diffScenes } from './formatter.js';
26
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/scene/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAA;AAKvD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAmB,EACnB,MAA+B,EAC/B,UAAwB,EAAE;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,yFAAyF,CAAA;IAClG,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,MAAM,cAAc,CAAA;IACnC,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,8BAA8B,OAAO,CAAC,MAAM,GAAG,CAAA;IACxD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAmB,EACnB,MAA+B;IAE/B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;IACtC,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAChC,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/scene/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAc,MAAM,gBAAgB,CAAA;AAKvD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAoB,EACpB,MAA+B,EAC/B,UAAwB,EAAE;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,yFAAyF,CAAA;IAClG,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,MAAM,cAAc,CAAA;IACnC,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,8BAA8B,OAAO,CAAC,MAAM,GAAG,CAAA;IACxD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAoB,EACpB,MAA+B;IAE/B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AAC9B,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAoB,EAAE,MAAmB;IAC9D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IACtD,OAAO,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;AAC/B,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1 +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,IAAmB;QAC/B,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"}
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"}
@@ -1,4 +1,4 @@
1
1
  import { WebGLEngine } from '../../types.js';
2
- import type { SceneExtractor } from './types.js';
3
- export declare function getExtractor(engine: WebGLEngine): SceneExtractor;
2
+ import type { SceneAdapter } from './types.js';
3
+ export declare function getAdapter(engine: WebGLEngine): SceneAdapter;
4
4
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAOhD,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,cAAc,CAMhE"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,CAM5D"}
@@ -1,13 +1,13 @@
1
1
  import { WebGLEngine } from '../../types.js';
2
- import { pixiExtractor } from './pixi.js';
3
- const extractors = {
4
- [WebGLEngine.Pixi]: pixiExtractor,
2
+ import { pixiAdapter } from './adapters/pixi/index.js';
3
+ const adapters = {
4
+ [WebGLEngine.Pixi]: pixiAdapter,
5
5
  };
6
- export function getExtractor(engine) {
7
- const extractor = extractors[engine];
8
- if (!extractor) {
9
- throw new Error(`Scene extractor for "${engine}" is not implemented yet`);
6
+ export function getAdapter(engine) {
7
+ const adapter = adapters[engine];
8
+ if (!adapter) {
9
+ throw new Error(`Scene adapter for "${engine}" is not implemented yet`);
10
10
  }
11
- return extractor;
11
+ return adapter;
12
12
  }
13
13
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/inspectors/scene/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,UAAU,GAAiD;IAC/D,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,aAAa;CAClC,CAAA;AAED,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;IACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,0BAA0B,CAAC,CAAA;IAC3E,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/inspectors/scene/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,MAAM,QAAQ,GAA+C;IAC3D,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,WAAW;CAChC,CAAA;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,0BAA0B,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -1,4 +1,3 @@
1
- import type { CDPConnection } from '../../cdp/types.js';
2
1
  import type { WebGLEngine } from '../../types.js';
3
2
  export type SceneNode = {
4
3
  type: string;
@@ -6,26 +5,23 @@ export type SceneNode = {
6
5
  x: number;
7
6
  y: number;
8
7
  visible: boolean;
9
- tint: string;
10
- alpha?: number;
11
- scaleX?: number;
12
- scaleY?: number;
13
- rotation?: number;
14
- width?: number;
15
- height?: number;
16
8
  children?: SceneNode[];
9
+ extras?: Record<string, string>;
10
+ verboseExtras?: Record<string, string>;
17
11
  };
18
12
  export type SceneOptions = {
19
13
  filter?: string;
20
14
  depth?: number;
21
15
  verbose?: boolean;
16
+ compact?: boolean;
22
17
  };
23
18
  export type SceneDiffResult = {
24
19
  text: string;
25
20
  snapshot: SceneNode;
26
21
  };
27
- export type SceneExtractor = {
22
+ export type SceneAdapter = {
28
23
  readonly engine: WebGLEngine;
29
- extract(conn: CDPConnection): Promise<SceneNode | null>;
24
+ readonly extractScript: string;
25
+ normalize(raw: unknown): SceneNode | null;
30
26
  };
31
27
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,SAAS,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;CACxD,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/inspectors/scene/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAA;IAEtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE/B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,SAAS,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAE9B,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAA;CAC1C,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { type JsonPatchOp } from './types.js';
2
+ export { StopReason, WATCH_SIZE_CAP_BYTES, WATCH_MAX_CONSECUTIVE_ERRORS, WATCH_MIN_INTERVAL_MS, WatchSizeCapError } from './types.js';
3
+ export type { WatchFrame, WatchInitFrame, WatchDiffFrame, WatchErrorFrame, WatchStopFrame, WatchOptions, JsonPatchOp } from './types.js';
4
+ /**
5
+ * Browser-side wrapper. Deep-clones via JSON to surface non-cloneable values as a stable error shape.
6
+ */
7
+ export declare function buildCaptureWrapper(userExpression: string): string;
8
+ export type CapturedValue = {
9
+ kind: 'value';
10
+ value: unknown;
11
+ } | {
12
+ kind: 'error';
13
+ message: string;
14
+ };
15
+ export declare function readCapture(raw: unknown): CapturedValue;
16
+ export declare function checkSizeCap(value: unknown): number;
17
+ export declare function diff(prev: unknown, next: unknown): JsonPatchOp[];
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/watch/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA2C,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAEtF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACrI,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExI;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAElG,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAMvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKnD;AAMD,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,CAUhE"}
@@ -0,0 +1,39 @@
1
+ import jsonpatch from 'fast-json-patch';
2
+ import { WATCH_SIZE_CAP_BYTES, WatchSizeCapError } from './types.js';
3
+ export { StopReason, WATCH_SIZE_CAP_BYTES, WATCH_MAX_CONSECUTIVE_ERRORS, WATCH_MIN_INTERVAL_MS, WatchSizeCapError } from './types.js';
4
+ /**
5
+ * Browser-side wrapper. Deep-clones via JSON to surface non-cloneable values as a stable error shape.
6
+ */
7
+ export function buildCaptureWrapper(userExpression) {
8
+ return `(function(){try{return JSON.parse(JSON.stringify((${userExpression})))}catch(e){return {__watchError: e && e.message ? String(e.message) : String(e)}}})()`;
9
+ }
10
+ export function readCapture(raw) {
11
+ if (raw && typeof raw === 'object' && '__watchError' in raw) {
12
+ const msg = raw.__watchError;
13
+ return { kind: 'error', message: typeof msg === 'string' ? msg : String(msg) };
14
+ }
15
+ return { kind: 'value', value: raw };
16
+ }
17
+ export function checkSizeCap(value) {
18
+ const json = JSON.stringify(value) ?? 'undefined';
19
+ const bytes = Buffer.byteLength(json, 'utf8');
20
+ if (bytes > WATCH_SIZE_CAP_BYTES)
21
+ throw new WatchSizeCapError(bytes);
22
+ return bytes;
23
+ }
24
+ function isObjectOrArray(v) {
25
+ return v !== null && typeof v === 'object';
26
+ }
27
+ export function diff(prev, next) {
28
+ // fast-json-patch.compare only supports Object|Array roots. Handle primitives + type changes ourselves.
29
+ if (!isObjectOrArray(prev) || !isObjectOrArray(next)) {
30
+ if (prev === next)
31
+ return [];
32
+ return [{ op: 'replace', path: '', value: next }];
33
+ }
34
+ if (Array.isArray(prev) !== Array.isArray(next)) {
35
+ return [{ op: 'replace', path: '', value: next }];
36
+ }
37
+ return jsonpatch.compare(prev, next);
38
+ }
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/watch/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAA;AAEtF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAGrI;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,cAAsB;IACxD,OAAO,qDAAqD,cAAc,yFAAyF,CAAA;AACrK,CAAC;AAID,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,cAAc,IAAI,GAAG,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAI,GAAiC,CAAC,YAAY,CAAA;QAC3D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;IAChF,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,WAAW,CAAA;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC7C,IAAI,KAAK,GAAG,oBAAoB;QAAE,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACpE,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IACjC,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAa,EAAE,IAAa;IAC/C,wGAAwG;IACxG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,CAAA;QAC5B,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAkB,CAAA;AACvD,CAAC"}