multiclone 0.0.0-stage → 0.2.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 (240) hide show
  1. package/README.md +78 -2
  2. package/agents/section-builder.md +37 -0
  3. package/commands/multiclone.md +15 -0
  4. package/dist/adapters/cli.js +129 -0
  5. package/dist/adapters/cli.js.map +1 -0
  6. package/dist/adapters/cliArgs.js +63 -0
  7. package/dist/adapters/cliArgs.js.map +1 -0
  8. package/dist/adapters/mcp.js +83 -0
  9. package/dist/adapters/mcp.js.map +1 -0
  10. package/dist/analyze/analyze.js +85 -0
  11. package/dist/analyze/analyze.js.map +1 -0
  12. package/dist/analyze/animations.js +340 -0
  13. package/dist/analyze/animations.js.map +1 -0
  14. package/dist/analyze/ast.js +182 -0
  15. package/dist/analyze/ast.js.map +1 -0
  16. package/dist/analyze/chunks.js +160 -0
  17. package/dist/analyze/chunks.js.map +1 -0
  18. package/dist/analyze/jobs/code.js +117 -0
  19. package/dist/analyze/jobs/code.js.map +1 -0
  20. package/dist/analyze/jobs/sections.js +356 -0
  21. package/dist/analyze/jobs/sections.js.map +1 -0
  22. package/dist/analyze/pretty.js +20 -0
  23. package/dist/analyze/pretty.js.map +1 -0
  24. package/dist/analyze/report.js +101 -0
  25. package/dist/analyze/report.js.map +1 -0
  26. package/dist/analyze/worker.js +71 -0
  27. package/dist/analyze/worker.js.map +1 -0
  28. package/dist/capture/capture.js +340 -0
  29. package/dist/capture/capture.js.map +1 -0
  30. package/dist/capture/collectors/a11y.js +92 -0
  31. package/dist/capture/collectors/a11y.js.map +1 -0
  32. package/dist/capture/collectors/animations.js +113 -0
  33. package/dist/capture/collectors/animations.js.map +1 -0
  34. package/dist/capture/collectors/breakpoints.js +31 -0
  35. package/dist/capture/collectors/breakpoints.js.map +1 -0
  36. package/dist/capture/collectors/consent.js +39 -0
  37. package/dist/capture/collectors/consent.js.map +1 -0
  38. package/dist/capture/collectors/coverage.js +121 -0
  39. package/dist/capture/collectors/coverage.js.map +1 -0
  40. package/dist/capture/collectors/dom.js +16 -0
  41. package/dist/capture/collectors/dom.js.map +1 -0
  42. package/dist/capture/collectors/fonts.js +154 -0
  43. package/dist/capture/collectors/fonts.js.map +1 -0
  44. package/dist/capture/collectors/frames.js +93 -0
  45. package/dist/capture/collectors/frames.js.map +1 -0
  46. package/dist/capture/collectors/index.js +61 -0
  47. package/dist/capture/collectors/index.js.map +1 -0
  48. package/dist/capture/collectors/interactions.js +207 -0
  49. package/dist/capture/collectors/interactions.js.map +1 -0
  50. package/dist/capture/collectors/intro.js +84 -0
  51. package/dist/capture/collectors/intro.js.map +1 -0
  52. package/dist/capture/collectors/listeners.js +84 -0
  53. package/dist/capture/collectors/listeners.js.map +1 -0
  54. package/dist/capture/collectors/motion.js +91 -0
  55. package/dist/capture/collectors/motion.js.map +1 -0
  56. package/dist/capture/collectors/network.js +288 -0
  57. package/dist/capture/collectors/network.js.map +1 -0
  58. package/dist/capture/collectors/probes.js +34 -0
  59. package/dist/capture/collectors/probes.js.map +1 -0
  60. package/dist/capture/collectors/runtime.js +38 -0
  61. package/dist/capture/collectors/runtime.js.map +1 -0
  62. package/dist/capture/collectors/scripts.js +98 -0
  63. package/dist/capture/collectors/scripts.js.map +1 -0
  64. package/dist/capture/collectors/sections.js +17 -0
  65. package/dist/capture/collectors/sections.js.map +1 -0
  66. package/dist/capture/collectors/shots.js +58 -0
  67. package/dist/capture/collectors/shots.js.map +1 -0
  68. package/dist/capture/collectors/snapshot.js +47 -0
  69. package/dist/capture/collectors/snapshot.js.map +1 -0
  70. package/dist/capture/collectors/sourcemaps.js +153 -0
  71. package/dist/capture/collectors/sourcemaps.js.map +1 -0
  72. package/dist/capture/collectors/storage.js +72 -0
  73. package/dist/capture/collectors/storage.js.map +1 -0
  74. package/dist/capture/context.js +40 -0
  75. package/dist/capture/context.js.map +1 -0
  76. package/dist/capture/hooks/candidates.js +104 -0
  77. package/dist/capture/hooks/candidates.js.map +1 -0
  78. package/dist/capture/hooks/consent.js +82 -0
  79. package/dist/capture/hooks/consent.js.map +1 -0
  80. package/dist/capture/hooks/recorders.js +507 -0
  81. package/dist/capture/hooks/recorders.js.map +1 -0
  82. package/dist/capture/hooks/sections.js +62 -0
  83. package/dist/capture/hooks/sections.js.map +1 -0
  84. package/dist/capture/hooks/styles.js +86 -0
  85. package/dist/capture/hooks/styles.js.map +1 -0
  86. package/dist/capture/probes.js +491 -0
  87. package/dist/capture/probes.js.map +1 -0
  88. package/dist/capture/report.js +115 -0
  89. package/dist/capture/report.js.map +1 -0
  90. package/dist/compare/compare.js +391 -0
  91. package/dist/compare/compare.js.map +1 -0
  92. package/dist/compare/image.js +105 -0
  93. package/dist/compare/image.js.map +1 -0
  94. package/dist/compare/probes.js +129 -0
  95. package/dist/compare/probes.js.map +1 -0
  96. package/dist/compare/report.js +99 -0
  97. package/dist/compare/report.js.map +1 -0
  98. package/dist/compare/session.js +139 -0
  99. package/dist/compare/session.js.map +1 -0
  100. package/dist/compare/shoot.js +62 -0
  101. package/dist/compare/shoot.js.map +1 -0
  102. package/dist/contracts/catalog.js +29 -0
  103. package/dist/contracts/catalog.js.map +1 -0
  104. package/dist/contracts/context.js +19 -0
  105. package/dist/contracts/context.js.map +1 -0
  106. package/dist/contracts/fields.js +16 -0
  107. package/dist/contracts/fields.js.map +1 -0
  108. package/dist/contracts/tools/analyze.js +38 -0
  109. package/dist/contracts/tools/analyze.js.map +1 -0
  110. package/dist/contracts/tools/capture.js +87 -0
  111. package/dist/contracts/tools/capture.js.map +1 -0
  112. package/dist/contracts/tools/compare.js +142 -0
  113. package/dist/contracts/tools/compare.js.map +1 -0
  114. package/dist/contracts/tools/doctor.js +23 -0
  115. package/dist/contracts/tools/doctor.js.map +1 -0
  116. package/dist/contracts/tools/inspect.js +41 -0
  117. package/dist/contracts/tools/inspect.js.map +1 -0
  118. package/dist/contracts/tools/method.js +60 -0
  119. package/dist/contracts/tools/method.js.map +1 -0
  120. package/dist/contracts/tools/mirror.js +53 -0
  121. package/dist/contracts/tools/mirror.js.map +1 -0
  122. package/dist/contracts/tools/project.js +61 -0
  123. package/dist/contracts/tools/project.js.map +1 -0
  124. package/dist/contracts/tools/session.js +195 -0
  125. package/dist/contracts/tools/session.js.map +1 -0
  126. package/dist/contracts/types.js +20 -0
  127. package/dist/contracts/types.js.map +1 -0
  128. package/dist/core/cdp.js +146 -0
  129. package/dist/core/cdp.js.map +1 -0
  130. package/dist/core/chrome.js +185 -0
  131. package/dist/core/chrome.js.map +1 -0
  132. package/dist/core/files.js +31 -0
  133. package/dist/core/files.js.map +1 -0
  134. package/dist/core/inpage.js +24 -0
  135. package/dist/core/inpage.js.map +1 -0
  136. package/dist/core/log.js +10 -0
  137. package/dist/core/log.js.map +1 -0
  138. package/dist/core/page.js +269 -0
  139. package/dist/core/page.js.map +1 -0
  140. package/dist/doctor.js +37 -0
  141. package/dist/doctor.js.map +1 -0
  142. package/dist/domain/breakpoints.js +47 -0
  143. package/dist/domain/breakpoints.js.map +1 -0
  144. package/dist/domain/budget.js +38 -0
  145. package/dist/domain/budget.js.map +1 -0
  146. package/dist/domain/compare.js +138 -0
  147. package/dist/domain/compare.js.map +1 -0
  148. package/dist/domain/coverage.js +96 -0
  149. package/dist/domain/coverage.js.map +1 -0
  150. package/dist/domain/motion.js +142 -0
  151. package/dist/domain/motion.js.map +1 -0
  152. package/dist/domain/paths.js +55 -0
  153. package/dist/domain/paths.js.map +1 -0
  154. package/dist/domain/result.js +38 -0
  155. package/dist/domain/result.js.map +1 -0
  156. package/dist/domain/routes.js +160 -0
  157. package/dist/domain/routes.js.map +1 -0
  158. package/dist/domain/sections.js +94 -0
  159. package/dist/domain/sections.js.map +1 -0
  160. package/dist/domain/snapshot.js +268 -0
  161. package/dist/domain/snapshot.js.map +1 -0
  162. package/dist/domain/sourcemap.js +95 -0
  163. package/dist/domain/sourcemap.js.map +1 -0
  164. package/dist/domain/stack.js +342 -0
  165. package/dist/domain/stack.js.map +1 -0
  166. package/dist/domain/tokens.js +183 -0
  167. package/dist/domain/tokens.js.map +1 -0
  168. package/dist/domain/types.js +2 -0
  169. package/dist/domain/types.js.map +1 -0
  170. package/dist/domain/viewports.js +45 -0
  171. package/dist/domain/viewports.js.map +1 -0
  172. package/dist/mirror/rewrite.js +56 -0
  173. package/dist/mirror/rewrite.js.map +1 -0
  174. package/dist/mirror/server.js +191 -0
  175. package/dist/mirror/server.js.map +1 -0
  176. package/dist/mirror/store.js +86 -0
  177. package/dist/mirror/store.js.map +1 -0
  178. package/dist/project/assets.js +69 -0
  179. package/dist/project/assets.js.map +1 -0
  180. package/dist/project/draft.js +860 -0
  181. package/dist/project/draft.js.map +1 -0
  182. package/dist/project/method.js +154 -0
  183. package/dist/project/method.js.map +1 -0
  184. package/dist/project/scaffold.js +142 -0
  185. package/dist/project/scaffold.js.map +1 -0
  186. package/dist/session/discover.js +53 -0
  187. package/dist/session/discover.js.map +1 -0
  188. package/dist/session/proc.js +113 -0
  189. package/dist/session/proc.js.map +1 -0
  190. package/dist/session/progress.js +83 -0
  191. package/dist/session/progress.js.map +1 -0
  192. package/dist/session/session.js +450 -0
  193. package/dist/session/session.js.map +1 -0
  194. package/dist/session/state.js +47 -0
  195. package/dist/session/state.js.map +1 -0
  196. package/dist/store/inspect.js +212 -0
  197. package/dist/store/inspect.js.map +1 -0
  198. package/dist/store/run.js +112 -0
  199. package/dist/store/run.js.map +1 -0
  200. package/dist/store/summary.js +69 -0
  201. package/dist/store/summary.js.map +1 -0
  202. package/dist/version.js +2 -0
  203. package/dist/version.js.map +1 -0
  204. package/install.sh +29 -0
  205. package/package.json +67 -4
  206. package/skills/multiclone/SKILL.md +123 -0
  207. package/skills/multiclone/references/capture-format.md +73 -0
  208. package/skills/multiclone/references/fidelity.md +54 -0
  209. package/skills/multiclone/references/quality.md +47 -0
  210. package/skills/multiclone/references/stacks.md +156 -0
  211. package/templates/react-vite/.prettierignore +5 -0
  212. package/templates/react-vite/.prettierrc.json +6 -0
  213. package/templates/react-vite/eslint.config.js +38 -0
  214. package/templates/react-vite/gitignore +4 -0
  215. package/templates/react-vite/index.html +12 -0
  216. package/templates/react-vite/package.json +36 -0
  217. package/templates/react-vite/src/app/App.tsx +15 -0
  218. package/templates/react-vite/src/app/Page.tsx +11 -0
  219. package/templates/react-vite/src/app/routes.ts +7 -0
  220. package/templates/react-vite/src/components/README.md +7 -0
  221. package/templates/react-vite/src/content/README.md +2 -0
  222. package/templates/react-vite/src/hooks/useActiveSection.ts +37 -0
  223. package/templates/react-vite/src/hooks/useInView.ts +45 -0
  224. package/templates/react-vite/src/hooks/useMediaQuery.ts +15 -0
  225. package/templates/react-vite/src/lib/cn.ts +4 -0
  226. package/templates/react-vite/src/lib/math.ts +21 -0
  227. package/templates/react-vite/src/lib/mc.ts +13 -0
  228. package/templates/react-vite/src/lib/media.ts +4 -0
  229. package/templates/react-vite/src/main.tsx +13 -0
  230. package/templates/react-vite/src/providers/SmoothScroll.tsx +24 -0
  231. package/templates/react-vite/src/styles/base.css +42 -0
  232. package/templates/react-vite/src/styles/draft.css +1 -0
  233. package/templates/react-vite/src/styles/fonts.css +1 -0
  234. package/templates/react-vite/src/styles/index.css +4 -0
  235. package/templates/react-vite/src/styles/tokens.css +3 -0
  236. package/templates/react-vite/src/vite-env.d.ts +1 -0
  237. package/templates/react-vite/tsconfig.app.json +29 -0
  238. package/templates/react-vite/tsconfig.json +4 -0
  239. package/templates/react-vite/tsconfig.node.json +19 -0
  240. package/templates/react-vite/vite.config.ts +37 -0
