@cccarv82/freya 2.4.1 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/web-ui.css +105 -0
- package/cli/web-ui.js +6 -0
- package/cli/web.js +185 -12
- package/package.json +2 -2
package/cli/web-ui.css
CHANGED
|
@@ -406,6 +406,111 @@ body {
|
|
|
406
406
|
box-shadow: 0 0 0 6px rgba(45, 212, 191, .10);
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
+
.chip {
|
|
410
|
+
display: inline-flex;
|
|
411
|
+
align-items: center;
|
|
412
|
+
padding: 4px 12px;
|
|
413
|
+
background: var(--chip);
|
|
414
|
+
color: var(--primary);
|
|
415
|
+
border-radius: 99px;
|
|
416
|
+
font-size: 11px;
|
|
417
|
+
font-weight: 600;
|
|
418
|
+
letter-spacing: 0.02em;
|
|
419
|
+
border: 1px solid var(--line);
|
|
420
|
+
white-space: nowrap;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.chip.clickable {
|
|
424
|
+
cursor: pointer;
|
|
425
|
+
transition: var(--transition);
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
.chip.clickable:hover {
|
|
429
|
+
background: var(--primary);
|
|
430
|
+
color: white;
|
|
431
|
+
transform: translateY(-1px);
|
|
432
|
+
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/* Documentation Styles */
|
|
436
|
+
.docs-content {
|
|
437
|
+
max-width: 900px;
|
|
438
|
+
margin: 0 auto;
|
|
439
|
+
padding: 40px 20px;
|
|
440
|
+
line-height: 1.7;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.docs-card {
|
|
444
|
+
background: var(--paper);
|
|
445
|
+
border: 1px solid var(--line2);
|
|
446
|
+
border-radius: var(--radius);
|
|
447
|
+
padding: 40px;
|
|
448
|
+
margin-bottom: 30px;
|
|
449
|
+
box-shadow: var(--shadow2);
|
|
450
|
+
backdrop-filter: blur(10px);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
.docs-h1 {
|
|
454
|
+
font-family: var(--display);
|
|
455
|
+
font-size: 32px;
|
|
456
|
+
font-weight: 700;
|
|
457
|
+
color: var(--primary);
|
|
458
|
+
margin-top: 0;
|
|
459
|
+
margin-bottom: 24px;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
.docs-h2 {
|
|
463
|
+
font-family: var(--display);
|
|
464
|
+
font-size: 24px;
|
|
465
|
+
font-weight: 600;
|
|
466
|
+
color: var(--text);
|
|
467
|
+
margin-top: 40px;
|
|
468
|
+
margin-bottom: 16px;
|
|
469
|
+
border-bottom: 1px solid var(--line);
|
|
470
|
+
padding-bottom: 8px;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
.docs-p {
|
|
474
|
+
margin-bottom: 16px;
|
|
475
|
+
color: var(--muted);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.docs-code {
|
|
479
|
+
background: var(--bg2);
|
|
480
|
+
padding: 2px 6px;
|
|
481
|
+
border-radius: 6px;
|
|
482
|
+
font-family: var(--mono);
|
|
483
|
+
font-size: 0.9em;
|
|
484
|
+
color: var(--accent);
|
|
485
|
+
border: 1px solid var(--line);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
.docs-pre {
|
|
489
|
+
background: var(--bg);
|
|
490
|
+
padding: 20px;
|
|
491
|
+
border-radius: var(--radius2);
|
|
492
|
+
overflow-x: auto;
|
|
493
|
+
font-family: var(--mono);
|
|
494
|
+
border: 1px solid var(--line);
|
|
495
|
+
margin: 20px 0;
|
|
496
|
+
color: var(--muted);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.docs-ul {
|
|
500
|
+
padding-left: 24px;
|
|
501
|
+
margin-bottom: 24px;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
.docs-ul li {
|
|
505
|
+
margin-bottom: 12px;
|
|
506
|
+
color: var(--muted);
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
.docs-strong {
|
|
510
|
+
font-weight: 600;
|
|
511
|
+
color: var(--text);
|
|
512
|
+
}
|
|
513
|
+
|
|
409
514
|
.topActions {
|
|
410
515
|
display: flex;
|
|
411
516
|
align-items: center;
|
package/cli/web-ui.js
CHANGED
|
@@ -1232,6 +1232,7 @@
|
|
|
1232
1232
|
const tl = $('railTimeline');
|
|
1233
1233
|
const health = $('railCompanion');
|
|
1234
1234
|
const graph = $('railGraph');
|
|
1235
|
+
const docs = $('railDocs');
|
|
1235
1236
|
|
|
1236
1237
|
const curPage = (document.body && document.body.dataset) ? document.body.dataset.page : null;
|
|
1237
1238
|
const isDashboard = !curPage || curPage === 'dashboard';
|
|
@@ -1271,6 +1272,11 @@
|
|
|
1271
1272
|
if (curPage !== 'graph') window.location.href = '/graph';
|
|
1272
1273
|
};
|
|
1273
1274
|
}
|
|
1275
|
+
if (docs) {
|
|
1276
|
+
docs.onclick = () => {
|
|
1277
|
+
if (curPage !== 'docs') window.location.href = '/docs';
|
|
1278
|
+
};
|
|
1279
|
+
}
|
|
1274
1280
|
}
|
|
1275
1281
|
|
|
1276
1282
|
async function editTask(t) {
|
package/cli/web.js
CHANGED
|
@@ -950,6 +950,148 @@ function settingsHtml(defaultDir) {
|
|
|
950
950
|
return buildSettingsHtml(safeDefault, APP_VERSION);
|
|
951
951
|
}
|
|
952
952
|
|
|
953
|
+
function docsHtml(defaultDir) {
|
|
954
|
+
const safeDefault = String(defaultDir || './freya').replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
955
|
+
return buildDocsHtml(safeDefault, APP_VERSION);
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
function buildDocsHtml(safeDefault, appVersion) {
|
|
959
|
+
const safeVersion = escapeHtml(appVersion || 'unknown');
|
|
960
|
+
return `<!doctype html>
|
|
961
|
+
<html>
|
|
962
|
+
<head>
|
|
963
|
+
<meta charset="utf-8" />
|
|
964
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
965
|
+
<title>FREYA Documentation</title>
|
|
966
|
+
<link rel="stylesheet" href="/app.css" />
|
|
967
|
+
<style>
|
|
968
|
+
.docs-content {
|
|
969
|
+
max-width: 900px;
|
|
970
|
+
margin: 0 auto;
|
|
971
|
+
padding: 40px 20px;
|
|
972
|
+
line-height: 1.6;
|
|
973
|
+
}
|
|
974
|
+
.docs-card {
|
|
975
|
+
background: var(--paper);
|
|
976
|
+
border: 1px solid var(--border);
|
|
977
|
+
border-radius: 12px;
|
|
978
|
+
padding: 30px;
|
|
979
|
+
margin-bottom: 24px;
|
|
980
|
+
box-shadow: 0 4px 20px rgba(0,0,0,0.05);
|
|
981
|
+
}
|
|
982
|
+
.docs-h1 { color: var(--primary); margin-top: 0; }
|
|
983
|
+
.docs-h2 { border-bottom: 1px solid var(--border); padding-bottom: 8px; margin-top: 32px; color: var(--text); }
|
|
984
|
+
.docs-code { background: var(--bg2); padding: 2px 6px; border-radius: 4px; font-family: monospace; font-size: 0.9em; }
|
|
985
|
+
.docs-pre { background: var(--bg2); padding: 16px; border-radius: 8px; overflow-x: auto; font-family: monospace; border: 1px solid var(--border); }
|
|
986
|
+
.docs-ul { padding-left: 20px; }
|
|
987
|
+
.docs-ul li { margin-bottom: 10px; }
|
|
988
|
+
.docs-strong { color: var(--accent); }
|
|
989
|
+
</style>
|
|
990
|
+
</head>
|
|
991
|
+
<body data-page="docs">
|
|
992
|
+
<div class="app">
|
|
993
|
+
<div class="frame">
|
|
994
|
+
<div class="shell">
|
|
995
|
+
|
|
996
|
+
<aside class="rail">
|
|
997
|
+
<div class="railTop">
|
|
998
|
+
<div class="railLogo">F</div>
|
|
999
|
+
</div>
|
|
1000
|
+
<div class="railNav">
|
|
1001
|
+
<button class="railBtn" id="railDashboard" type="button" title="Dashboard">
|
|
1002
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="9"></rect><rect x="14" y="3" width="7" height="5"></rect><rect x="14" y="12" width="7" height="9"></rect><rect x="3" y="16" width="7" height="5"></rect></svg>
|
|
1003
|
+
</button>
|
|
1004
|
+
<button class="railBtn" id="railReports" type="button" title="Relatórios">
|
|
1005
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
|
|
1006
|
+
</button>
|
|
1007
|
+
<button class="railBtn" id="railCompanion" type="button" title="Companion">
|
|
1008
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polygon points="16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76"></polygon></svg>
|
|
1009
|
+
</button>
|
|
1010
|
+
<button class="railBtn" id="railProjects" type="button" title="Projects">
|
|
1011
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg>
|
|
1012
|
+
</button>
|
|
1013
|
+
<button class="railBtn" id="railTimeline" type="button" title="Timeline">
|
|
1014
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
|
|
1015
|
+
</button>
|
|
1016
|
+
<button class="railBtn" id="railGraph" type="button" title="Grafo">
|
|
1017
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
|
|
1018
|
+
</button>
|
|
1019
|
+
<button class="railBtn active" id="railDocs" type="button" title="Documentação">
|
|
1020
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
|
1021
|
+
</button>
|
|
1022
|
+
</div>
|
|
1023
|
+
<div class="railBottom">
|
|
1024
|
+
<button id="railSettings" class="railBtn" title="Configurações" onclick="if (document.body.dataset.page !== 'settings') window.location.href='/settings';">
|
|
1025
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
|
|
1026
|
+
</button>
|
|
1027
|
+
</div>
|
|
1028
|
+
</aside>
|
|
1029
|
+
|
|
1030
|
+
<main class="center">
|
|
1031
|
+
<div class="topbar">
|
|
1032
|
+
<div class="brandLine">
|
|
1033
|
+
<span class="spark"></span>
|
|
1034
|
+
<div class="brandStack">
|
|
1035
|
+
<div class="brand">FREYA</div>
|
|
1036
|
+
<div class="brandSub">Documentação Oficial</div>
|
|
1037
|
+
</div>
|
|
1038
|
+
</div>
|
|
1039
|
+
<div class="topActions">
|
|
1040
|
+
<span class="chip clickable" onclick="window.location.href='/docs'" style="background: var(--primary); color: white;">Docs</span>
|
|
1041
|
+
<span class="chip" id="chipVersion">v${safeVersion}</span>
|
|
1042
|
+
<span class="chip" id="chipPort">127.0.0.1:3872</span>
|
|
1043
|
+
</div>
|
|
1044
|
+
</div>
|
|
1045
|
+
|
|
1046
|
+
<div class="centerBody">
|
|
1047
|
+
<div class="docs-content">
|
|
1048
|
+
<div class="docs-card">
|
|
1049
|
+
<h1 class="docs-h1">📚 Guia do Usuário FREYA</h1>
|
|
1050
|
+
<p>Bem-vindo à FREYA (<strong class="docs-strong">Fast Reporting & Executive Yield Assistant</strong>), sua ferramenta local-first para gestão de status e relatórios executivos.</p>
|
|
1051
|
+
|
|
1052
|
+
<h2 class="docs-h2">🚀 Começo Rápido (CLI)</h2>
|
|
1053
|
+
<p>A FREYA nasceu no terminal. Use os comandos abaixo no seu diretório de trabalho:</p>
|
|
1054
|
+
<ul class="docs-ul">
|
|
1055
|
+
<li><code class="docs-code">freya task "Sua tarefa"</code>: Cria uma tarefa pendente.</li>
|
|
1056
|
+
<li><code class="docs-code">freya blocker "Impedimento"</code>: Registra um bloqueio crítico.</li>
|
|
1057
|
+
<li><code class="docs-code">freya status "Update"</code>: Adiciona item ao histórico de um projeto.</li>
|
|
1058
|
+
<li><code class="docs-code">freya daily</code>: Abre seu log diário para edição.</li>
|
|
1059
|
+
</ul>
|
|
1060
|
+
|
|
1061
|
+
<h2 class="docs-h2">💻 Dashboard Web</h2>
|
|
1062
|
+
<ul class="docs-ul">
|
|
1063
|
+
<li><strong class="docs-strong">Inbox & Prompt</strong>: Cole textos e a FREYA extrai tarefas/bloqueios via análise inteligente.</li>
|
|
1064
|
+
<li><strong class="docs-strong">Oracle (RAG)</strong>: Use o chat para perguntar sobre seu histórico local.</li>
|
|
1065
|
+
<li><strong class="docs-strong">Hoje</strong>: Visualize suas pendências por categoria (DO_NOW, SCHEDULE, etc).</li>
|
|
1066
|
+
</ul>
|
|
1067
|
+
|
|
1068
|
+
<h2 class="docs-h2">📊 Relatórios Automatizados</h2>
|
|
1069
|
+
<p>Gere documentos Markdown prontos para uso:</p>
|
|
1070
|
+
<ul class="docs-ul">
|
|
1071
|
+
<li><strong class="docs-strong">Executivo</strong>: Visão geral para gerência.</li>
|
|
1072
|
+
<li><strong class="docs-strong">SM Weekly</strong>: Indicadores de fluxo e aging.</li>
|
|
1073
|
+
<li><strong class="docs-strong">Blockers</strong>: Lista focada em impedimentos.</li>
|
|
1074
|
+
</ul>
|
|
1075
|
+
<div class="docs-pre">Dica: Use os Webhooks para publicar direto no Discord ou Microsoft Teams.</div>
|
|
1076
|
+
|
|
1077
|
+
<h2 class="docs-h2">⚙️ Configurações</h2>
|
|
1078
|
+
<p>Configure sua workspace, webhooks de notificação e regras de <strong class="docs-strong">Smart Mapping</strong> para associar updates a projetos automaticamente.</p>
|
|
1079
|
+
</div>
|
|
1080
|
+
</div>
|
|
1081
|
+
</div>
|
|
1082
|
+
</main>
|
|
1083
|
+
</div>
|
|
1084
|
+
</div>
|
|
1085
|
+
</div>
|
|
1086
|
+
|
|
1087
|
+
<script>
|
|
1088
|
+
window.__FREYA_DEFAULT_DIR = "${safeDefault}";
|
|
1089
|
+
</script>
|
|
1090
|
+
<script src="/app.js"></script>
|
|
1091
|
+
</body>
|
|
1092
|
+
</html>`;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
953
1095
|
function buildHtml(safeDefault, appVersion) {
|
|
954
1096
|
const safeVersion = escapeHtml(appVersion || 'unknown');
|
|
955
1097
|
return `<!doctype html>
|
|
@@ -988,6 +1130,9 @@ function buildHtml(safeDefault, appVersion) {
|
|
|
988
1130
|
<button class="railBtn" id="railGraph" type="button" title="Grafo">
|
|
989
1131
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
|
|
990
1132
|
</button>
|
|
1133
|
+
<button class="railBtn" id="railDocs" type="button" title="Documentação">
|
|
1134
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
|
1135
|
+
</button>
|
|
991
1136
|
</div>
|
|
992
1137
|
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="Configurações" onclick="if (document.body.dataset.page !== \'settings\') window.location.href=\'/settings\';"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></button>
|
|
993
1138
|
|
|
@@ -1004,6 +1149,7 @@ function buildHtml(safeDefault, appVersion) {
|
|
|
1004
1149
|
</div>
|
|
1005
1150
|
</div>
|
|
1006
1151
|
<div class="topActions">
|
|
1152
|
+
<span class="chip clickable" onclick="window.location.href='/docs'">Docs</span>
|
|
1007
1153
|
<span class="chip" id="chipVersion">v${safeVersion}</span>
|
|
1008
1154
|
<span class="chip" id="chipPort">127.0.0.1:3872</span>
|
|
1009
1155
|
</div>
|
|
@@ -1188,8 +1334,11 @@ function buildReportsHtml(safeDefault, appVersion) {
|
|
|
1188
1334
|
<button class="railBtn" id="railGraph" type="button" title="Grafo">
|
|
1189
1335
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
|
|
1190
1336
|
</button>
|
|
1337
|
+
<button class="railBtn" id="railDocs" type="button" title="Documentação">
|
|
1338
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
|
1339
|
+
</button>
|
|
1191
1340
|
</div>
|
|
1192
|
-
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="
|
|
1341
|
+
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="Configurações">\n <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>\n </button>
|
|
1193
1342
|
|
|
1194
1343
|
</div>
|
|
1195
1344
|
</aside>
|
|
@@ -1204,6 +1353,7 @@ function buildReportsHtml(safeDefault, appVersion) {
|
|
|
1204
1353
|
</div>
|
|
1205
1354
|
</div>
|
|
1206
1355
|
<div class="topActions">
|
|
1356
|
+
<span class="chip clickable" onclick="window.location.href='/docs'">Docs</span>
|
|
1207
1357
|
<span class="chip" id="chipVersion">v${safeVersion}</span>
|
|
1208
1358
|
<span class="chip" id="chipPort">127.0.0.1:3872</span>
|
|
1209
1359
|
</div>
|
|
@@ -1284,9 +1434,11 @@ function buildProjectsHtml(safeDefault, appVersion) {
|
|
|
1284
1434
|
<button class="railBtn" id="railGraph" type="button" title="Grafo">
|
|
1285
1435
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
|
|
1286
1436
|
</button>
|
|
1437
|
+
<button class="railBtn" id="railDocs" type="button" title="Documentação">
|
|
1438
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
|
1439
|
+
</button>
|
|
1287
1440
|
</div>
|
|
1288
|
-
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="
|
|
1289
|
-
|
|
1441
|
+
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="Configurações" onclick="if (document.body.dataset.page !== 'settings') window.location.href='/settings';"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></button>\n
|
|
1290
1442
|
</div>
|
|
1291
1443
|
</aside>
|
|
1292
1444
|
|
|
@@ -1300,6 +1452,7 @@ function buildProjectsHtml(safeDefault, appVersion) {
|
|
|
1300
1452
|
</div>
|
|
1301
1453
|
</div>
|
|
1302
1454
|
<div class="topActions">
|
|
1455
|
+
<span class="chip clickable" onclick="window.location.href='/docs'">Docs</span>
|
|
1303
1456
|
<span class="chip" id="chipVersion">v${safeVersion}</span>
|
|
1304
1457
|
<span class="chip" id="chipPort">127.0.0.1:3872</span>
|
|
1305
1458
|
</div>
|
|
@@ -1376,6 +1529,9 @@ function buildTimelineHtml(safeDefault, appVersion) {
|
|
|
1376
1529
|
<button class=\"railBtn\" id=\"railGraph\" type=\"button\" title=\"Grafo\">
|
|
1377
1530
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
|
|
1378
1531
|
</button>
|
|
1532
|
+
<button class="railBtn" id="railDocs" type="button" title="Documentação">
|
|
1533
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
|
1534
|
+
</button>
|
|
1379
1535
|
</div>
|
|
1380
1536
|
<div class=\"railBottom\">
|
|
1381
1537
|
<div class=\"railStatus\" id=\"railStatus\" title=\"status\"></div>
|
|
@@ -1392,6 +1548,7 @@ function buildTimelineHtml(safeDefault, appVersion) {
|
|
|
1392
1548
|
</div>
|
|
1393
1549
|
</div>
|
|
1394
1550
|
<div class=\"topActions\">
|
|
1551
|
+
<span class="chip clickable" onclick="window.location.href='/docs'">Docs</span>
|
|
1395
1552
|
<span class=\"chip\" id=\"chipVersion\">v${safeVersion}</span>
|
|
1396
1553
|
<span class=\"chip\" id=\"chipPort\">127.0.0.1:3872</span>
|
|
1397
1554
|
</div>
|
|
@@ -1483,9 +1640,11 @@ function buildGraphHtml(safeDefault, appVersion) {
|
|
|
1483
1640
|
<button class="railBtn active" id="railGraph" type="button" title="Grafo">
|
|
1484
1641
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
|
|
1485
1642
|
</button>
|
|
1643
|
+
<button class="railBtn" id="railDocs" type="button" title="Documentação">
|
|
1644
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
|
1645
|
+
</button>
|
|
1486
1646
|
</div>
|
|
1487
|
-
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="
|
|
1488
|
-
|
|
1647
|
+
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="Configurações" onclick="if (document.body.dataset.page !== 'settings') window.location.href='/settings';"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></button>\n
|
|
1489
1648
|
</div>
|
|
1490
1649
|
</aside>
|
|
1491
1650
|
|
|
@@ -1499,6 +1658,7 @@ function buildGraphHtml(safeDefault, appVersion) {
|
|
|
1499
1658
|
</div>
|
|
1500
1659
|
</div>
|
|
1501
1660
|
<div class="topActions">
|
|
1661
|
+
<span class="chip clickable" onclick="window.location.href='/docs'">Docs</span>
|
|
1502
1662
|
<span class="chip" id="chipVersion">v${safeVersion}</span>
|
|
1503
1663
|
<span class="chip" id="chipPort">127.0.0.1:3872</span>
|
|
1504
1664
|
</div>
|
|
@@ -1573,9 +1733,11 @@ function buildCompanionHtml(safeDefault, appVersion) {
|
|
|
1573
1733
|
<button class="railBtn" id="railGraph" type="button" title="Grafo">
|
|
1574
1734
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
|
|
1575
1735
|
</button>
|
|
1736
|
+
<button class="railBtn" id="railDocs" type="button" title="Documentação">
|
|
1737
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
|
1738
|
+
</button>
|
|
1576
1739
|
</div>
|
|
1577
|
-
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="
|
|
1578
|
-
|
|
1740
|
+
<div class="railBottom">\n <button id="railSettings" class="railBtn" title="Configurações" onclick="if (document.body.dataset.page !== 'settings') window.location.href='/settings';"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></button>\n
|
|
1579
1741
|
</div>
|
|
1580
1742
|
</aside>
|
|
1581
1743
|
|
|
@@ -1589,6 +1751,7 @@ function buildCompanionHtml(safeDefault, appVersion) {
|
|
|
1589
1751
|
</div>
|
|
1590
1752
|
</div>
|
|
1591
1753
|
<div class="topActions">
|
|
1754
|
+
<span class="chip clickable" onclick="window.location.href='/docs'">Docs</span>
|
|
1592
1755
|
<span class="chip" id="chipVersion">v${safeVersion}</span>
|
|
1593
1756
|
<span class="chip" id="chipPort">127.0.0.1:3872</span>
|
|
1594
1757
|
</div>
|
|
@@ -2125,6 +2288,14 @@ async function cmdWeb({ port, dir, open, dev }) {
|
|
|
2125
2288
|
return;
|
|
2126
2289
|
}
|
|
2127
2290
|
|
|
2291
|
+
if (req.method === 'GET' && req.url === '/docs') {
|
|
2292
|
+
try { res.__freyaDebug.workspaceDir = normalizeWorkspaceDir(dir || './freya'); } catch { }
|
|
2293
|
+
const body = docsHtml(dir || './freya');
|
|
2294
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'no-store' });
|
|
2295
|
+
res.end(body);
|
|
2296
|
+
return;
|
|
2297
|
+
}
|
|
2298
|
+
|
|
2128
2299
|
if (req.method === 'GET' && req.url === '/app.css') {
|
|
2129
2300
|
const css = fs.readFileSync(path.join(__dirname, 'web-ui.css'), 'utf8');
|
|
2130
2301
|
res.writeHead(200, { 'Content-Type': 'text/css; charset=utf-8', 'Cache-Control': 'no-store' });
|
|
@@ -3737,12 +3908,14 @@ function buildSettingsHtml(safeDefault, appVersion) {
|
|
|
3737
3908
|
<button class="railBtn" id="railGraph" type="button" title="Grafo">
|
|
3738
3909
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"></circle><circle cx="6" cy="12" r="3"></circle><circle cx="18" cy="19" r="3"></circle><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"></line><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"></line></svg>
|
|
3739
3910
|
</button>
|
|
3911
|
+
<button class="railBtn" id="railDocs" type="button" title="Documentação">
|
|
3912
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
|
3913
|
+
</button>
|
|
3740
3914
|
</div>
|
|
3741
|
-
<div class="railBottom"
|
|
3915
|
+
<div class="railBottom">
|
|
3742
3916
|
<button id="railSettings" class="railBtn active" title="Configurações">
|
|
3743
3917
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg>
|
|
3744
3918
|
</button>
|
|
3745
|
-
|
|
3746
3919
|
</div>
|
|
3747
3920
|
</aside>
|
|
3748
3921
|
|
|
@@ -3756,14 +3929,14 @@ function buildSettingsHtml(safeDefault, appVersion) {
|
|
|
3756
3929
|
</div>
|
|
3757
3930
|
</div>
|
|
3758
3931
|
<div class="topActions">
|
|
3932
|
+
<span class="chip clickable" onclick="window.location.href='/docs'">Docs</span>
|
|
3759
3933
|
<span class="chip" id="chipVersion">v${safeVersion}</span>
|
|
3760
3934
|
<button class="btn icon" type="button" onclick="window.toggleTheme()" title="Alternar tema claro/escuro">
|
|
3761
|
-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg>
|
|
3935
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon-sun"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg>
|
|
3936
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon-moon" style="display:none"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>
|
|
3762
3937
|
</button>
|
|
3763
3938
|
</div>
|
|
3764
3939
|
</div>
|
|
3765
|
-
|
|
3766
|
-
<div class="centerBody">
|
|
3767
3940
|
<section class="utilityGrid" style="margin-bottom: 24px;">
|
|
3768
3941
|
<div class="utilityCard">
|
|
3769
3942
|
<div class="utilityHead">Área de trabalho local</div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cccarv82/freya",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Personal AI Assistant with local-first persistence",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"health": "node scripts/validate-data.js && node scripts/validate-structure.js",
|
|
@@ -36,4 +36,4 @@
|
|
|
36
36
|
"pdf-lib": "^1.17.1",
|
|
37
37
|
"sqlite3": "^5.1.7"
|
|
38
38
|
}
|
|
39
|
-
}
|
|
39
|
+
}
|