@rel-time/mcp-server 1.2.13 → 1.2.14
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/index.js +280 -16
- package/package.json +1 -1
- package/server.json +2 -2
package/index.js
CHANGED
|
@@ -56,7 +56,7 @@ let LAST_INVOICE_PACK = null;
|
|
|
56
56
|
|
|
57
57
|
const SERVER_INFO = {
|
|
58
58
|
name: "rel-time-mcp-server",
|
|
59
|
-
version: "1.2.
|
|
59
|
+
version: "1.2.14",
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
/**
|
|
@@ -667,6 +667,15 @@ function generateAuditReportHtml(audit) {
|
|
|
667
667
|
}</span>
|
|
668
668
|
</div>
|
|
669
669
|
</div>
|
|
670
|
+
<div class="filter-bar no-print">
|
|
671
|
+
<div class="tab-group" id="localTabGroup">
|
|
672
|
+
<button class="filter-tab local-filter-tab active" onclick="setLocalPill(this, 'all')">All (${localCheck.summary.total_files_scanned})</button>
|
|
673
|
+
<button class="filter-tab local-filter-tab" onclick="setLocalPill(this, 'local-settled')">Settled (${localCheck.summary.verified_settled_count})</button>
|
|
674
|
+
<button class="filter-tab local-filter-tab" onclick="setLocalPill(this, 'local-pending')">Pending (${localCheck.summary.verified_pending_count})</button>
|
|
675
|
+
<button class="filter-tab local-filter-tab" onclick="setLocalPill(this, 'local-alert')">Unanchored / Modified (${localCheck.summary.unanchored_or_modified_count})</button>
|
|
676
|
+
</div>
|
|
677
|
+
<input id="localSearchInput" class="search-input" type="text" placeholder="QUERY FILE NAME / SHA-256 / PASSKEY / BLOCK..." oninput="resetAndFilterLocal()" />
|
|
678
|
+
</div>
|
|
670
679
|
<div class="table-wrap">
|
|
671
680
|
<table>
|
|
672
681
|
<thead>
|
|
@@ -681,9 +690,16 @@ function generateAuditReportHtml(audit) {
|
|
|
681
690
|
<th style="text-align:right">Receipt</th>
|
|
682
691
|
</tr>
|
|
683
692
|
</thead>
|
|
684
|
-
<tbody>
|
|
693
|
+
<tbody id="localVerifyBody">
|
|
685
694
|
${localCheck.files
|
|
686
695
|
.map((f, idx) => {
|
|
696
|
+
const localRowClass =
|
|
697
|
+
f.integrity_status === "VERIFIED_SETTLED"
|
|
698
|
+
? "local-settled"
|
|
699
|
+
: f.integrity_status === "VERIFIED_PENDING"
|
|
700
|
+
? "local-pending"
|
|
701
|
+
: "local-alert";
|
|
702
|
+
|
|
687
703
|
const statusTag =
|
|
688
704
|
f.integrity_status === "VERIFIED_SETTLED"
|
|
689
705
|
? `<span class="status-cell"><span class="dot dot-settled"></span><span class="mono" style="color:var(--text)">VERIFIED · SETTLED</span></span>`
|
|
@@ -710,7 +726,9 @@ function generateAuditReportHtml(audit) {
|
|
|
710
726
|
: `<span class="mono muted">—</span>`;
|
|
711
727
|
|
|
712
728
|
return `
|
|
713
|
-
<tr
|
|
729
|
+
<tr class="local-row ${localRowClass}" data-search="${escapeHtml(
|
|
730
|
+
`${f.file_name} ${f.local_sha256} ${f.signer_public_key || ""} ${f.block_height || ""} ${f.anchor_mode || ""}`.toLowerCase()
|
|
731
|
+
)}">
|
|
714
732
|
<td class="mono muted">${String(idx + 1).padStart(2, "0")}</td>
|
|
715
733
|
<td>
|
|
716
734
|
<span style="font-weight:600;color:var(--text)">${escapeHtml(f.file_name)}</span>
|
|
@@ -730,6 +748,26 @@ function generateAuditReportHtml(audit) {
|
|
|
730
748
|
</tbody>
|
|
731
749
|
</table>
|
|
732
750
|
</div>
|
|
751
|
+
<div class="pagination-bar no-print" id="localPaginationBar">
|
|
752
|
+
<div class="pagination-info mono">
|
|
753
|
+
<span id="localRangeLabel">SHOWING 1–25</span>
|
|
754
|
+
<span class="muted">·</span>
|
|
755
|
+
<label class="mono muted" for="localPageSizeSelect">ROWS:</label>
|
|
756
|
+
<select id="localPageSizeSelect" class="page-size-select mono" onchange="changeLocalPageSize(this.value)">
|
|
757
|
+
<option value="25" selected>25 / PAGE</option>
|
|
758
|
+
<option value="50">50 / PAGE</option>
|
|
759
|
+
<option value="100">100 / PAGE</option>
|
|
760
|
+
<option value="0">ALL (FULL LIST)</option>
|
|
761
|
+
</select>
|
|
762
|
+
</div>
|
|
763
|
+
<div class="pagination-controls">
|
|
764
|
+
<button type="button" class="page-btn mono" id="localFirstBtn" onclick="goLocalPage(1)">[ ⟪ FIRST ]</button>
|
|
765
|
+
<button type="button" class="page-btn mono" id="localPrevBtn" onclick="stepLocalPage(-1)">[ ‹ PREV ]</button>
|
|
766
|
+
<span class="page-indicator mono" id="localPageIndicator">PAGE 1 OF 1</span>
|
|
767
|
+
<button type="button" class="page-btn mono" id="localNextBtn" onclick="stepLocalPage(1)">[ NEXT › ]</button>
|
|
768
|
+
<button type="button" class="page-btn mono" id="localLastBtn" onclick="goLocalLastPage()">[ LAST ⟫ ]</button>
|
|
769
|
+
</div>
|
|
770
|
+
</div>
|
|
733
771
|
</section>`
|
|
734
772
|
: "";
|
|
735
773
|
|
|
@@ -1322,9 +1360,68 @@ function generateAuditReportHtml(audit) {
|
|
|
1322
1360
|
font-family: "JetBrains Mono", "SF Mono", Menlo, monospace;
|
|
1323
1361
|
font-size: 11.5px;
|
|
1324
1362
|
}
|
|
1363
|
+
.pagination-bar {
|
|
1364
|
+
display: flex;
|
|
1365
|
+
justify-content: space-between;
|
|
1366
|
+
align-items: center;
|
|
1367
|
+
flex-wrap: wrap;
|
|
1368
|
+
gap: 12px;
|
|
1369
|
+
margin-top: 14px;
|
|
1370
|
+
padding-top: 12px;
|
|
1371
|
+
border-top: 1px solid var(--border);
|
|
1372
|
+
}
|
|
1373
|
+
.pagination-info {
|
|
1374
|
+
display: flex;
|
|
1375
|
+
align-items: center;
|
|
1376
|
+
gap: 8px;
|
|
1377
|
+
font-size: 11px;
|
|
1378
|
+
color: var(--text-secondary);
|
|
1379
|
+
}
|
|
1380
|
+
.page-size-select {
|
|
1381
|
+
background: var(--bg);
|
|
1382
|
+
color: var(--text);
|
|
1383
|
+
border: 1px solid var(--border-strong);
|
|
1384
|
+
padding: 4px 8px;
|
|
1385
|
+
font-size: 10.5px;
|
|
1386
|
+
cursor: pointer;
|
|
1387
|
+
}
|
|
1388
|
+
.pagination-controls {
|
|
1389
|
+
display: flex;
|
|
1390
|
+
align-items: center;
|
|
1391
|
+
gap: 6px;
|
|
1392
|
+
}
|
|
1393
|
+
.page-btn {
|
|
1394
|
+
background: var(--bg);
|
|
1395
|
+
color: var(--text-secondary);
|
|
1396
|
+
border: 1px solid var(--border-strong);
|
|
1397
|
+
padding: 5px 10px;
|
|
1398
|
+
font-size: 10.5px;
|
|
1399
|
+
font-weight: 600;
|
|
1400
|
+
cursor: pointer;
|
|
1401
|
+
transition: all 0.12s ease;
|
|
1402
|
+
}
|
|
1403
|
+
.page-btn:hover:not(:disabled) {
|
|
1404
|
+
border-color: var(--amber);
|
|
1405
|
+
color: var(--amber);
|
|
1406
|
+
}
|
|
1407
|
+
.page-btn:disabled {
|
|
1408
|
+
opacity: 0.35;
|
|
1409
|
+
cursor: not-allowed;
|
|
1410
|
+
}
|
|
1411
|
+
.page-indicator {
|
|
1412
|
+
font-size: 11px;
|
|
1413
|
+
font-weight: 600;
|
|
1414
|
+
color: var(--text);
|
|
1415
|
+
padding: 0 8px;
|
|
1416
|
+
}
|
|
1417
|
+
tr.filter-hidden,
|
|
1418
|
+
tr.page-hidden {
|
|
1419
|
+
display: none;
|
|
1420
|
+
}
|
|
1325
1421
|
@media print {
|
|
1326
1422
|
body { background: var(--bg) !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; padding: 10px; }
|
|
1327
1423
|
.no-print { display: none !important; }
|
|
1424
|
+
tr.page-hidden { display: table-row !important; }
|
|
1328
1425
|
}
|
|
1329
1426
|
</style>
|
|
1330
1427
|
</head>
|
|
@@ -1480,15 +1577,15 @@ function generateAuditReportHtml(audit) {
|
|
|
1480
1577
|
</div>
|
|
1481
1578
|
</div>
|
|
1482
1579
|
<div class="filter-bar no-print">
|
|
1483
|
-
<div class="tab-group">
|
|
1484
|
-
<button class="filter-tab active" onclick="setPill(this, 'all')">All (${entries.length})</button>
|
|
1485
|
-
<button class="filter-tab" onclick="setPill(this, 'status-settled')">Settled (${settledCount})</button>
|
|
1486
|
-
<button class="filter-tab" onclick="setPill(this, 'status-pending')">Pending (${pendingCount})</button>
|
|
1487
|
-
<button class="filter-tab" onclick="setPill(this, 'mode-biometric')">Passkey (${biometricCount})</button>
|
|
1488
|
-
<button class="filter-tab" onclick="setPill(this, 'mode-temporal')">Temporal VDF (${temporalCount})</button>
|
|
1489
|
-
<button class="filter-tab" onclick="setPill(this, 'mode-standard')">Standard (${standardCount})</button>
|
|
1580
|
+
<div class="tab-group" id="ledgerTabGroup">
|
|
1581
|
+
<button class="filter-tab ledger-filter-tab active" onclick="setPill(this, 'all')">All (${entries.length})</button>
|
|
1582
|
+
<button class="filter-tab ledger-filter-tab" onclick="setPill(this, 'status-settled')">Settled (${settledCount})</button>
|
|
1583
|
+
<button class="filter-tab ledger-filter-tab" onclick="setPill(this, 'status-pending')">Pending (${pendingCount})</button>
|
|
1584
|
+
<button class="filter-tab ledger-filter-tab" onclick="setPill(this, 'mode-biometric')">Passkey (${biometricCount})</button>
|
|
1585
|
+
<button class="filter-tab ledger-filter-tab" onclick="setPill(this, 'mode-temporal')">Temporal VDF (${temporalCount})</button>
|
|
1586
|
+
<button class="filter-tab ledger-filter-tab" onclick="setPill(this, 'mode-standard')">Standard (${standardCount})</button>
|
|
1490
1587
|
</div>
|
|
1491
|
-
<input id="searchInput" class="search-input" type="text" placeholder="QUERY SHA-256 / T_INDEX / PASSKEY / TXID / BLOCK..." oninput="
|
|
1588
|
+
<input id="searchInput" class="search-input" type="text" placeholder="QUERY SHA-256 / T_INDEX / PASSKEY / TXID / BLOCK..." oninput="resetAndFilterLedger()" />
|
|
1492
1589
|
</div>
|
|
1493
1590
|
<div class="table-wrap">
|
|
1494
1591
|
<table>
|
|
@@ -1509,11 +1606,40 @@ function generateAuditReportHtml(audit) {
|
|
|
1509
1606
|
</tbody>
|
|
1510
1607
|
</table>
|
|
1511
1608
|
</div>
|
|
1609
|
+
<div class="pagination-bar no-print" id="ledgerPaginationBar">
|
|
1610
|
+
<div class="pagination-info mono">
|
|
1611
|
+
<span id="ledgerRangeLabel">SHOWING 1–25</span>
|
|
1612
|
+
<span class="muted">·</span>
|
|
1613
|
+
<label class="mono muted" for="ledgerPageSizeSelect">ROWS:</label>
|
|
1614
|
+
<select id="ledgerPageSizeSelect" class="page-size-select mono" onchange="changeLedgerPageSize(this.value)">
|
|
1615
|
+
<option value="25" selected>25 / PAGE</option>
|
|
1616
|
+
<option value="50">50 / PAGE</option>
|
|
1617
|
+
<option value="100">100 / PAGE</option>
|
|
1618
|
+
<option value="0">ALL (FULL LIST)</option>
|
|
1619
|
+
</select>
|
|
1620
|
+
</div>
|
|
1621
|
+
<div class="pagination-controls">
|
|
1622
|
+
<button type="button" class="page-btn mono" id="ledgerFirstBtn" onclick="goLedgerPage(1)">[ ⟪ FIRST ]</button>
|
|
1623
|
+
<button type="button" class="page-btn mono" id="ledgerPrevBtn" onclick="stepLedgerPage(-1)">[ ‹ PREV ]</button>
|
|
1624
|
+
<span class="page-indicator mono" id="ledgerPageIndicator">PAGE 1 OF 1</span>
|
|
1625
|
+
<button type="button" class="page-btn mono" id="ledgerNextBtn" onclick="stepLedgerPage(1)">[ NEXT › ]</button>
|
|
1626
|
+
<button type="button" class="page-btn mono" id="ledgerLastBtn" onclick="goLedgerLastPage()">[ LAST ⟫ ]</button>
|
|
1627
|
+
</div>
|
|
1628
|
+
</div>
|
|
1512
1629
|
</section>
|
|
1513
1630
|
</div>
|
|
1514
1631
|
|
|
1515
1632
|
<script>
|
|
1516
1633
|
let currentFilter = 'all';
|
|
1634
|
+
let ledgerPage = 1;
|
|
1635
|
+
let ledgerPageSize = 25;
|
|
1636
|
+
let ledgerTotalPages = 1;
|
|
1637
|
+
|
|
1638
|
+
let currentLocalFilter = 'all';
|
|
1639
|
+
let localPage = 1;
|
|
1640
|
+
let localPageSize = 25;
|
|
1641
|
+
let localTotalPages = 1;
|
|
1642
|
+
|
|
1517
1643
|
function applyTheme(theme) {
|
|
1518
1644
|
const root = document.documentElement;
|
|
1519
1645
|
const btn = document.getElementById('themeToggleBtn');
|
|
@@ -1536,20 +1662,158 @@ function generateAuditReportHtml(audit) {
|
|
|
1536
1662
|
if (saved === 'light' || saved === 'dark') applyTheme(saved);
|
|
1537
1663
|
} catch (e) {}
|
|
1538
1664
|
})();
|
|
1665
|
+
|
|
1666
|
+
// Section 01: Local Directory Cross-Reference Pagination & Filtering
|
|
1667
|
+
function setLocalPill(btn, filter) {
|
|
1668
|
+
currentLocalFilter = filter;
|
|
1669
|
+
document.querySelectorAll('.local-filter-tab').forEach(el => el.classList.remove('active'));
|
|
1670
|
+
btn.classList.add('active');
|
|
1671
|
+
localPage = 1;
|
|
1672
|
+
filterLocalTable();
|
|
1673
|
+
}
|
|
1674
|
+
function resetAndFilterLocal() {
|
|
1675
|
+
localPage = 1;
|
|
1676
|
+
filterLocalTable();
|
|
1677
|
+
}
|
|
1678
|
+
function changeLocalPageSize(val) {
|
|
1679
|
+
localPageSize = Number(val) || 0;
|
|
1680
|
+
localPage = 1;
|
|
1681
|
+
filterLocalTable();
|
|
1682
|
+
}
|
|
1683
|
+
function goLocalPage(p) {
|
|
1684
|
+
localPage = Math.max(1, Math.min(localTotalPages, p));
|
|
1685
|
+
filterLocalTable();
|
|
1686
|
+
}
|
|
1687
|
+
function stepLocalPage(delta) {
|
|
1688
|
+
goLocalPage(localPage + delta);
|
|
1689
|
+
}
|
|
1690
|
+
function goLocalLastPage() {
|
|
1691
|
+
goLocalPage(localTotalPages);
|
|
1692
|
+
}
|
|
1693
|
+
function filterLocalTable() {
|
|
1694
|
+
const rows = Array.from(document.querySelectorAll('.local-row'));
|
|
1695
|
+
if (!rows.length) return;
|
|
1696
|
+
const qEl = document.getElementById('localSearchInput');
|
|
1697
|
+
const q = (qEl ? qEl.value : '').trim().toLowerCase();
|
|
1698
|
+
const matched = [];
|
|
1699
|
+
rows.forEach(row => {
|
|
1700
|
+
const matchesFilter = currentLocalFilter === 'all' || row.classList.contains(currentLocalFilter);
|
|
1701
|
+
const matchesQuery = !q || (row.getAttribute('data-search') || '').includes(q);
|
|
1702
|
+
if (matchesFilter && matchesQuery) {
|
|
1703
|
+
row.classList.remove('filter-hidden');
|
|
1704
|
+
matched.push(row);
|
|
1705
|
+
} else {
|
|
1706
|
+
row.classList.add('filter-hidden');
|
|
1707
|
+
row.classList.remove('page-hidden');
|
|
1708
|
+
}
|
|
1709
|
+
});
|
|
1710
|
+
|
|
1711
|
+
const total = matched.length;
|
|
1712
|
+
localTotalPages = localPageSize > 0 ? Math.max(1, Math.ceil(total / localPageSize)) : 1;
|
|
1713
|
+
if (localPage > localTotalPages) localPage = localTotalPages;
|
|
1714
|
+
const startIdx = localPageSize > 0 ? (localPage - 1) * localPageSize : 0;
|
|
1715
|
+
const endIdx = localPageSize > 0 ? Math.min(total, startIdx + localPageSize) : total;
|
|
1716
|
+
|
|
1717
|
+
matched.forEach((row, idx) => {
|
|
1718
|
+
if (localPageSize > 0 && (idx < startIdx || idx >= endIdx)) {
|
|
1719
|
+
row.classList.add('page-hidden');
|
|
1720
|
+
} else {
|
|
1721
|
+
row.classList.remove('page-hidden');
|
|
1722
|
+
}
|
|
1723
|
+
});
|
|
1724
|
+
|
|
1725
|
+
const rangeEl = document.getElementById('localRangeLabel');
|
|
1726
|
+
if (rangeEl) {
|
|
1727
|
+
rangeEl.textContent = total === 0 ? 'SHOWING 0 OF 0 FILES' : 'SHOWING ' + (startIdx + 1) + '–' + endIdx + ' OF ' + total.toLocaleString() + ' FILES';
|
|
1728
|
+
}
|
|
1729
|
+
const indEl = document.getElementById('localPageIndicator');
|
|
1730
|
+
if (indEl) indEl.textContent = 'PAGE ' + localPage + ' OF ' + localTotalPages;
|
|
1731
|
+
const firstBtn = document.getElementById('localFirstBtn');
|
|
1732
|
+
const prevBtn = document.getElementById('localPrevBtn');
|
|
1733
|
+
const nextBtn = document.getElementById('localNextBtn');
|
|
1734
|
+
const lastBtn = document.getElementById('localLastBtn');
|
|
1735
|
+
if (firstBtn) firstBtn.disabled = localPage <= 1;
|
|
1736
|
+
if (prevBtn) prevBtn.disabled = localPage <= 1;
|
|
1737
|
+
if (nextBtn) nextBtn.disabled = localPage >= localTotalPages;
|
|
1738
|
+
if (lastBtn) lastBtn.disabled = localPage >= localTotalPages;
|
|
1739
|
+
}
|
|
1740
|
+
|
|
1741
|
+
// Section 03: Chronological Timechain Ledger Pagination & Filtering
|
|
1539
1742
|
function setPill(btn, filter) {
|
|
1540
1743
|
currentFilter = filter;
|
|
1541
|
-
document.querySelectorAll('.filter-tab').forEach(el => el.classList.remove('active'));
|
|
1744
|
+
document.querySelectorAll('.ledger-filter-tab').forEach(el => el.classList.remove('active'));
|
|
1542
1745
|
btn.classList.add('active');
|
|
1746
|
+
ledgerPage = 1;
|
|
1543
1747
|
filterLedger();
|
|
1544
1748
|
}
|
|
1749
|
+
function resetAndFilterLedger() {
|
|
1750
|
+
ledgerPage = 1;
|
|
1751
|
+
filterLedger();
|
|
1752
|
+
}
|
|
1753
|
+
function changeLedgerPageSize(val) {
|
|
1754
|
+
ledgerPageSize = Number(val) || 0;
|
|
1755
|
+
ledgerPage = 1;
|
|
1756
|
+
filterLedger();
|
|
1757
|
+
}
|
|
1758
|
+
function goLedgerPage(p) {
|
|
1759
|
+
ledgerPage = Math.max(1, Math.min(ledgerTotalPages, p));
|
|
1760
|
+
filterLedger();
|
|
1761
|
+
}
|
|
1762
|
+
function stepLedgerPage(delta) {
|
|
1763
|
+
goLedgerPage(ledgerPage + delta);
|
|
1764
|
+
}
|
|
1765
|
+
function goLedgerLastPage() {
|
|
1766
|
+
goLedgerPage(ledgerTotalPages);
|
|
1767
|
+
}
|
|
1545
1768
|
function filterLedger() {
|
|
1546
|
-
const
|
|
1547
|
-
document.
|
|
1769
|
+
const rows = Array.from(document.querySelectorAll('.ledger-row'));
|
|
1770
|
+
const qEl = document.getElementById('searchInput');
|
|
1771
|
+
const q = (qEl ? qEl.value : '').trim().toLowerCase();
|
|
1772
|
+
const matched = [];
|
|
1773
|
+
rows.forEach(row => {
|
|
1548
1774
|
const matchesFilter = currentFilter === 'all' || row.classList.contains(currentFilter);
|
|
1549
1775
|
const matchesQuery = !q || (row.getAttribute('data-search') || '').includes(q);
|
|
1550
|
-
|
|
1776
|
+
if (matchesFilter && matchesQuery) {
|
|
1777
|
+
row.classList.remove('filter-hidden');
|
|
1778
|
+
matched.push(row);
|
|
1779
|
+
} else {
|
|
1780
|
+
row.classList.add('filter-hidden');
|
|
1781
|
+
row.classList.remove('page-hidden');
|
|
1782
|
+
}
|
|
1551
1783
|
});
|
|
1552
|
-
|
|
1784
|
+
|
|
1785
|
+
const total = matched.length;
|
|
1786
|
+
ledgerTotalPages = ledgerPageSize > 0 ? Math.max(1, Math.ceil(total / ledgerPageSize)) : 1;
|
|
1787
|
+
if (ledgerPage > ledgerTotalPages) ledgerPage = ledgerTotalPages;
|
|
1788
|
+
const startIdx = ledgerPageSize > 0 ? (ledgerPage - 1) * ledgerPageSize : 0;
|
|
1789
|
+
const endIdx = ledgerPageSize > 0 ? Math.min(total, startIdx + ledgerPageSize) : total;
|
|
1790
|
+
|
|
1791
|
+
matched.forEach((row, idx) => {
|
|
1792
|
+
if (ledgerPageSize > 0 && (idx < startIdx || idx >= endIdx)) {
|
|
1793
|
+
row.classList.add('page-hidden');
|
|
1794
|
+
} else {
|
|
1795
|
+
row.classList.remove('page-hidden');
|
|
1796
|
+
}
|
|
1797
|
+
});
|
|
1798
|
+
|
|
1799
|
+
const rangeEl = document.getElementById('ledgerRangeLabel');
|
|
1800
|
+
if (rangeEl) {
|
|
1801
|
+
rangeEl.textContent = total === 0 ? 'SHOWING 0 OF 0 RECORDS' : 'SHOWING ' + (startIdx + 1) + '–' + endIdx + ' OF ' + total.toLocaleString() + ' RECORDS';
|
|
1802
|
+
}
|
|
1803
|
+
const indEl = document.getElementById('ledgerPageIndicator');
|
|
1804
|
+
if (indEl) indEl.textContent = 'PAGE ' + ledgerPage + ' OF ' + ledgerTotalPages;
|
|
1805
|
+
const firstBtn = document.getElementById('ledgerFirstBtn');
|
|
1806
|
+
const prevBtn = document.getElementById('ledgerPrevBtn');
|
|
1807
|
+
const nextBtn = document.getElementById('ledgerNextBtn');
|
|
1808
|
+
const lastBtn = document.getElementById('ledgerLastBtn');
|
|
1809
|
+
if (firstBtn) firstBtn.disabled = ledgerPage <= 1;
|
|
1810
|
+
if (prevBtn) prevBtn.disabled = ledgerPage <= 1;
|
|
1811
|
+
if (nextBtn) nextBtn.disabled = ledgerPage >= ledgerTotalPages;
|
|
1812
|
+
if (lastBtn) lastBtn.disabled = ledgerPage >= ledgerTotalPages;
|
|
1813
|
+
}
|
|
1814
|
+
|
|
1815
|
+
filterLocalTable();
|
|
1816
|
+
filterLedger();
|
|
1553
1817
|
</script>
|
|
1554
1818
|
</body>
|
|
1555
1819
|
</html>`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rel-time/mcp-server",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.14",
|
|
4
4
|
"mcpName": "io.github.relsun369-dev/rel-time",
|
|
5
5
|
"description": "Official Model Context Protocol (MCP) server for Rel-Time (rel-time.com) — Zero-Knowledge Bitcoin & VDF Provenance, Local File Hashing, and Sun-Stamp Generation for Claude, Cursor, Windsurf, and Antigravity.",
|
|
6
6
|
"main": "index.js",
|
package/server.json
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"url": "https://github.com/relsun369-dev/reltime-mcp",
|
|
9
9
|
"source": "github"
|
|
10
10
|
},
|
|
11
|
-
"version": "1.2.
|
|
11
|
+
"version": "1.2.14",
|
|
12
12
|
"packages": [
|
|
13
13
|
{
|
|
14
14
|
"registryType": "npm",
|
|
15
15
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
16
16
|
"identifier": "@rel-time/mcp-server",
|
|
17
|
-
"version": "1.2.
|
|
17
|
+
"version": "1.2.14",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|
|
20
20
|
}
|