@nac3/forge-cli 0.2.0-alpha.37 → 0.2.0-alpha.39
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.
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +396 -29
- package/dist/chat/panel.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/chat/panel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAm0GxD"}
|
package/dist/chat/panel.js
CHANGED
|
@@ -150,6 +150,35 @@ body {
|
|
|
150
150
|
#yf-full .body .pizarra .pizarra-empty .kanji-big {
|
|
151
151
|
font-size: 96px; opacity: 0.4;
|
|
152
152
|
}
|
|
153
|
+
/* alpha.38 -- visible scrollbars inside pizarron (both axes).
|
|
154
|
+
The OS-native scrollbars are sometimes invisible on macOS until
|
|
155
|
+
hover; force always-visible + Yujin-themed so wide code / tall
|
|
156
|
+
docs do NOT silently truncate the content. */
|
|
157
|
+
#yf-full .pz-tab-body ::-webkit-scrollbar,
|
|
158
|
+
#yf-full .pz-body ::-webkit-scrollbar,
|
|
159
|
+
#yf-full .pz-edit-area::-webkit-scrollbar {
|
|
160
|
+
width: 10px; height: 10px;
|
|
161
|
+
}
|
|
162
|
+
#yf-full .pz-tab-body ::-webkit-scrollbar-thumb,
|
|
163
|
+
#yf-full .pz-body ::-webkit-scrollbar-thumb,
|
|
164
|
+
#yf-full .pz-edit-area::-webkit-scrollbar-thumb {
|
|
165
|
+
background: rgba(0,0,0,0.25); border-radius: 5px;
|
|
166
|
+
}
|
|
167
|
+
#yf-full .pz-tab-body ::-webkit-scrollbar-thumb:hover,
|
|
168
|
+
#yf-full .pz-body ::-webkit-scrollbar-thumb:hover,
|
|
169
|
+
#yf-full .pz-edit-area::-webkit-scrollbar-thumb:hover {
|
|
170
|
+
background: rgba(0,0,0,0.4);
|
|
171
|
+
}
|
|
172
|
+
#yf-full .pz-tab-body ::-webkit-scrollbar-track,
|
|
173
|
+
#yf-full .pz-body ::-webkit-scrollbar-track,
|
|
174
|
+
#yf-full .pz-edit-area::-webkit-scrollbar-track {
|
|
175
|
+
background: rgba(0,0,0,0.05);
|
|
176
|
+
}
|
|
177
|
+
/* Firefox */
|
|
178
|
+
#yf-full .pz-tab-body, #yf-full .pz-body, #yf-full .pz-edit-area {
|
|
179
|
+
scrollbar-width: thin; scrollbar-color: rgba(0,0,0,0.3) rgba(0,0,0,0.05);
|
|
180
|
+
}
|
|
181
|
+
|
|
153
182
|
/* alpha.35 -- multi-tab pizarron (VS Code-style). */
|
|
154
183
|
#yf-full .pz-tabs {
|
|
155
184
|
display: flex; gap: 2px; background: var(--bg-2);
|
|
@@ -216,19 +245,101 @@ body {
|
|
|
216
245
|
flex: 1; min-height: 0;
|
|
217
246
|
padding: 10px; overflow: auto;
|
|
218
247
|
font-size: 12px; background: var(--bg-0, white);
|
|
248
|
+
/* alpha.38 -- explicit scroll on both axes so wide code +
|
|
249
|
+
tall outputs are not truncated. */
|
|
250
|
+
overflow-x: auto; overflow-y: auto;
|
|
251
|
+
scrollbar-gutter: stable;
|
|
219
252
|
}
|
|
220
253
|
#yf-full .pz-body pre {
|
|
221
254
|
margin: 0; font-family: ui-monospace, "Cascadia Code", "JetBrains Mono", monospace;
|
|
222
|
-
font-size: 11px; line-height: 1.5;
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
228
|
-
#yf-full .pz-body
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
|
|
255
|
+
font-size: 11px; line-height: 1.5;
|
|
256
|
+
white-space: pre; /* no wrap -> horizontal scroll on long lines */
|
|
257
|
+
display: inline-block; /* shrink-to-fit so pre + scroll work together */
|
|
258
|
+
min-width: 100%;
|
|
259
|
+
}
|
|
260
|
+
#yf-full .pz-body.pz-markdown { line-height: 1.6; font-size: 13px; color: var(--ink); }
|
|
261
|
+
#yf-full .pz-body.pz-html { line-height: 1.5; color: var(--ink); }
|
|
262
|
+
#yf-full .pz-body.pz-html * { max-width: 100%; }
|
|
263
|
+
#yf-full .pz-body.pz-html img { max-width: 100%; height: auto; }
|
|
264
|
+
/* alpha.39 -- embellished markdown rendering. */
|
|
265
|
+
#yf-full .pz-body .pz-h {
|
|
266
|
+
margin: 14px 0 8px; font-weight: 600; color: var(--ink);
|
|
267
|
+
line-height: 1.3;
|
|
268
|
+
}
|
|
269
|
+
#yf-full .pz-body .pz-h1 { font-size: 20px; border-bottom: 2px solid var(--border); padding-bottom: 6px; }
|
|
270
|
+
#yf-full .pz-body .pz-h2 { font-size: 17px; border-bottom: 1px solid var(--border-subtle); padding-bottom: 4px; }
|
|
271
|
+
#yf-full .pz-body .pz-h3 { font-size: 15px; }
|
|
272
|
+
#yf-full .pz-body .pz-h4 { font-size: 14px; }
|
|
273
|
+
#yf-full .pz-body .pz-h5, #yf-full .pz-body .pz-h6 { font-size: 13px; color: var(--ink-2); }
|
|
274
|
+
#yf-full .pz-body .pz-p { margin: 8px 0; line-height: 1.6; }
|
|
275
|
+
#yf-full .pz-body .pz-ul, #yf-full .pz-body .pz-ol {
|
|
276
|
+
margin: 8px 0; padding-left: 28px; line-height: 1.6;
|
|
277
|
+
}
|
|
278
|
+
#yf-full .pz-body .pz-ul li, #yf-full .pz-body .pz-ol li { margin: 4px 0; }
|
|
279
|
+
#yf-full .pz-body .pz-ul li::marker { color: var(--ink-2); }
|
|
280
|
+
#yf-full .pz-body .pz-ol li::marker { color: var(--ink-2); font-weight: 600; }
|
|
281
|
+
#yf-full .pz-body .pz-quote {
|
|
282
|
+
margin: 8px 0; padding: 6px 12px; border-left: 3px solid var(--border);
|
|
283
|
+
background: rgba(0,0,0,0.03); color: var(--ink-2); font-style: italic;
|
|
284
|
+
}
|
|
285
|
+
#yf-full .pz-body .pz-hr {
|
|
286
|
+
margin: 16px 0; border: none; border-top: 1px solid var(--border);
|
|
287
|
+
}
|
|
288
|
+
/* Tablas markdown encuadradas + zebra stripes. */
|
|
289
|
+
#yf-full .pz-body .pz-table {
|
|
290
|
+
width: 100%; border-collapse: collapse; margin: 10px 0;
|
|
291
|
+
font-size: 12px; border: 1px solid var(--border);
|
|
292
|
+
border-radius: 4px; overflow: hidden;
|
|
293
|
+
}
|
|
294
|
+
#yf-full .pz-body .pz-table th,
|
|
295
|
+
#yf-full .pz-body .pz-table td {
|
|
296
|
+
padding: 6px 10px;
|
|
297
|
+
border: 1px solid var(--border-subtle);
|
|
298
|
+
}
|
|
299
|
+
#yf-full .pz-body .pz-table th {
|
|
300
|
+
background: var(--bg-2); font-weight: 600;
|
|
301
|
+
color: var(--ink); text-transform: uppercase;
|
|
302
|
+
font-size: 10px; letter-spacing: 0.5px;
|
|
303
|
+
}
|
|
304
|
+
#yf-full .pz-body .pz-table tbody tr:nth-child(even) { background: rgba(0,0,0,0.025); }
|
|
305
|
+
#yf-full .pz-body .pz-table tbody tr:hover { background: rgba(0,0,0,0.05); }
|
|
306
|
+
/* Inline code + code blocks. */
|
|
307
|
+
#yf-full .pz-body code {
|
|
308
|
+
font-family: ui-monospace, "Cascadia Code", monospace;
|
|
309
|
+
font-size: 0.92em; background: rgba(0,0,0,0.06);
|
|
310
|
+
padding: 1px 5px; border-radius: 3px; color: #c0392b;
|
|
311
|
+
}
|
|
312
|
+
#yf-full .pz-body pre.pz-code {
|
|
313
|
+
margin: 10px 0; padding: 12px; background: #f6f8fa;
|
|
314
|
+
border: 1px solid var(--border); border-radius: 4px;
|
|
315
|
+
overflow-x: auto; font-size: 11px; line-height: 1.5;
|
|
316
|
+
position: relative;
|
|
317
|
+
}
|
|
318
|
+
#yf-full .pz-body pre.pz-code[data-lang]::before {
|
|
319
|
+
content: attr(data-lang);
|
|
320
|
+
position: absolute; top: 4px; right: 8px;
|
|
321
|
+
font-size: 9px; color: var(--ink-2); text-transform: uppercase;
|
|
322
|
+
letter-spacing: 0.5px;
|
|
323
|
+
}
|
|
324
|
+
#yf-full .pz-body pre.pz-code code {
|
|
325
|
+
background: transparent; padding: 0; color: var(--ink);
|
|
326
|
+
}
|
|
327
|
+
#yf-full .pz-body pre.pz-tree {
|
|
328
|
+
margin: 0; padding: 10px; font-size: 11px;
|
|
329
|
+
font-family: ui-monospace, monospace;
|
|
330
|
+
line-height: 1.45;
|
|
331
|
+
}
|
|
332
|
+
#yf-full .pz-body a {
|
|
333
|
+
color: #2563eb; text-decoration: underline;
|
|
334
|
+
}
|
|
335
|
+
#yf-full .pz-body a.fpath {
|
|
336
|
+
color: #2e7d32; font-family: monospace; text-decoration: none;
|
|
337
|
+
border-bottom: 1px dashed currentColor;
|
|
338
|
+
}
|
|
339
|
+
#yf-full .pz-body a.fpath:hover { background: rgba(46,125,50,0.08); }
|
|
340
|
+
#yf-full .pz-body strong { font-weight: 600; color: var(--ink); }
|
|
341
|
+
#yf-full .pz-body em { font-style: italic; }
|
|
342
|
+
#yf-full .pz-body s { color: var(--ink-2); }
|
|
232
343
|
#yf-full .pz-edit-wrap {
|
|
233
344
|
flex: 1; min-height: 0;
|
|
234
345
|
display: flex; flex-direction: column;
|
|
@@ -241,6 +352,9 @@ body {
|
|
|
241
352
|
border: none; outline: none;
|
|
242
353
|
padding: 12px; resize: none;
|
|
243
354
|
tab-size: 2;
|
|
355
|
+
/* alpha.38 -- NO word wrap in the editor; long lines scroll
|
|
356
|
+
horizontally so indentation + code structure stay intact. */
|
|
357
|
+
white-space: pre; overflow: auto; word-wrap: normal;
|
|
244
358
|
}
|
|
245
359
|
#yf-full .pz-edit-actions {
|
|
246
360
|
display: flex; gap: 6px; padding: 6px 10px; align-items: center;
|
|
@@ -886,6 +1000,186 @@ function renderMd(src) {
|
|
|
886
1000
|
return out;
|
|
887
1001
|
}
|
|
888
1002
|
|
|
1003
|
+
/* alpha.39 -- renderer markdown completo para pizarron.
|
|
1004
|
+
* Soporta:
|
|
1005
|
+
* - headings (# .. ######)
|
|
1006
|
+
* - lists (-, *, +, 1.) con anidamiento por indentacion
|
|
1007
|
+
* - tables markdown (| col | col |)
|
|
1008
|
+
* - blockquotes
|
|
1009
|
+
* - code fences con lenguaje
|
|
1010
|
+
* - inline code, bold, italic
|
|
1011
|
+
* - links + file path linkify
|
|
1012
|
+
* - horizontal rules
|
|
1013
|
+
*
|
|
1014
|
+
* NO usa libs externas -- parser line-based simple. Suficiente
|
|
1015
|
+
* para tablas + listas + headings + code blocks que el LLM
|
|
1016
|
+
* produce. ASCII-only.
|
|
1017
|
+
*/
|
|
1018
|
+
function renderMdRich(src) {
|
|
1019
|
+
const text = String(src || '');
|
|
1020
|
+
/* Split into lines BEFORE escape so we can detect block
|
|
1021
|
+
structure cleanly. Code fences eat their content raw. */
|
|
1022
|
+
const lines = text.split(/\\r?\\n/);
|
|
1023
|
+
const out = [];
|
|
1024
|
+
let i = 0;
|
|
1025
|
+
/* Helper: inline transformations applied per text fragment
|
|
1026
|
+
(already html-escaped). */
|
|
1027
|
+
function inline(s) {
|
|
1028
|
+
let r = s;
|
|
1029
|
+
/* inline code (backtick wrapped) */
|
|
1030
|
+
r = r.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
|
|
1031
|
+
/* bold (double-asterisk wrapped) */
|
|
1032
|
+
r = r.replace(/\\*\\*([^*]+?)\\*\\*/g, '<strong>$1</strong>');
|
|
1033
|
+
/* italic (underscore wrapped, avoiding mid-word) */
|
|
1034
|
+
r = r.replace(/(^|[\\s>])_([^_\\s][^_]*?)_(?=[\\s.,;:!?)]|\$)/g,
|
|
1035
|
+
'$1<em>$2</em>');
|
|
1036
|
+
/* strikethrough (double-tilde wrapped) */
|
|
1037
|
+
r = r.replace(/~~([^~]+?)~~/g, '<s>$1</s>');
|
|
1038
|
+
/* links of the form [label](url) */
|
|
1039
|
+
r = r.replace(/\\[([^\\]]+)\\]\\(([^)\\s]+)\\)/g,
|
|
1040
|
+
'<a href="$2" target="_blank" rel="noopener">$1</a>');
|
|
1041
|
+
/* file paths */
|
|
1042
|
+
r = r.replace(
|
|
1043
|
+
/(?<![\\w/])((?:src|tests|docs|packages|apps|scripts)\\/[\\w./-]+(?:\\.[\\w]+)(?::\\d+(?::\\d+)?)?)/g,
|
|
1044
|
+
'<a class="fpath" data-fpath="$1" href="#" title="Abrir">$1</a>',
|
|
1045
|
+
);
|
|
1046
|
+
return r;
|
|
1047
|
+
}
|
|
1048
|
+
/* Parse a table starting at index i. Returns the rendered
|
|
1049
|
+
HTML and the new index, or null if not a valid table. */
|
|
1050
|
+
function tryTable(start) {
|
|
1051
|
+
if (start >= lines.length) return null;
|
|
1052
|
+
const row0 = lines[start];
|
|
1053
|
+
if (!/^\\s*\\|.*\\|\\s*\$/.test(row0)) return null;
|
|
1054
|
+
if (start + 1 >= lines.length) return null;
|
|
1055
|
+
const sep = lines[start + 1];
|
|
1056
|
+
if (!/^\\s*\\|?\\s*:?-+:?(?:\\s*\\|\\s*:?-+:?)+\\|?\\s*\$/.test(sep)) return null;
|
|
1057
|
+
const cells = (row) => row.trim().replace(/^\\|/, '').replace(/\\|\$/, '').split('|').map((c) => c.trim());
|
|
1058
|
+
const header = cells(row0);
|
|
1059
|
+
const aligns = cells(sep).map((s) => {
|
|
1060
|
+
const l = s.startsWith(':'); const r = s.endsWith(':');
|
|
1061
|
+
if (l && r) return 'center';
|
|
1062
|
+
if (r) return 'right';
|
|
1063
|
+
return 'left';
|
|
1064
|
+
});
|
|
1065
|
+
const rows = [];
|
|
1066
|
+
let j = start + 2;
|
|
1067
|
+
while (j < lines.length && /^\\s*\\|.*\\|\\s*\$/.test(lines[j])) {
|
|
1068
|
+
rows.push(cells(lines[j]));
|
|
1069
|
+
j += 1;
|
|
1070
|
+
}
|
|
1071
|
+
let html = '<table class="pz-table"><thead><tr>';
|
|
1072
|
+
header.forEach((h, k) => {
|
|
1073
|
+
html += '<th style="text-align:' + (aligns[k] || 'left') + '">' + inline(escapeHtml(h)) + '</th>';
|
|
1074
|
+
});
|
|
1075
|
+
html += '</tr></thead><tbody>';
|
|
1076
|
+
for (const row of rows) {
|
|
1077
|
+
html += '<tr>';
|
|
1078
|
+
row.forEach((cell, k) => {
|
|
1079
|
+
html += '<td style="text-align:' + (aligns[k] || 'left') + '">' + inline(escapeHtml(cell)) + '</td>';
|
|
1080
|
+
});
|
|
1081
|
+
html += '</tr>';
|
|
1082
|
+
}
|
|
1083
|
+
html += '</tbody></table>';
|
|
1084
|
+
return { html, next: j };
|
|
1085
|
+
}
|
|
1086
|
+
while (i < lines.length) {
|
|
1087
|
+
const line = lines[i];
|
|
1088
|
+
/* Code fence */
|
|
1089
|
+
const fence = line.match(/^\\s*\`\`\`([a-zA-Z0-9_+-]*)\\s*\$/);
|
|
1090
|
+
if (fence) {
|
|
1091
|
+
const lang = fence[1] || '';
|
|
1092
|
+
const body = [];
|
|
1093
|
+
i += 1;
|
|
1094
|
+
while (i < lines.length && !/^\\s*\`\`\`\\s*\$/.test(lines[i])) {
|
|
1095
|
+
body.push(lines[i]); i += 1;
|
|
1096
|
+
}
|
|
1097
|
+
if (i < lines.length) i += 1; /* skip closing */
|
|
1098
|
+
out.push('<pre class="pz-code"' + (lang ? ' data-lang="' + escapeHtml(lang) + '"' : '') + '><code>'
|
|
1099
|
+
+ escapeHtml(body.join('\\n')) + '</code></pre>');
|
|
1100
|
+
continue;
|
|
1101
|
+
}
|
|
1102
|
+
/* Horizontal rule */
|
|
1103
|
+
if (/^\\s*(?:-{3,}|_{3,}|\\*{3,})\\s*\$/.test(line)) {
|
|
1104
|
+
out.push('<hr class="pz-hr">'); i += 1; continue;
|
|
1105
|
+
}
|
|
1106
|
+
/* Heading */
|
|
1107
|
+
const h = line.match(/^\\s*(#{1,6})\\s+(.+?)\\s*#*\\s*\$/);
|
|
1108
|
+
if (h) {
|
|
1109
|
+
const level = h[1].length;
|
|
1110
|
+
out.push('<h' + level + ' class="pz-h pz-h' + level + '">' + inline(escapeHtml(h[2])) + '</h' + level + '>');
|
|
1111
|
+
i += 1; continue;
|
|
1112
|
+
}
|
|
1113
|
+
/* Blockquote */
|
|
1114
|
+
if (/^\\s*>\\s?/.test(line)) {
|
|
1115
|
+
const buf = [];
|
|
1116
|
+
while (i < lines.length && /^\\s*>\\s?/.test(lines[i])) {
|
|
1117
|
+
buf.push(lines[i].replace(/^\\s*>\\s?/, ''));
|
|
1118
|
+
i += 1;
|
|
1119
|
+
}
|
|
1120
|
+
out.push('<blockquote class="pz-quote">' + inline(escapeHtml(buf.join(' '))) + '</blockquote>');
|
|
1121
|
+
continue;
|
|
1122
|
+
}
|
|
1123
|
+
/* Table */
|
|
1124
|
+
const tbl = tryTable(i);
|
|
1125
|
+
if (tbl) { out.push(tbl.html); i = tbl.next; continue; }
|
|
1126
|
+
/* Unordered list */
|
|
1127
|
+
if (/^\\s*[-*+]\\s+/.test(line)) {
|
|
1128
|
+
out.push('<ul class="pz-ul">');
|
|
1129
|
+
while (i < lines.length && /^\\s*[-*+]\\s+/.test(lines[i])) {
|
|
1130
|
+
const item = lines[i].replace(/^\\s*[-*+]\\s+/, '');
|
|
1131
|
+
out.push('<li>' + inline(escapeHtml(item)) + '</li>');
|
|
1132
|
+
i += 1;
|
|
1133
|
+
}
|
|
1134
|
+
out.push('</ul>');
|
|
1135
|
+
continue;
|
|
1136
|
+
}
|
|
1137
|
+
/* Ordered list */
|
|
1138
|
+
if (/^\\s*\\d+[.)]\\s+/.test(line)) {
|
|
1139
|
+
out.push('<ol class="pz-ol">');
|
|
1140
|
+
while (i < lines.length && /^\\s*\\d+[.)]\\s+/.test(lines[i])) {
|
|
1141
|
+
const item = lines[i].replace(/^\\s*\\d+[.)]\\s+/, '');
|
|
1142
|
+
out.push('<li>' + inline(escapeHtml(item)) + '</li>');
|
|
1143
|
+
i += 1;
|
|
1144
|
+
}
|
|
1145
|
+
out.push('</ol>');
|
|
1146
|
+
continue;
|
|
1147
|
+
}
|
|
1148
|
+
/* Empty line -> paragraph separator. */
|
|
1149
|
+
if (line.trim() === '') {
|
|
1150
|
+
out.push(''); i += 1; continue;
|
|
1151
|
+
}
|
|
1152
|
+
/* Default: paragraph. Coalesce consecutive non-block lines. */
|
|
1153
|
+
const para = [];
|
|
1154
|
+
while (i < lines.length && lines[i].trim() !== ''
|
|
1155
|
+
&& !/^\\s*(#{1,6}\\s+|>\\s?|\\d+[.)]\\s+|[-*+]\\s+|\`\`\`|\\|)/.test(lines[i])) {
|
|
1156
|
+
para.push(lines[i]); i += 1;
|
|
1157
|
+
}
|
|
1158
|
+
if (para.length > 0) {
|
|
1159
|
+
out.push('<p class="pz-p">' + inline(escapeHtml(para.join(' '))) + '</p>');
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
return out.join('');
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
/* Sanitiser para kind='html': elimina <script>, <style>,
|
|
1166
|
+
* on* attrs, javascript: URIs. NO usa DOMParser para que sea
|
|
1167
|
+
* deterministico + sin side effects. */
|
|
1168
|
+
function sanitizeHtml(src) {
|
|
1169
|
+
let s = String(src || '');
|
|
1170
|
+
/* Strip script + style blocks completely. */
|
|
1171
|
+
s = s.replace(/<script\\b[\\s\\S]*?<\\/script>/gi, '');
|
|
1172
|
+
s = s.replace(/<style\\b[\\s\\S]*?<\\/style>/gi, '');
|
|
1173
|
+
/* Strip on* event handler attributes. */
|
|
1174
|
+
s = s.replace(/\\s+on[a-z]+\\s*=\\s*"[^"]*"/gi, '');
|
|
1175
|
+
s = s.replace(/\\s+on[a-z]+\\s*=\\s*'[^']*'/gi, '');
|
|
1176
|
+
s = s.replace(/\\s+on[a-z]+\\s*=\\s*[^\\s>]+/gi, '');
|
|
1177
|
+
/* javascript: protocol in hrefs / srcs. */
|
|
1178
|
+
s = s.replace(/(href|src)\\s*=\\s*"\\s*javascript:[^"]*"/gi, '$1="#"');
|
|
1179
|
+
s = s.replace(/(href|src)\\s*=\\s*'\\s*javascript:[^']*'/gi, "$1='#'");
|
|
1180
|
+
return s;
|
|
1181
|
+
}
|
|
1182
|
+
|
|
889
1183
|
function renderStream() {
|
|
890
1184
|
for (const target of [$('#stream-mini'), $('#stream-full')]) {
|
|
891
1185
|
target.innerHTML = '';
|
|
@@ -1022,6 +1316,68 @@ function pizarronStartEdit(id) {
|
|
|
1022
1316
|
renderPizarron();
|
|
1023
1317
|
}
|
|
1024
1318
|
|
|
1319
|
+
async function pizarronSaveAs(id) {
|
|
1320
|
+
const it = state.pizarron.items.find((x) => x.id === id);
|
|
1321
|
+
if (!it || !it.isEditing) return;
|
|
1322
|
+
/* alpha.39 -- usa File System Access API (showSaveFilePicker)
|
|
1323
|
+
* cuando el browser la soporta (Chrome/Edge): da el diálogo
|
|
1324
|
+
* nativo del SO con explorer-style chooser. Si NO está
|
|
1325
|
+
* disponible (Firefox/Safari), fallback a prompt() con el
|
|
1326
|
+
* path actual prefilled para que el user edite dir + nombre. */
|
|
1327
|
+
if (typeof window.showSaveFilePicker === 'function') {
|
|
1328
|
+
try {
|
|
1329
|
+
const suggestedName = (it.file_path || it.title || 'untitled.txt').split('/').pop();
|
|
1330
|
+
const handle = await window.showSaveFilePicker({
|
|
1331
|
+
suggestedName,
|
|
1332
|
+
types: [{ description: it.kind, accept: { 'text/plain': ['.txt', '.ts', '.tsx', '.js', '.md', '.json', '.html', '.css'] } }],
|
|
1333
|
+
});
|
|
1334
|
+
const writable = await handle.createWritable();
|
|
1335
|
+
await writable.write(it.editValue);
|
|
1336
|
+
await writable.close();
|
|
1337
|
+
it.content = it.editValue;
|
|
1338
|
+
it.dirty = false;
|
|
1339
|
+
it.file_path = handle.name; /* solo el nombre; el browser
|
|
1340
|
+
no expone full path */
|
|
1341
|
+
setStatus('Guardado como: ' + handle.name + ' (en la ruta que elegiste en el dialog).');
|
|
1342
|
+
renderPizarron();
|
|
1343
|
+
return;
|
|
1344
|
+
} catch (err) {
|
|
1345
|
+
/* AbortError = el user cancelo el dialog -- silencioso. */
|
|
1346
|
+
if (err && err.name === 'AbortError') return;
|
|
1347
|
+
setStatus('Error en Guardar como: ' + (err && err.message ? err.message : err) + ' -- usando fallback.', true);
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
/* Fallback: prompt con path relativo al projectRoot. */
|
|
1351
|
+
const initial = it.file_path || 'untitled.txt';
|
|
1352
|
+
const nextPath = prompt('Guardar como (path relativo al proyecto):', initial);
|
|
1353
|
+
if (!nextPath || nextPath.trim() === '') return;
|
|
1354
|
+
const rel = nextPath.trim();
|
|
1355
|
+
if (rel.startsWith('/') || rel.includes('..')) {
|
|
1356
|
+
alert('El path debe ser relativo al proyecto (sin "/" inicial ni "..").');
|
|
1357
|
+
return;
|
|
1358
|
+
}
|
|
1359
|
+
try {
|
|
1360
|
+
const r = await fetch('/api/forge/file', {
|
|
1361
|
+
method: 'POST',
|
|
1362
|
+
headers: { 'content-type': 'application/json' },
|
|
1363
|
+
body: JSON.stringify({ path: rel, content: it.editValue }),
|
|
1364
|
+
});
|
|
1365
|
+
const data = await r.json();
|
|
1366
|
+
if (!r.ok || !data.ok) {
|
|
1367
|
+
setStatus('Error al guardar: ' + (data.error || r.status), true);
|
|
1368
|
+
return;
|
|
1369
|
+
}
|
|
1370
|
+
it.content = it.editValue;
|
|
1371
|
+
it.file_path = rel;
|
|
1372
|
+
it.title = rel.split('/').pop() || rel;
|
|
1373
|
+
it.dirty = false;
|
|
1374
|
+
setStatus('Guardado como: ' + rel + ' (' + data.bytes_written + ' bytes)');
|
|
1375
|
+
renderPizarron();
|
|
1376
|
+
} catch (err) {
|
|
1377
|
+
setStatus('Error de red: ' + (err && err.message ? err.message : err), true);
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1025
1381
|
async function pizarronSave(id) {
|
|
1026
1382
|
const it = state.pizarron.items.find((x) => x.id === id);
|
|
1027
1383
|
if (!it || !it.isEditing) return;
|
|
@@ -1095,11 +1451,17 @@ function renderPizarronCardBody(it) {
|
|
|
1095
1451
|
+ '<textarea class="pz-edit-area" data-pz-edit-input data-pz-item-id="' + it.id + '"'
|
|
1096
1452
|
+ ' data-nac-id="yujin.pizarron.editor.' + it.id + '.input"'
|
|
1097
1453
|
+ ' data-nac-role="field" data-nac-action="edit_content"'
|
|
1454
|
+
+ ' data-nac-scrollable="both"'
|
|
1098
1455
|
+ ' spellcheck="false">' + escapeHtml(it.editValue || '') + '</textarea>'
|
|
1099
1456
|
+ '<div class="pz-edit-actions">'
|
|
1100
1457
|
+ ' <button type="button" class="pz-save" data-pz-save data-pz-item-id="' + it.id + '"'
|
|
1101
1458
|
+ ' data-nac-id="yujin.pizarron.editor.' + it.id + '.save"'
|
|
1102
|
-
+ ' data-nac-role="action" data-nac-action="save_file"
|
|
1459
|
+
+ ' data-nac-role="action" data-nac-action="save_file"'
|
|
1460
|
+
+ ' title="Guardar en ' + escapeHtml(it.file_path || '(memoria)') + '">Guardar</button>'
|
|
1461
|
+
+ ' <button type="button" data-pz-save-as data-pz-item-id="' + it.id + '"'
|
|
1462
|
+
+ ' data-nac-id="yujin.pizarron.editor.' + it.id + '.save-as"'
|
|
1463
|
+
+ ' data-nac-role="action" data-nac-action="save_file_as"'
|
|
1464
|
+
+ ' title="Guardar como -- elegí nuevo path (relativo al proyecto)">Guardar como…</button>'
|
|
1103
1465
|
+ ' <button type="button" data-pz-discard data-pz-item-id="' + it.id + '"'
|
|
1104
1466
|
+ ' data-nac-id="yujin.pizarron.editor.' + it.id + '.discard"'
|
|
1105
1467
|
+ ' data-nac-role="action" data-nac-action="discard_changes">Descartar</button>'
|
|
@@ -1107,37 +1469,39 @@ function renderPizarronCardBody(it) {
|
|
|
1107
1469
|
+ '</div>'
|
|
1108
1470
|
+ '</div>';
|
|
1109
1471
|
}
|
|
1110
|
-
/*
|
|
1472
|
+
/* alpha.39 -- richer view-mode by kind. */
|
|
1473
|
+
const bodyOpen = '<div class="pz-body" data-nac-id="yujin.pizarron.item.' + it.id + '.body" data-nac-role="region" data-nac-action="scroll" tabindex="0">';
|
|
1111
1474
|
if (it.kind === 'code') {
|
|
1112
|
-
return
|
|
1113
|
-
+ '<pre
|
|
1114
|
-
+
|
|
1475
|
+
return bodyOpen
|
|
1476
|
+
+ '<pre class="pz-code"' + (it.language ? ' data-lang="' + escapeHtml(it.language) + '"' : '') + '><code>'
|
|
1477
|
+
+ escapeHtml(it.content)
|
|
1478
|
+
+ '</code></pre></div>';
|
|
1479
|
+
}
|
|
1480
|
+
if (it.kind === 'html') {
|
|
1481
|
+
/* Render como HTML real (sanitizado). Per Pablo: 'que los
|
|
1482
|
+
* htmls rendericen como html y no se muestren como texto
|
|
1483
|
+
* plano a menos que la accion sea editar'. */
|
|
1484
|
+
return '<div class="pz-body pz-html" data-nac-id="yujin.pizarron.item.' + it.id + '.body" data-nac-role="region" data-nac-action="scroll" tabindex="0">'
|
|
1485
|
+
+ sanitizeHtml(it.content) + '</div>';
|
|
1115
1486
|
}
|
|
1116
1487
|
if (it.kind === 'markdown' || it.kind === 'document') {
|
|
1117
|
-
return '<div class="pz-body pz-markdown" data-nac-id="yujin.pizarron.item.' + it.id + '.body" data-nac-role="region">'
|
|
1118
|
-
+
|
|
1488
|
+
return '<div class="pz-body pz-markdown" data-nac-id="yujin.pizarron.item.' + it.id + '.body" data-nac-role="region" data-nac-action="scroll" tabindex="0">'
|
|
1489
|
+
+ renderMdRich(it.content) + '</div>';
|
|
1119
1490
|
}
|
|
1120
1491
|
if (it.kind === 'table') {
|
|
1121
|
-
return
|
|
1122
|
-
+ renderMd(it.content) + '</div>';
|
|
1492
|
+
return bodyOpen + renderMdRich(it.content) + '</div>';
|
|
1123
1493
|
}
|
|
1124
1494
|
if (it.kind === 'tree') {
|
|
1125
|
-
return '<
|
|
1126
|
-
+ '<pre>' + escapeHtml(it.content) + '</pre></div>';
|
|
1495
|
+
return bodyOpen + '<pre class="pz-tree">' + escapeHtml(it.content) + '</pre></div>';
|
|
1127
1496
|
}
|
|
1128
1497
|
if (it.kind === 'bpmn' || it.kind === 'flow') {
|
|
1129
|
-
/* Trust SVG content from the LLM only when it starts with
|
|
1130
|
-
<svg ... otherwise treat as text (mermaid syntax etc). */
|
|
1131
1498
|
const trimmed = it.content.trim();
|
|
1132
1499
|
if (trimmed.startsWith('<svg')) {
|
|
1133
|
-
return
|
|
1134
|
-
+ trimmed + '</div>';
|
|
1500
|
+
return bodyOpen + sanitizeHtml(trimmed) + '</div>';
|
|
1135
1501
|
}
|
|
1136
|
-
return '<
|
|
1137
|
-
+ '<pre>' + escapeHtml(it.content) + '</pre></div>';
|
|
1502
|
+
return bodyOpen + '<pre class="pz-code"><code>' + escapeHtml(it.content) + '</code></pre></div>';
|
|
1138
1503
|
}
|
|
1139
|
-
return
|
|
1140
|
-
+ escapeHtml(it.content) + '</pre></div>';
|
|
1504
|
+
return bodyOpen + '<pre><code>' + escapeHtml(it.content) + '</code></pre></div>';
|
|
1141
1505
|
}
|
|
1142
1506
|
|
|
1143
1507
|
function renderPizarron() {
|
|
@@ -2796,6 +3160,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
2796
3160
|
const closeEl = t.closest('[data-pz-close]');
|
|
2797
3161
|
const editEl = t.closest('[data-pz-edit]');
|
|
2798
3162
|
const saveEl = t.closest('[data-pz-save]');
|
|
3163
|
+
const saveAsEl = t.closest('[data-pz-save-as]');
|
|
2799
3164
|
const discardEl = t.closest('[data-pz-discard]');
|
|
2800
3165
|
const readEl = t.closest('[data-pz-read]');
|
|
2801
3166
|
const copyEl = t.closest('[data-pz-copy]');
|
|
@@ -2809,6 +3174,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
2809
3174
|
pizarronStartEdit(editEl.getAttribute('data-pz-item-id'));
|
|
2810
3175
|
} else if (saveEl) {
|
|
2811
3176
|
pizarronSave(saveEl.getAttribute('data-pz-item-id'));
|
|
3177
|
+
} else if (saveAsEl) {
|
|
3178
|
+
pizarronSaveAs(saveAsEl.getAttribute('data-pz-item-id'));
|
|
2812
3179
|
} else if (discardEl) {
|
|
2813
3180
|
pizarronDiscard(discardEl.getAttribute('data-pz-item-id'));
|
|
2814
3181
|
} else if (readEl) {
|
package/dist/chat/panel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,eAAe,EAAE,QAAQ,GAG1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAepD,MAAM,UAAU,eAAe,CAAC,GAAgB;IAC9C,+DAA+D;IAC/D,+DAA+D;IAC/D,6DAA6D;IAC7D,4DAA4D;IAC5D,oCAAoC;IACpC,MAAM,IAAI,GAAsB,GAAG,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC;IAE9D,4DAA4D;IAC5D,2DAA2D;IAC3D,+DAA+D;IAC/D,2DAA2D;IAC3D,uBAAuB;IACvB,MAAM,EAAE,GAAG;QACT,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;QAC3D,UAAU,EAAQ,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACrD,SAAS,EAAS,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;QACpD,YAAY,EAAM,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;QAC9D,SAAS,EAAS,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;QACpD,UAAU,EAAQ,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACrD,cAAc,EAAI,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;QACzD,WAAW,EAAO,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;QACtD,cAAc,EAAI,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;QACzD,UAAU,EAAQ,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;QAC1D,UAAU,EAAQ,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACrD,gBAAgB,EAAE,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;QAC5D,eAAe,EAAG,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;QAC3D,eAAe,EAAG,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;QAC3D,cAAc,EAAI,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;KAC3D,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,IAAI,EAAS,GAAG,CAAC,IAAI;QACrB,OAAO,EAAM,OAAO;QACpB,IAAI;QACJ,IAAI,EAAS,EAAE;KAChB,CAAC,CAAC;IAEH,wDAAwD;IACxD,yDAAyD;IACzD,sCAAsC;IACtC,MAAM,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAE1C,OAAO;cACK,IAAI,UAAU,GAAG;;;;mCAII,UAAU,CAAC,OAAO,CAAC;mCACnB,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;8BAChC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;;EAEvD,eAAe,EAAE
|
|
1
|
+
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA27EtB,CAAC;AACT,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nac3/forge-cli",
|
|
3
|
-
"version": "0.2.0-alpha.
|
|
3
|
+
"version": "0.2.0-alpha.39",
|
|
4
4
|
"description": "Yujin Forge -- voice-first NAC-3 React development framework. CLI + chat panel + spec ingest + 10-format document reader + voice loop.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Pablo Kuschnirof <pablo@rpaforce.com>",
|