@nac3/forge-cli 0.2.0-alpha.38 → 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 +353 -26
- 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
|
@@ -257,14 +257,89 @@ body {
|
|
|
257
257
|
display: inline-block; /* shrink-to-fit so pre + scroll work together */
|
|
258
258
|
min-width: 100%;
|
|
259
259
|
}
|
|
260
|
-
#yf-full .pz-body.pz-markdown { line-height: 1.6; }
|
|
261
|
-
#yf-full .pz-body
|
|
262
|
-
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
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); }
|
|
268
343
|
#yf-full .pz-edit-wrap {
|
|
269
344
|
flex: 1; min-height: 0;
|
|
270
345
|
display: flex; flex-direction: column;
|
|
@@ -925,6 +1000,186 @@ function renderMd(src) {
|
|
|
925
1000
|
return out;
|
|
926
1001
|
}
|
|
927
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
|
+
|
|
928
1183
|
function renderStream() {
|
|
929
1184
|
for (const target of [$('#stream-mini'), $('#stream-full')]) {
|
|
930
1185
|
target.innerHTML = '';
|
|
@@ -1061,6 +1316,68 @@ function pizarronStartEdit(id) {
|
|
|
1061
1316
|
renderPizarron();
|
|
1062
1317
|
}
|
|
1063
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
|
+
|
|
1064
1381
|
async function pizarronSave(id) {
|
|
1065
1382
|
const it = state.pizarron.items.find((x) => x.id === id);
|
|
1066
1383
|
if (!it || !it.isEditing) return;
|
|
@@ -1139,7 +1456,12 @@ function renderPizarronCardBody(it) {
|
|
|
1139
1456
|
+ '<div class="pz-edit-actions">'
|
|
1140
1457
|
+ ' <button type="button" class="pz-save" data-pz-save data-pz-item-id="' + it.id + '"'
|
|
1141
1458
|
+ ' data-nac-id="yujin.pizarron.editor.' + it.id + '.save"'
|
|
1142
|
-
+ ' 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>'
|
|
1143
1465
|
+ ' <button type="button" data-pz-discard data-pz-item-id="' + it.id + '"'
|
|
1144
1466
|
+ ' data-nac-id="yujin.pizarron.editor.' + it.id + '.discard"'
|
|
1145
1467
|
+ ' data-nac-role="action" data-nac-action="discard_changes">Descartar</button>'
|
|
@@ -1147,37 +1469,39 @@ function renderPizarronCardBody(it) {
|
|
|
1147
1469
|
+ '</div>'
|
|
1148
1470
|
+ '</div>';
|
|
1149
1471
|
}
|
|
1150
|
-
/*
|
|
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">';
|
|
1151
1474
|
if (it.kind === 'code') {
|
|
1152
|
-
return
|
|
1153
|
-
+ '<pre
|
|
1154
|
-
+
|
|
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>';
|
|
1155
1486
|
}
|
|
1156
1487
|
if (it.kind === 'markdown' || it.kind === 'document') {
|
|
1157
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">'
|
|
1158
|
-
+
|
|
1489
|
+
+ renderMdRich(it.content) + '</div>';
|
|
1159
1490
|
}
|
|
1160
1491
|
if (it.kind === 'table') {
|
|
1161
|
-
return
|
|
1162
|
-
+ renderMd(it.content) + '</div>';
|
|
1492
|
+
return bodyOpen + renderMdRich(it.content) + '</div>';
|
|
1163
1493
|
}
|
|
1164
1494
|
if (it.kind === 'tree') {
|
|
1165
|
-
return '<
|
|
1166
|
-
+ '<pre>' + escapeHtml(it.content) + '</pre></div>';
|
|
1495
|
+
return bodyOpen + '<pre class="pz-tree">' + escapeHtml(it.content) + '</pre></div>';
|
|
1167
1496
|
}
|
|
1168
1497
|
if (it.kind === 'bpmn' || it.kind === 'flow') {
|
|
1169
|
-
/* Trust SVG content from the LLM only when it starts with
|
|
1170
|
-
<svg ... otherwise treat as text (mermaid syntax etc). */
|
|
1171
1498
|
const trimmed = it.content.trim();
|
|
1172
1499
|
if (trimmed.startsWith('<svg')) {
|
|
1173
|
-
return
|
|
1174
|
-
+ trimmed + '</div>';
|
|
1500
|
+
return bodyOpen + sanitizeHtml(trimmed) + '</div>';
|
|
1175
1501
|
}
|
|
1176
|
-
return '<
|
|
1177
|
-
+ '<pre>' + escapeHtml(it.content) + '</pre></div>';
|
|
1502
|
+
return bodyOpen + '<pre class="pz-code"><code>' + escapeHtml(it.content) + '</code></pre></div>';
|
|
1178
1503
|
}
|
|
1179
|
-
return
|
|
1180
|
-
+ escapeHtml(it.content) + '</pre></div>';
|
|
1504
|
+
return bodyOpen + '<pre><code>' + escapeHtml(it.content) + '</code></pre></div>';
|
|
1181
1505
|
}
|
|
1182
1506
|
|
|
1183
1507
|
function renderPizarron() {
|
|
@@ -2836,6 +3160,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
2836
3160
|
const closeEl = t.closest('[data-pz-close]');
|
|
2837
3161
|
const editEl = t.closest('[data-pz-edit]');
|
|
2838
3162
|
const saveEl = t.closest('[data-pz-save]');
|
|
3163
|
+
const saveAsEl = t.closest('[data-pz-save-as]');
|
|
2839
3164
|
const discardEl = t.closest('[data-pz-discard]');
|
|
2840
3165
|
const readEl = t.closest('[data-pz-read]');
|
|
2841
3166
|
const copyEl = t.closest('[data-pz-copy]');
|
|
@@ -2849,6 +3174,8 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
2849
3174
|
pizarronStartEdit(editEl.getAttribute('data-pz-item-id'));
|
|
2850
3175
|
} else if (saveEl) {
|
|
2851
3176
|
pizarronSave(saveEl.getAttribute('data-pz-item-id'));
|
|
3177
|
+
} else if (saveAsEl) {
|
|
3178
|
+
pizarronSaveAs(saveAsEl.getAttribute('data-pz-item-id'));
|
|
2852
3179
|
} else if (discardEl) {
|
|
2853
3180
|
pizarronDiscard(discardEl.getAttribute('data-pz-item-id'));
|
|
2854
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>",
|