multiclone 0.2.1 → 0.3.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 (46) hide show
  1. package/README.md +4 -4
  2. package/agents/section-builder.md +5 -3
  3. package/commands/multiclone.md +2 -2
  4. package/dist/contracts/tools/session.js +9 -8
  5. package/dist/contracts/tools/session.js.map +1 -1
  6. package/dist/project/assets.js +15 -13
  7. package/dist/project/assets.js.map +1 -1
  8. package/dist/project/convert/attrs.js +318 -0
  9. package/dist/project/convert/attrs.js.map +1 -0
  10. package/dist/project/convert/convert.js +304 -0
  11. package/dist/project/convert/convert.js.map +1 -0
  12. package/dist/project/convert/css.js +299 -0
  13. package/dist/project/convert/css.js.map +1 -0
  14. package/dist/project/convert/html.js +425 -0
  15. package/dist/project/convert/html.js.map +1 -0
  16. package/dist/project/convert/jsx.js +335 -0
  17. package/dist/project/convert/jsx.js.map +1 -0
  18. package/dist/project/convert/locate.js +180 -0
  19. package/dist/project/convert/locate.js.map +1 -0
  20. package/dist/project/convert/scripts.js +214 -0
  21. package/dist/project/convert/scripts.js.map +1 -0
  22. package/dist/project/convert/styles.js +228 -0
  23. package/dist/project/convert/styles.js.map +1 -0
  24. package/dist/project/convert/write.js +142 -0
  25. package/dist/project/convert/write.js.map +1 -0
  26. package/dist/project/fonts.js +131 -0
  27. package/dist/project/fonts.js.map +1 -0
  28. package/dist/project/libraries.js +28 -0
  29. package/dist/project/libraries.js.map +1 -0
  30. package/dist/project/method.js +1 -1
  31. package/dist/project/method.js.map +1 -1
  32. package/dist/project/scaffold.js +33 -6
  33. package/dist/project/scaffold.js.map +1 -1
  34. package/dist/session/proc.js +29 -1
  35. package/dist/session/proc.js.map +1 -1
  36. package/dist/session/session.js +47 -4
  37. package/dist/session/session.js.map +1 -1
  38. package/dist/version.js +1 -1
  39. package/package.json +1 -1
  40. package/skills/multiclone/SKILL.md +15 -5
  41. package/templates/react-vite/index.html +1 -1
  42. package/templates/react-vite/src/main.tsx +2 -2
  43. package/templates/react-vite/src/styles/index.css +0 -1
  44. package/dist/project/draft.js +0 -860
  45. package/dist/project/draft.js.map +0 -1
  46. package/templates/react-vite/src/styles/draft.css +0 -1