@@ -0,0 +1,507 @@
1
+ /*
2
+ * Runtime recorders installed before any page script. They wrap the original functions, always
3
+ * call through, and never throw into the page. Everything lands in window.__mcRec and is read
4
+ * by readRecordings() once the page settled.
5
+ *
6
+ * This function is serialised with toString(): it must be self-contained.
7
+ */
8
+ export function installRecorders(limits) {
9
+ const w = window;
10
+ if (w.__mcRec)
11
+ return;
12
+ const rec = Object.assign(Object.create(null), { _count: Object.create(null) });
13
+ Object.defineProperty(w, '__mcRec', { value: rec, enumerable: false, configurable: true });
14
+ const now = () => Math.round(performance.now());
15
+ const push = (bucket, entry) => {
16
+ rec._count[bucket] = (rec._count[bucket] ?? 0) + 1;
17
+ const list = (rec[bucket] ??= []);
18
+ if (list.length < limits.maxEntries)
19
+ list.push(entry);
20
+ };
21
+ const clip = (text) => text.length > limits.maxText ? `${text.slice(0, limits.maxText)}…` : text;
22
+ const pathOf = (el) => {
23
+ try {
24
+ if (!(el instanceof Element))
25
+ return '';
26
+ const parts = [];
27
+ let node = el;
28
+ for (let depth = 0; node && depth < 40; depth++) {
29
+ const tag = node.tagName.toLowerCase();
30
+ if (tag === 'html' || tag === 'body') {
31
+ parts.unshift(tag);
32
+ break;
33
+ }
34
+ const id = node.getAttribute('id');
35
+ if (id && /^[A-Za-z][\w-]*$/.test(id) && !/\d{4,}|^:r|^radix-|^headlessui-/i.test(id)) {
36
+ parts.unshift(`#${id}`);
37
+ break;
38
+ }
39
+ const parent = node.parentElement;
40
+ const current = node;
41
+ const same = parent
42
+ ? Array.from(parent.children).filter((c) => c.tagName === current.tagName)
43
+ : [];
44
+ parts.unshift(same.length > 1 ? `${tag}:nth-of-type(${String(same.indexOf(current) + 1)})` : tag);
45
+ node = parent;
46
+ }
47
+ return parts.join(' > ');
48
+ }
49
+ catch {
50
+ return '';
51
+ }
52
+ };
53
+ /** JSON-safe copy with depth/size limits; functions become their source head, nodes their path. */
54
+ const safe = (value, depth = 0) => {
55
+ try {
56
+ if (value === null || value === undefined)
57
+ return null;
58
+ const type = typeof value;
59
+ if (typeof value === 'number')
60
+ return Number.isFinite(value) ? value : String(value);
61
+ if (type === 'string')
62
+ return clip(value);
63
+ if (type === 'boolean')
64
+ return value;
65
+ if (type === 'function') {
66
+ const fn = value;
67
+ return { fn: clip(Function.prototype.toString.call(fn)).slice(0, 300) };
68
+ }
69
+ if (typeof value !== 'object')
70
+ return typeof value === 'symbol' || typeof value === 'bigint'
71
+ ? value.toString()
72
+ : '[unknown]';
73
+ if (value instanceof Element)
74
+ return { el: pathOf(value) };
75
+ if (value === window || value === document)
76
+ return { el: value === window ? 'window' : 'document' };
77
+ if (depth > 4)
78
+ return '[depth]';
79
+ if (Array.isArray(value))
80
+ return value.slice(0, 50).map((item) => safe(item, depth + 1));
81
+ if (ArrayBuffer.isView(value))
82
+ return `[${value.constructor.name}]`;
83
+ if (typeof NodeList !== 'undefined' && value instanceof NodeList) {
84
+ return Array.from(value)
85
+ .slice(0, 50)
86
+ .map((item) => safe(item, depth + 1));
87
+ }
88
+ const out = {};
89
+ let count = 0;
90
+ for (const key of Object.keys(value)) {
91
+ if (count++ > 60)
92
+ break;
93
+ out[key] = safe(value[key], depth + 1);
94
+ }
95
+ return out;
96
+ }
97
+ catch {
98
+ return '[unreadable]';
99
+ }
100
+ };
101
+ const wrap = (owner, key, after) => {
102
+ try {
103
+ const target = owner;
104
+ const original = target[key];
105
+ if (typeof original !== 'function')
106
+ return;
107
+ const fn = original;
108
+ const wrapped = function (...args) {
109
+ const result = fn.apply(this, args);
110
+ try {
111
+ after(args, result, this);
112
+ }
113
+ catch {
114
+ // Recording must never break the page.
115
+ }
116
+ return result;
117
+ };
118
+ Object.defineProperty(wrapped, 'name', { value: fn.name });
119
+ Object.defineProperty(wrapped, 'length', { value: fn.length });
120
+ wrapped.toString = () => Function.prototype.toString.call(fn);
121
+ Object.defineProperty(owner, key, { value: wrapped, writable: true, configurable: true });
122
+ }
123
+ catch {
124
+ // Frozen prototype.
125
+ }
126
+ };
127
+ // WAAPI: Element.animate catches Motion/Framer, GSAP-free libraries and hand-written code.
128
+ wrap(Element.prototype, 'animate', (args, _result, self) => {
129
+ const options = args[1];
130
+ push('waapi', {
131
+ t: now(),
132
+ target: pathOf(self),
133
+ keyframes: safe(args[0]),
134
+ options: typeof options === 'number' ? { duration: options } : safe(options),
135
+ });
136
+ });
137
+ // IntersectionObserver: reveal-on-scroll thresholds and root margins.
138
+ try {
139
+ const Native = window.IntersectionObserver;
140
+ if (typeof Native === 'function') {
141
+ const observers = new WeakMap();
142
+ let nextId = 0;
143
+ const Patched = function (callback, options) {
144
+ const instance = new Native(callback, options);
145
+ const id = nextId++;
146
+ observers.set(instance, id);
147
+ push('intersection', {
148
+ t: now(),
149
+ id,
150
+ options: safe({
151
+ root: options?.root ?? null,
152
+ rootMargin: options?.rootMargin ?? '0px',
153
+ threshold: options?.threshold ?? 0,
154
+ }),
155
+ callback: clip(Function.prototype.toString.call(callback)).slice(0, 400),
156
+ targets: [],
157
+ });
158
+ return instance;
159
+ };
160
+ Patched.prototype = Native.prototype;
161
+ Object.setPrototypeOf(Patched, Native);
162
+ wrap(Native.prototype, 'observe', (args, _r, self) => {
163
+ const id = observers.get(self);
164
+ const list = (rec.intersection ?? []);
165
+ const entry = list.find((item) => item.id === id);
166
+ if (entry && entry.targets.length < 200)
167
+ entry.targets.push(pathOf(args[0]));
168
+ });
169
+ Object.defineProperty(window, 'IntersectionObserver', {
170
+ value: Patched,
171
+ writable: true,
172
+ configurable: true,
173
+ });
174
+ }
175
+ }
176
+ catch {
177
+ // Unsupported.
178
+ }
179
+ // WebGL: real shader text, uniform names and context attributes.
180
+ for (const ctorName of ['WebGLRenderingContext', 'WebGL2RenderingContext']) {
181
+ const ctor = window[ctorName];
182
+ if (!ctor)
183
+ continue;
184
+ wrap(ctor.prototype, 'shaderSource', (args) => {
185
+ const source = typeof args[1] === 'string' ? args[1] : '';
186
+ const list = (rec.shaders ?? []);
187
+ if (list.some((item) => item.source === source))
188
+ return;
189
+ push('shaders', { t: now(), api: ctorName, source: source.slice(0, 200_000) });
190
+ });
191
+ wrap(ctor.prototype, 'getUniformLocation', (args) => {
192
+ const name = String(args[1]);
193
+ const list = (rec.uniforms ?? []);
194
+ if (!list.includes(name))
195
+ push('uniforms', name);
196
+ });
197
+ }
198
+ wrap(HTMLCanvasElement.prototype, 'getContext', (args, result, self) => {
199
+ if (!result || !/webgl|2d|bitmaprenderer|webgpu/.test(String(args[0])))
200
+ return;
201
+ const canvas = self;
202
+ push('contexts', {
203
+ t: now(),
204
+ type: String(args[0]),
205
+ canvas: pathOf(canvas),
206
+ size: [canvas.width, canvas.height],
207
+ attributes: safe(args[1] ?? null),
208
+ });
209
+ });
210
+ // three.js announces itself and every scene/renderer through this devtools hook.
211
+ try {
212
+ const target = new EventTarget();
213
+ const existing = w.__THREE_DEVTOOLS__ ?? target;
214
+ existing.addEventListener('register', (event) => {
215
+ push('three', { t: now(), kind: 'register', revision: safe(event.detail) });
216
+ });
217
+ existing.addEventListener('observe', (event) => {
218
+ const object = event.detail;
219
+ if (!object)
220
+ return;
221
+ push('three', { t: now(), kind: 'observe', object });
222
+ });
223
+ if (!w.__THREE_DEVTOOLS__)
224
+ Object.defineProperty(w, '__THREE_DEVTOOLS__', {
225
+ value: target,
226
+ configurable: true,
227
+ writable: true,
228
+ });
229
+ }
230
+ catch {
231
+ // Unsupported.
232
+ }
233
+ // customElements: names and the source head of each class.
234
+ try {
235
+ wrap(CustomElementRegistry.prototype, 'define', (args) => {
236
+ push('customElements', { t: now(), name: String(args[0]), ctor: safe(args[1]) });
237
+ });
238
+ }
239
+ catch {
240
+ // Unsupported.
241
+ }
242
+ // Lottie and Rive set globals after load; hook them when they appear.
243
+ const hookGlobal = (name, install) => {
244
+ let stored = w[name];
245
+ if (stored) {
246
+ install(stored);
247
+ return;
248
+ }
249
+ try {
250
+ Object.defineProperty(w, name, {
251
+ configurable: true,
252
+ enumerable: true,
253
+ get: () => stored,
254
+ set: (value) => {
255
+ stored = value;
256
+ try {
257
+ if (value && (typeof value === 'object' || typeof value === 'function'))
258
+ install(value);
259
+ }
260
+ catch {
261
+ // Ignore.
262
+ }
263
+ },
264
+ });
265
+ }
266
+ catch {
267
+ // Non-configurable.
268
+ }
269
+ };
270
+ const installLottie = (lottie) => {
271
+ wrap(lottie, 'loadAnimation', (args) => {
272
+ const params = (args[0] ?? {});
273
+ push('lottie', {
274
+ t: now(),
275
+ container: pathOf(params.container),
276
+ path: params.path ?? null,
277
+ renderer: params.renderer ?? null,
278
+ loop: params.loop ?? null,
279
+ autoplay: params.autoplay ?? null,
280
+ animationData: params.animationData ? '[inline JSON]' : null,
281
+ rendererSettings: safe(params.rendererSettings ?? null),
282
+ });
283
+ });
284
+ };
285
+ hookGlobal('lottie', installLottie);
286
+ hookGlobal('bodymovin', installLottie);
287
+ hookGlobal('rive', (rive) => {
288
+ const Native = rive.Rive;
289
+ if (typeof Native !== 'function')
290
+ return;
291
+ const Patched = function (params) {
292
+ push('rive', {
293
+ t: now(),
294
+ src: params.src ?? null,
295
+ canvas: pathOf(params.canvas),
296
+ artboard: params.artboard ?? null,
297
+ stateMachines: safe(params.stateMachines ?? null),
298
+ animations: safe(params.animations ?? null),
299
+ autoplay: params.autoplay ?? null,
300
+ layout: safe(params.layout ?? null),
301
+ });
302
+ return new Native(params);
303
+ };
304
+ Patched.prototype = Native.prototype;
305
+ try {
306
+ rive.Rive = Patched;
307
+ }
308
+ catch {
309
+ // Frozen module object.
310
+ }
311
+ });
312
+ }
313
+ /** Reads recorder buckets plus live library state (GSAP, ScrollTrigger, Lenis). Self-contained. */
314
+ export function readRecordings(limits) {
315
+ const w = window;
316
+ const rec = (w.__mcRec ?? {});
317
+ const out = {};
318
+ for (const key of Object.keys(rec))
319
+ out[key] = rec[key];
320
+ const clip = (text) => text.length > limits.maxText ? `${text.slice(0, limits.maxText)}…` : text;
321
+ const pathOf = (el) => {
322
+ if (!(el instanceof Element))
323
+ return typeof el === 'string' ? el : '';
324
+ const parts = [];
325
+ let node = el;
326
+ for (let depth = 0; node && depth < 40; depth++) {
327
+ const tag = node.tagName.toLowerCase();
328
+ if (tag === 'html' || tag === 'body') {
329
+ parts.unshift(tag);
330
+ break;
331
+ }
332
+ const id = node.getAttribute('id');
333
+ if (id && /^[A-Za-z][\w-]*$/.test(id) && !/\d{4,}|^:r|^radix-|^headlessui-/i.test(id)) {
334
+ parts.unshift(`#${id}`);
335
+ break;
336
+ }
337
+ const parent = node.parentElement;
338
+ const current = node;
339
+ const same = parent
340
+ ? Array.from(parent.children).filter((c) => c.tagName === current.tagName)
341
+ : [];
342
+ parts.unshift(same.length > 1 ? `${tag}:nth-of-type(${String(same.indexOf(current) + 1)})` : tag);
343
+ node = parent;
344
+ }
345
+ return parts.join(' > ');
346
+ };
347
+ const safe = (value, depth = 0) => {
348
+ try {
349
+ if (value === null || value === undefined)
350
+ return null;
351
+ const type = typeof value;
352
+ if (typeof value === 'number')
353
+ return Number.isFinite(value) ? value : String(value);
354
+ if (type === 'string')
355
+ return clip(value);
356
+ if (type === 'boolean')
357
+ return value;
358
+ if (type === 'function')
359
+ return { fn: Function.prototype.toString.call(value).slice(0, 200) };
360
+ if (typeof value !== 'object')
361
+ return typeof value === 'symbol' || typeof value === 'bigint'
362
+ ? value.toString()
363
+ : '[unknown]';
364
+ if (value instanceof Element)
365
+ return { el: pathOf(value) };
366
+ if (value === window || value === document)
367
+ return { el: value === window ? 'window' : 'document' };
368
+ if (depth > 3)
369
+ return '[depth]';
370
+ if (Array.isArray(value) || (typeof NodeList !== 'undefined' && value instanceof NodeList)) {
371
+ return Array.from(value)
372
+ .slice(0, 40)
373
+ .map((item) => safe(item, depth + 1));
374
+ }
375
+ const record = {};
376
+ let count = 0;
377
+ for (const key of Object.keys(value)) {
378
+ if (key.startsWith('_') || count++ > 50)
379
+ continue;
380
+ record[key] = safe(value[key], depth + 1);
381
+ }
382
+ return record;
383
+ }
384
+ catch {
385
+ return '[unreadable]';
386
+ }
387
+ };
388
+ const find = (names) => {
389
+ for (const name of names) {
390
+ const value = w[name];
391
+ if (value && (typeof value === 'object' || typeof value === 'function'))
392
+ return value;
393
+ }
394
+ return null;
395
+ };
396
+ try {
397
+ const gsap = find(['gsap', 'TweenMax']);
398
+ const timeline = gsap?.globalTimeline;
399
+ if (gsap && timeline?.getChildren) {
400
+ const children = timeline.getChildren(true, true, true).slice(0, limits.maxEntries);
401
+ out.gsap = {
402
+ version: gsap.version ?? null,
403
+ tweens: children.map((child) => {
404
+ const c = child;
405
+ const vars = { ...(c.vars ?? {}) };
406
+ return {
407
+ type: typeof c.targets === 'function' ? 'tween' : 'timeline',
408
+ targets: typeof c.targets === 'function'
409
+ ? c
410
+ .targets()
411
+ .slice(0, 20)
412
+ .map((t) => pathOf(t))
413
+ : [],
414
+ duration: typeof c.duration === 'function' ? c.duration() : null,
415
+ start: typeof c.startTime === 'function' ? c.startTime() : null,
416
+ nested: c.parent !== timeline,
417
+ vars: safe(vars),
418
+ };
419
+ }),
420
+ };
421
+ }
422
+ }
423
+ catch (error) {
424
+ out.gsapError = String(error);
425
+ }
426
+ try {
427
+ const ScrollTrigger = find(['ScrollTrigger']) ??
428
+ w.gsap?.plugins?.scrollTrigger;
429
+ const getAll = ScrollTrigger?.getAll;
430
+ if (typeof getAll === 'function') {
431
+ out.scrollTriggers = getAll
432
+ .call(ScrollTrigger)
433
+ .slice(0, limits.maxEntries)
434
+ .map((item) => {
435
+ const st = item;
436
+ return {
437
+ trigger: pathOf(st.trigger),
438
+ pin: pathOf(st.pin),
439
+ start: st.start ?? null,
440
+ end: st.end ?? null,
441
+ scrub: st.vars?.scrub ?? null,
442
+ toggleActions: st.vars?.toggleActions ?? null,
443
+ snap: safe(st.vars?.snap ?? null),
444
+ markers: Boolean(st.vars?.markers),
445
+ vars: safe(st.vars ?? {}),
446
+ animation: st.animation
447
+ ? { duration: st.animation.duration?.() ?? null, vars: safe(st.animation.vars ?? {}) }
448
+ : null,
449
+ };
450
+ });
451
+ }
452
+ }
453
+ catch (error) {
454
+ out.scrollTriggerError = String(error);
455
+ }
456
+ try {
457
+ const lenis = find(['lenis', '__lenis', 'Lenis']);
458
+ const instance = lenis && typeof lenis === 'object' && 'options' in lenis ? lenis : null;
459
+ if (instance)
460
+ out.lenis = { options: safe(instance.options), isSmooth: instance.isSmooth ?? null };
461
+ }
462
+ catch (error) {
463
+ out.lenisError = String(error);
464
+ }
465
+ try {
466
+ const loco = find(['locomotiveScroll', 'scroll', 'locoScroll']);
467
+ if (loco && typeof loco === 'object' && 'scroll' in loco && 'options' in loco)
468
+ out.locomotive = { options: safe(loco.options) };
469
+ }
470
+ catch {
471
+ // Not present.
472
+ }
473
+ try {
474
+ const three = w.THREE;
475
+ if (three?.REVISION)
476
+ out.threeRevision = three.REVISION;
477
+ }
478
+ catch {
479
+ // Not present.
480
+ }
481
+ try {
482
+ out.documentAnimations = document
483
+ .getAnimations()
484
+ .slice(0, limits.maxEntries)
485
+ .map((animation) => {
486
+ const effect = animation.effect;
487
+ return {
488
+ type: animation.constructor.name,
489
+ name: animation instanceof CSSAnimation
490
+ ? animation.animationName
491
+ : animation instanceof CSSTransition
492
+ ? animation.transitionProperty
493
+ : animation.id || null,
494
+ playState: animation.playState,
495
+ target: pathOf(effect?.target ?? null),
496
+ timing: effect ? safe(effect.getComputedTiming()) : null,
497
+ keyframes: effect ? safe(effect.getKeyframes()) : null,
498
+ timeline: animation.timeline ? animation.timeline.constructor.name : null,
499
+ };
500
+ });
501
+ }
502
+ catch {
503
+ // Unsupported.
504
+ }
505
+ return out;
506
+ }
507
+ //# sourceMappingURL=recorders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorders.js","sourceRoot":"","sources":["../../../src/capture/hooks/recorders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Splits the page into vertical sections: landmarks and large direct blocks of the main content,
3
+ * plus pinned wrappers taller than the viewport. Self-contained (runs in the page).
4
+ */
5
+ export function sectionsProbe(limits, helpers) {
6
+ const vh = window.innerHeight;
7
+ const slug = (text) => text
8
+ .toLowerCase()
9
+ .replace(/[^a-z0-9]+/g, '-')
10
+ .replace(/^-|-$/g, '')
11
+ .slice(0, 32) || 'section';
12
+ const labelFor = (el, index) => {
13
+ const heading = el.querySelector('h1, h2, h3, [role=heading]');
14
+ const aria = el.getAttribute('aria-label') ?? el.getAttribute('id') ?? '';
15
+ const text = heading?.textContent.trim() ?? aria;
16
+ const tag = el.tagName.toLowerCase();
17
+ return slug(text ||
18
+ (tag === 'header' || tag === 'footer' || tag === 'nav'
19
+ ? tag
20
+ : `block-${String(index + 1)}`));
21
+ };
22
+ // Descend through wrappers that only hold one big child, to the level where blocks stack.
23
+ let container = document.querySelector('main') ?? document.body;
24
+ for (let depth = 0; depth < 6; depth++) {
25
+ const big = Array.from(container.children).filter((child) => child.getBoundingClientRect().height > vh * 0.3);
26
+ if (big.length !== 1 || !big[0])
27
+ break;
28
+ container = big[0];
29
+ }
30
+ const blocks = [];
31
+ const header = document.querySelector('body > header, header[role=banner], [role=banner]');
32
+ if (header && !container.contains(header))
33
+ blocks.push(header);
34
+ for (const child of Array.from(container.children)) {
35
+ const rect = child.getBoundingClientRect();
36
+ if (rect.height < 80 || rect.width < window.innerWidth * 0.5)
37
+ continue;
38
+ blocks.push(child);
39
+ }
40
+ const footer = document.querySelector('body > footer, footer[role=contentinfo], [role=contentinfo]');
41
+ if (footer && !container.contains(footer))
42
+ blocks.push(footer);
43
+ const used = new Map();
44
+ const out = [];
45
+ for (const [index, el] of blocks.entries()) {
46
+ const rect = el.getBoundingClientRect();
47
+ let label = labelFor(el, index);
48
+ const count = used.get(label) ?? 0;
49
+ used.set(label, count + 1);
50
+ if (count)
51
+ label = `${label}-${String(count + 1)}`;
52
+ out.push({
53
+ label,
54
+ path: helpers.path(el),
55
+ top: Math.round(rect.top + window.scrollY),
56
+ bottom: Math.round(rect.bottom + window.scrollY),
57
+ });
58
+ }
59
+ out.sort((a, b) => a.top - b.top);
60
+ return out.slice(0, limits.max);
61
+ }
62
+ //# sourceMappingURL=sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../../src/capture/hooks/sections.ts"],"names":[],"mappings":"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"}