@cccarv82/freya 2.1.3 → 2.1.4
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 +5 -2
- package/cli/web-ui.js +9 -9
- package/cli/web.js +16 -19
- package/package.json +1 -1
package/cli/web-ui.css
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Keep this file plain CSS to avoid escaping issues in inline template literals. */
|
|
3
3
|
|
|
4
4
|
:root {
|
|
5
|
-
--radius:
|
|
6
|
-
--radius2:
|
|
5
|
+
--radius: 0px;
|
|
6
|
+
--radius2: 0px;
|
|
7
7
|
--shadow: 0 20px 60px rgba(16, 24, 40, .12);
|
|
8
8
|
--shadow2: 0 10px 22px rgba(16, 24, 40, .10);
|
|
9
9
|
--ring: 0 0 0 4px rgba(37, 99, 235, .18);
|
|
@@ -529,3 +529,6 @@ textarea:focus { box-shadow: var(--ring); border-color: rgba(45,212,191,.35); }
|
|
|
529
529
|
.composerToggles { margin-top: 10px; display: grid; gap: 6px; }
|
|
530
530
|
.toggleRow { display:flex; align-items:center; gap:10px; user-select:none; font-size: 12px; color: var(--muted); }
|
|
531
531
|
.statusFooter { margin-top: 10px; display:flex; justify-content:flex-end; }
|
|
532
|
+
|
|
533
|
+
|
|
534
|
+
* { border-radius: 0 !important; }
|
package/cli/web-ui.js
CHANGED
|
@@ -680,7 +680,7 @@
|
|
|
680
680
|
function wireRailNav() {
|
|
681
681
|
const dash = $('railDashboard');
|
|
682
682
|
const rep = $('railReports');
|
|
683
|
-
const health = $('
|
|
683
|
+
const health = $('railCompanion');
|
|
684
684
|
if (dash) {
|
|
685
685
|
dash.onclick = () => {
|
|
686
686
|
const isReports = document.body && document.body.dataset && document.body.dataset.page === 'reports';
|
|
@@ -700,8 +700,8 @@
|
|
|
700
700
|
}
|
|
701
701
|
if (health) {
|
|
702
702
|
health.onclick = () => {
|
|
703
|
-
const isHealth = document.body && document.body.dataset && document.body.dataset.page ===
|
|
704
|
-
if (!isHealth) window.location.href = '/
|
|
703
|
+
const isHealth = document.body && document.body.dataset && document.body.dataset.page === companion;
|
|
704
|
+
if (!isHealth) window.location.href = '/companion';
|
|
705
705
|
};
|
|
706
706
|
}
|
|
707
707
|
}
|
|
@@ -948,7 +948,7 @@
|
|
|
948
948
|
async function refreshHealthChecklist() {
|
|
949
949
|
try {
|
|
950
950
|
setPill('run', 'checklist…');
|
|
951
|
-
const r = await api('/api/
|
|
951
|
+
const r = await api('/api/companion/checklist', { dir: dirOrDefault() });
|
|
952
952
|
if (r && r.needsInit) {
|
|
953
953
|
setOut(r.error || 'Workspace not initialized');
|
|
954
954
|
setPill('plan', 'needs init');
|
|
@@ -971,7 +971,7 @@
|
|
|
971
971
|
if (sp) sp.textContent = dirOrDefault();
|
|
972
972
|
setPill('run', 'health…');
|
|
973
973
|
setOut('');
|
|
974
|
-
const r = await api('/api/
|
|
974
|
+
const r = await api('/api/companion', { dir: dirOrDefault() });
|
|
975
975
|
if (r && r.needsInit) {
|
|
976
976
|
setOut(r.error || 'Workspace not initialized');
|
|
977
977
|
setLast(null);
|
|
@@ -981,7 +981,7 @@
|
|
|
981
981
|
setOut(r.output);
|
|
982
982
|
setLast(null);
|
|
983
983
|
setPill('ok', 'health ok');
|
|
984
|
-
if (
|
|
984
|
+
if (isCompanionPage) {
|
|
985
985
|
refreshHealthChecklist();
|
|
986
986
|
}
|
|
987
987
|
} catch (e) {
|
|
@@ -1019,7 +1019,7 @@
|
|
|
1019
1019
|
setLast(r.reportPath || null);
|
|
1020
1020
|
if (r.reportText) state.lastText = r.reportText;
|
|
1021
1021
|
await refreshReports({ selectLatest: true });
|
|
1022
|
-
if (
|
|
1022
|
+
if (isCompanionPage) {
|
|
1023
1023
|
refreshHealthChecklist();
|
|
1024
1024
|
}
|
|
1025
1025
|
setPill('ok', name + ' ok');
|
|
@@ -1314,7 +1314,7 @@
|
|
|
1314
1314
|
} catch {}
|
|
1315
1315
|
|
|
1316
1316
|
const isReportsPage = document.body && document.body.dataset && document.body.dataset.page === 'reports';
|
|
1317
|
-
const
|
|
1317
|
+
const isCompanionPage = document.body && document.body.dataset && document.body.dataset.page === companion;
|
|
1318
1318
|
|
|
1319
1319
|
// Load persisted settings from the workspace + bootstrap (auto-init + auto-health)
|
|
1320
1320
|
(async () => {
|
|
@@ -1342,7 +1342,7 @@
|
|
|
1342
1342
|
return;
|
|
1343
1343
|
}
|
|
1344
1344
|
|
|
1345
|
-
if (
|
|
1345
|
+
if (isCompanionPage) {
|
|
1346
1346
|
await refreshHealthChecklist();
|
|
1347
1347
|
return;
|
|
1348
1348
|
}
|
package/cli/web.js
CHANGED
|
@@ -877,9 +877,9 @@ function reportsHtml(defaultDir) {
|
|
|
877
877
|
return buildReportsHtml(safeDefault, APP_VERSION);
|
|
878
878
|
}
|
|
879
879
|
|
|
880
|
-
function
|
|
880
|
+
function companionHtml(defaultDir) {
|
|
881
881
|
const safeDefault = String(defaultDir || './freya').replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
882
|
-
return
|
|
882
|
+
return buildCompanionHtml(safeDefault, APP_VERSION);
|
|
883
883
|
}
|
|
884
884
|
|
|
885
885
|
function buildHtml(safeDefault, appVersion) {
|
|
@@ -904,7 +904,7 @@ function buildHtml(safeDefault, appVersion) {
|
|
|
904
904
|
<div class="railNav">
|
|
905
905
|
<button class="railBtn active" id="railDashboard" type="button" title="Dashboard">D</button>
|
|
906
906
|
<button class="railBtn" id="railReports" type="button" title="Relatórios">R</button>
|
|
907
|
-
<button class="railBtn" id="
|
|
907
|
+
<button class="railBtn" id="railCompanion" type="button" title="Companion">C</button>
|
|
908
908
|
</div>
|
|
909
909
|
<div class="railBottom">
|
|
910
910
|
<div class="railStatus" id="railStatus" title="status"></div>
|
|
@@ -1154,7 +1154,7 @@ function buildReportsHtml(safeDefault, appVersion) {
|
|
|
1154
1154
|
<div class="railNav">
|
|
1155
1155
|
<button class="railBtn" id="railDashboard" type="button" title="Dashboard">D</button>
|
|
1156
1156
|
<button class="railBtn active" id="railReports" type="button" title="Relatórios">R</button>
|
|
1157
|
-
<button class="railBtn" id="
|
|
1157
|
+
<button class="railBtn" id="railCompanion" type="button" title="Companion">C</button>
|
|
1158
1158
|
</div>
|
|
1159
1159
|
<div class="railBottom">
|
|
1160
1160
|
<div class="railStatus" id="railStatus" title="status"></div>
|
|
@@ -1209,17 +1209,17 @@ function buildReportsHtml(safeDefault, appVersion) {
|
|
|
1209
1209
|
</html>`
|
|
1210
1210
|
}
|
|
1211
1211
|
|
|
1212
|
-
function
|
|
1212
|
+
function buildCompanionHtml(safeDefault, appVersion) {
|
|
1213
1213
|
const safeVersion = escapeHtml(appVersion || 'unknown');
|
|
1214
1214
|
return `<!doctype html>
|
|
1215
1215
|
<html>
|
|
1216
1216
|
<head>
|
|
1217
1217
|
<meta charset="utf-8" />
|
|
1218
1218
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
1219
|
-
<title>
|
|
1219
|
+
<title>Scrum Master Companion</title>
|
|
1220
1220
|
<link rel="stylesheet" href="/app.css" />
|
|
1221
1221
|
</head>
|
|
1222
|
-
<body data-page="
|
|
1222
|
+
<body data-page="companion">
|
|
1223
1223
|
<div class="app">
|
|
1224
1224
|
<div class="frame">
|
|
1225
1225
|
<div class="shell">
|
|
@@ -1231,7 +1231,7 @@ function buildHealthHtml(safeDefault, appVersion) {
|
|
|
1231
1231
|
<div class="railNav">
|
|
1232
1232
|
<button class="railBtn" id="railDashboard" type="button" title="Dashboard">D</button>
|
|
1233
1233
|
<button class="railBtn" id="railReports" type="button" title="Relatórios">R</button>
|
|
1234
|
-
<button class="railBtn active" id="
|
|
1234
|
+
<button class="railBtn active" id="railCompanion" type="button" title="Companion">C</button>
|
|
1235
1235
|
</div>
|
|
1236
1236
|
<div class="railBottom">
|
|
1237
1237
|
<div class="railStatus" id="railStatus" title="status"></div>
|
|
@@ -1244,7 +1244,7 @@ function buildHealthHtml(safeDefault, appVersion) {
|
|
|
1244
1244
|
<span class="spark"></span>
|
|
1245
1245
|
<div class="brandStack">
|
|
1246
1246
|
<div class="brand">FREYA</div>
|
|
1247
|
-
<div class="brandSub">
|
|
1247
|
+
<div class="brandSub">Scrum Master Companion</div>
|
|
1248
1248
|
</div>
|
|
1249
1249
|
</div>
|
|
1250
1250
|
<div class="topActions">
|
|
@@ -1258,13 +1258,11 @@ function buildHealthHtml(safeDefault, appVersion) {
|
|
|
1258
1258
|
|
|
1259
1259
|
<section class="reportsHeader">
|
|
1260
1260
|
<div>
|
|
1261
|
-
<div class="reportsTitle">
|
|
1262
|
-
<div class="reportsSubtitle">
|
|
1261
|
+
<div class="reportsTitle">Scrum Master Companion</div>
|
|
1262
|
+
<div class="reportsSubtitle">Painel rapido para gerar relatorios e checar pendencias.</div>
|
|
1263
1263
|
</div>
|
|
1264
1264
|
<div class="reportsActions">
|
|
1265
|
-
<button class="btn small" type="button" onclick="refreshHealthChecklist()">Atualizar</button>
|
|
1266
|
-
<button class="btn small" type="button" onclick="doHealth()">Rodar health</button>
|
|
1267
|
-
</div>
|
|
1265
|
+
<button class="btn small" type="button" onclick="refreshHealthChecklist()">Atualizar</button> </div>
|
|
1268
1266
|
</section>
|
|
1269
1267
|
|
|
1270
1268
|
<section class="reportsTools" style="grid-template-columns: repeat(auto-fit,minmax(180px,1fr));">
|
|
@@ -1610,9 +1608,9 @@ async function cmdWeb({ port, dir, open, dev }) {
|
|
|
1610
1608
|
return;
|
|
1611
1609
|
}
|
|
1612
1610
|
|
|
1613
|
-
if (req.method === 'GET' && req.url === '/
|
|
1611
|
+
if (req.method === 'GET' && req.url === '/companion') {
|
|
1614
1612
|
try { res.__freyaDebug.workspaceDir = normalizeWorkspaceDir(dir || './freya'); } catch {}
|
|
1615
|
-
const body =
|
|
1613
|
+
const body = companionHtml(dir || './freya');
|
|
1616
1614
|
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'no-store' });
|
|
1617
1615
|
res.end(body);
|
|
1618
1616
|
return;
|
|
@@ -2411,7 +2409,7 @@ async function cmdWeb({ port, dir, open, dev }) {
|
|
|
2411
2409
|
return safeJson(res, 200, { ok: true, task: updated });
|
|
2412
2410
|
}
|
|
2413
2411
|
|
|
2414
|
-
if (req.url === '/api/
|
|
2412
|
+
if (req.url === '/api/companion/checklist') {
|
|
2415
2413
|
if (!looksLikeFreyaWorkspace(workspaceDir)) {
|
|
2416
2414
|
return safeJson(res, 200, { ok: false, needsInit: true, error: 'Workspace not initialized', items: [] });
|
|
2417
2415
|
}
|
|
@@ -2429,8 +2427,7 @@ async function cmdWeb({ port, dir, open, dev }) {
|
|
|
2429
2427
|
const reportsToday = reports.filter((r) => r && String(r.name || '').includes(today)).length;
|
|
2430
2428
|
|
|
2431
2429
|
const items = [
|
|
2432
|
-
|
|
2433
|
-
{ label: 'Blockers abertos', status: openBlockers > 0 ? 'warn' : 'ok', detail: `${openBlockers} aberto(s)` },
|
|
2430
|
+
{ label: 'Blockers abertos', status: openBlockers > 0 ? 'warn' : 'ok', detail: `${openBlockers} aberto(s)` },
|
|
2434
2431
|
{ label: 'Tarefas DO_NOW pendentes', status: pendingTasks > 0 ? 'warn' : 'ok', detail: `${pendingTasks} pendente(s)` },
|
|
2435
2432
|
{ label: 'Relatorios de hoje', status: reportsToday > 0 ? 'ok' : 'warn', detail: `${reportsToday} gerado(s)` }
|
|
2436
2433
|
];
|