@@ -0,0 +1,425 @@
1
+ /**
2
+ * A small, forgiving HTML parser for converting captured pages: enough of the HTML5 tree rules
3
+ * (void elements, raw text, implied end tags, foreign SVG/MathML content) for real-world markup.
4
+ * Text and attribute values stay raw (entities included) so nothing is lost on the way to JSX.
5
+ */
6
+ const VOID = new Set([
7
+ 'area',
8
+ 'base',
9
+ 'br',
10
+ 'col',
11
+ 'embed',
12
+ 'hr',
13
+ 'img',
14
+ 'input',
15
+ 'link',
16
+ 'meta',
17
+ 'param',
18
+ 'source',
19
+ 'track',
20
+ 'wbr',
21
+ ]);
22
+ const RAW_TEXT = new Set([
23
+ 'script',
24
+ 'style',
25
+ 'textarea',
26
+ 'title',
27
+ 'xmp',
28
+ 'iframe',
29
+ 'noembed',
30
+ 'noframes',
31
+ 'noscript',
32
+ ]);
33
+ const CLOSES_P = new Set([
34
+ 'address',
35
+ 'article',
36
+ 'aside',
37
+ 'blockquote',
38
+ 'details',
39
+ 'dialog',
40
+ 'div',
41
+ 'dl',
42
+ 'fieldset',
43
+ 'figcaption',
44
+ 'figure',
45
+ 'footer',
46
+ 'form',
47
+ 'h1',
48
+ 'h2',
49
+ 'h3',
50
+ 'h4',
51
+ 'h5',
52
+ 'h6',
53
+ 'header',
54
+ 'hgroup',
55
+ 'hr',
56
+ 'main',
57
+ 'menu',
58
+ 'nav',
59
+ 'ol',
60
+ 'p',
61
+ 'pre',
62
+ 'section',
63
+ 'table',
64
+ 'ul',
65
+ ]);
66
+ const HEAD_TAGS = new Set(['meta', 'link', 'title', 'style', 'script', 'base', 'noscript']);
67
+ export function element(tag, attrs = [], parent = null, foreign = false) {
68
+ return { kind: 'element', tag, attrs, children: [], parent, foreign };
69
+ }
70
+ export function attr(node, name) {
71
+ const found = node.attrs.find(([key]) => key.toLowerCase() === name);
72
+ return found ? decodeEntities(found[1]) : null;
73
+ }
74
+ export function elementChildren(node) {
75
+ return node.children.filter((child) => child.kind === 'element');
76
+ }
77
+ /** Parses a whole document and guarantees html, head and body elements. */
78
+ export function parseDocument(source) {
79
+ const root = element('#document');
80
+ parseInto(root, source);
81
+ let html = elementChildren(root).find((node) => node.tag === 'html');
82
+ if (!html) {
83
+ html = element('html', [], root);
84
+ html.children.push(...root.children.splice(0));
85
+ for (const child of html.children)
86
+ child.parent = html;
87
+ root.children.push(html);
88
+ }
89
+ let head = elementChildren(html).find((node) => node.tag === 'head');
90
+ let body = elementChildren(html).find((node) => node.tag === 'body');
91
+ if (!head) {
92
+ head = element('head', [], html);
93
+ html.children.unshift(head);
94
+ }
95
+ if (!body) {
96
+ body = element('body', [], html);
97
+ for (const child of [...html.children]) {
98
+ if (child === head || child === body)
99
+ continue;
100
+ if (child.kind === 'element' && HEAD_TAGS.has(child.tag))
101
+ continue;
102
+ html.children.splice(html.children.indexOf(child), 1);
103
+ child.parent = body;
104
+ body.children.push(child);
105
+ }
106
+ html.children.push(body);
107
+ }
108
+ return { root, html, head, body };
109
+ }
110
+ function parseInto(root, source) {
111
+ const stack = [root];
112
+ const current = () => stack[stack.length - 1] ?? root;
113
+ const text = (raw) => {
114
+ if (!raw)
115
+ return;
116
+ const parent = current();
117
+ const last = parent.children[parent.children.length - 1];
118
+ if (last?.kind === 'text') {
119
+ parent.children[parent.children.length - 1] = { kind: 'text', raw: last.raw + raw, parent };
120
+ }
121
+ else
122
+ parent.children.push({ kind: 'text', raw, parent });
123
+ };
124
+ const closeTo = (index) => {
125
+ stack.length = Math.max(1, index);
126
+ };
127
+ const findOpen = (tag, boundary = []) => {
128
+ for (let i = stack.length - 1; i > 0; i--) {
129
+ const node = stack[i];
130
+ if (!node)
131
+ break;
132
+ if (node.tag.toLowerCase() === tag)
133
+ return i;
134
+ if (boundary.includes(node.tag.toLowerCase()))
135
+ return -1;
136
+ }
137
+ return -1;
138
+ };
139
+ const implyEnd = (tag) => {
140
+ const top = current().tag;
141
+ if (CLOSES_P.has(tag) && top === 'p')
142
+ stack.pop();
143
+ if (tag === 'li') {
144
+ const open = findOpen('li', ['ul', 'ol', 'menu']);
145
+ if (open > 0)
146
+ closeTo(open);
147
+ }
148
+ else if (tag === 'dt' || tag === 'dd') {
149
+ const open = Math.max(findOpen('dt', ['dl']), findOpen('dd', ['dl']));
150
+ if (open > 0)
151
+ closeTo(open);
152
+ }
153
+ else if (tag === 'option' || tag === 'optgroup') {
154
+ if (current().tag === 'option')
155
+ stack.pop();
156
+ if (tag === 'optgroup' && current().tag === 'optgroup')
157
+ stack.pop();
158
+ }
159
+ else if (tag === 'tr') {
160
+ const open = findOpen('tr', ['table', 'tbody', 'thead', 'tfoot']);
161
+ if (open > 0)
162
+ closeTo(open);
163
+ }
164
+ else if (tag === 'td' || tag === 'th') {
165
+ const open = Math.max(findOpen('td', ['tr', 'table']), findOpen('th', ['tr', 'table']));
166
+ if (open > 0)
167
+ closeTo(open);
168
+ }
169
+ else if (tag === 'tbody' || tag === 'thead' || tag === 'tfoot') {
170
+ for (const name of ['tbody', 'thead', 'tfoot']) {
171
+ const open = findOpen(name, ['table']);
172
+ if (open > 0)
173
+ closeTo(open);
174
+ }
175
+ }
176
+ };
177
+ let i = 0;
178
+ const length = source.length;
179
+ while (i < length) {
180
+ const lt = source.indexOf('<', i);
181
+ if (lt === -1) {
182
+ text(source.slice(i));
183
+ break;
184
+ }
185
+ if (lt > i)
186
+ text(source.slice(i, lt));
187
+ i = lt;
188
+ if (source.startsWith('<!--', i)) {
189
+ const end = source.indexOf('-->', i + 4);
190
+ i = end === -1 ? length : end + 3;
191
+ continue;
192
+ }
193
+ if (source.startsWith('<![CDATA[', i)) {
194
+ const end = source.indexOf(']]>', i + 9);
195
+ text(source.slice(i + 9, end === -1 ? length : end));
196
+ i = end === -1 ? length : end + 3;
197
+ continue;
198
+ }
199
+ const next = source[i + 1] ?? '';
200
+ if (next === '!' || next === '?') {
201
+ const end = source.indexOf('>', i);
202
+ i = end === -1 ? length : end + 1;
203
+ continue;
204
+ }
205
+ if (next === '/') {
206
+ const match = /^<\/([a-zA-Z][^\s/>]*)[^>]*>?/.exec(source.slice(i, i + 300));
207
+ if (!match?.[1]) {
208
+ text('<');
209
+ i += 1;
210
+ continue;
211
+ }
212
+ i += match[0].length;
213
+ const tag = match[1].toLowerCase();
214
+ if (tag === 'br') {
215
+ current().children.push(element('br', [], current()));
216
+ continue;
217
+ }
218
+ const open = findOpen(tag);
219
+ if (open > 0)
220
+ closeTo(open);
221
+ continue;
222
+ }
223
+ if (!/[a-zA-Z]/.test(next)) {
224
+ text('<');
225
+ i += 1;
226
+ continue;
227
+ }
228
+ const parsed = parseStartTag(source, i);
229
+ if (!parsed) {
230
+ text('<');
231
+ i += 1;
232
+ continue;
233
+ }
234
+ i = parsed.end;
235
+ const parent = current();
236
+ const inForeign = parent.foreign && parent.tag !== 'foreignObject';
237
+ const lower = parsed.tag.toLowerCase();
238
+ const foreign = inForeign || lower === 'svg' || lower === 'math';
239
+ const tag = foreign ? parsed.tag : lower;
240
+ const attrs = foreign
241
+ ? parsed.attrs
242
+ : parsed.attrs.map(([name, value]) => [name.toLowerCase(), value]);
243
+ if (!foreign)
244
+ implyEnd(tag);
245
+ const node = element(tag, attrs, current(), foreign);
246
+ current().children.push(node);
247
+ if (!foreign && VOID.has(tag))
248
+ continue;
249
+ if (parsed.selfClosing && foreign)
250
+ continue;
251
+ if (!foreign && RAW_TEXT.has(tag)) {
252
+ const close = new RegExp(`</${tag}\\s*>`, 'i');
253
+ const rest = source.slice(i);
254
+ const found = close.exec(rest);
255
+ const content = found ? rest.slice(0, found.index) : rest;
256
+ if (content)
257
+ node.children.push({ kind: 'text', raw: content, parent: node });
258
+ i += found ? found.index + found[0].length : rest.length;
259
+ continue;
260
+ }
261
+ stack.push(node);
262
+ }
263
+ }
264
+ function parseStartTag(source, start) {
265
+ const name = /^<([a-zA-Z][^\s/>]*)/.exec(source.slice(start, start + 200));
266
+ if (!name?.[1])
267
+ return null;
268
+ let i = start + name[0].length;
269
+ const attrs = [];
270
+ const seen = new Set();
271
+ const length = source.length;
272
+ for (;;) {
273
+ while (i < length && /\s/.test(source[i] ?? ''))
274
+ i++;
275
+ if (i >= length)
276
+ return { tag: name[1], attrs, selfClosing: false, end: length };
277
+ const ch = source[i];
278
+ if (ch === '>')
279
+ return { tag: name[1], attrs, selfClosing: false, end: i + 1 };
280
+ if (ch === '/' && source[i + 1] === '>')
281
+ return { tag: name[1], attrs, selfClosing: true, end: i + 2 };
282
+ if (ch === '/') {
283
+ i++;
284
+ continue;
285
+ }
286
+ let nameEnd = i;
287
+ while (nameEnd < length && !/[\s/>=]/.test(source[nameEnd] ?? ''))
288
+ nameEnd++;
289
+ if (nameEnd === i)
290
+ nameEnd = i + 1;
291
+ const attrName = source.slice(i, nameEnd);
292
+ i = nameEnd;
293
+ while (i < length && /\s/.test(source[i] ?? ''))
294
+ i++;
295
+ let value = '';
296
+ if (source[i] === '=') {
297
+ i++;
298
+ while (i < length && /\s/.test(source[i] ?? ''))
299
+ i++;
300
+ const quote = source[i];
301
+ if (quote === '"' || quote === "'") {
302
+ const close = source.indexOf(quote, i + 1);
303
+ value = source.slice(i + 1, close === -1 ? length : close);
304
+ i = close === -1 ? length : close + 1;
305
+ }
306
+ else {
307
+ let end = i;
308
+ while (end < length && !/[\s>]/.test(source[end] ?? ''))
309
+ end++;
310
+ value = source.slice(i, end);
311
+ i = end;
312
+ }
313
+ }
314
+ const key = attrName.toLowerCase();
315
+ if (!seen.has(key)) {
316
+ seen.add(key);
317
+ attrs.push([attrName, value]);
318
+ }
319
+ }
320
+ }
321
+ /** Serializes a node back to HTML (raw values, so the original entities survive). */
322
+ export function serialize(node) {
323
+ if (node.kind === 'text')
324
+ return node.raw;
325
+ const attrs = node.attrs
326
+ .map(([name, value]) => value === '' ? ` ${name}` : ` ${name}="${value.replace(/"/g, '&quot;')}"`)
327
+ .join('');
328
+ if (!node.foreign && VOID.has(node.tag))
329
+ return `<${node.tag}${attrs}>`;
330
+ if (node.foreign && !node.children.length)
331
+ return `<${node.tag}${attrs}/>`;
332
+ return `<${node.tag}${attrs}>${node.children.map(serialize).join('')}</${node.tag}>`;
333
+ }
334
+ export function innerHtml(node) {
335
+ return node.children.map(serialize).join('');
336
+ }
337
+ export function textContent(node) {
338
+ if (node.kind === 'text')
339
+ return decodeEntities(node.raw);
340
+ if (node.tag === 'script' || node.tag === 'style')
341
+ return '';
342
+ return node.children.map(textContent).join('');
343
+ }
344
+ const NAMED = {
345
+ amp: '&',
346
+ lt: '<',
347
+ gt: '>',
348
+ quot: '"',
349
+ apos: "'",
350
+ nbsp: '\u00a0',
351
+ copy: '©',
352
+ reg: '®',
353
+ trade: '™',
354
+ hellip: '…',
355
+ mdash: '—',
356
+ ndash: '–',
357
+ lsquo: '‘',
358
+ rsquo: '’',
359
+ ldquo: '“',
360
+ rdquo: '”',
361
+ laquo: '«',
362
+ raquo: '»',
363
+ bull: '•',
364
+ middot: '·',
365
+ times: '×',
366
+ divide: '÷',
367
+ deg: '°',
368
+ euro: '€',
369
+ pound: '£',
370
+ yen: '¥',
371
+ cent: '¢',
372
+ sect: '§',
373
+ para: '¶',
374
+ rarr: '→',
375
+ larr: '←',
376
+ uarr: '↑',
377
+ darr: '↓',
378
+ harr: '↔',
379
+ check: '✓',
380
+ star: '☆',
381
+ hearts: '♥',
382
+ zwj: '\u200d',
383
+ zwnj: '\u200c',
384
+ shy: '\u00ad',
385
+ thinsp: '\u2009',
386
+ ensp: '\u2002',
387
+ emsp: '\u2003',
388
+ iexcl: '¡',
389
+ iquest: '¿',
390
+ plusmn: '±',
391
+ frac12: '½',
392
+ frac14: '¼',
393
+ frac34: '¾',
394
+ sup2: '²',
395
+ sup3: '³',
396
+ micro: 'µ',
397
+ prime: '′',
398
+ Prime: '″',
399
+ minus: '−',
400
+ infin: '∞',
401
+ le: '≤',
402
+ ge: '≥',
403
+ ne: '≠',
404
+ asymp: '≈',
405
+ };
406
+ export function decodeEntities(raw) {
407
+ if (!raw.includes('&'))
408
+ return raw;
409
+ return raw.replace(/&(#x[0-9a-f]+|#\d+|[a-z][a-z0-9]*);?/gi, (match, body) => {
410
+ if (body.startsWith('#')) {
411
+ const hex = body[1] === 'x' || body[1] === 'X';
412
+ const code = Number.parseInt(body.slice(hex ? 2 : 1), hex ? 16 : 10);
413
+ if (!Number.isFinite(code) || code <= 0 || code > 0x10ffff)
414
+ return match;
415
+ return String.fromCodePoint(code);
416
+ }
417
+ const named = NAMED[body];
418
+ if (named === undefined)
419
+ return match;
420
+ return match.endsWith(';') || ['amp', 'lt', 'gt', 'quot', 'nbsp', 'copy', 'reg'].includes(body)
421
+ ? named
422
+ : match;
423
+ });
424
+ }
425
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/project/convert/html.ts"],"names":[],"mappings":"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"}