diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 8ae77d8..7c246cb 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,6 +1,30 @@ TASKMATE - CHANGELOG ==================== +================================================================================ +29.12.2025 - Gitea: Commits aus Anzeige ausblenden +================================================================================ + +FEATURE: COMMITS AUS ANZEIGE ENTFERNEN +-------------------------------------------------------------------------------- +- X-Button bei jedem Commit zum Ausblenden (erscheint bei Hover) +- "Alle ausblenden" Button in der Überschrift +- Ausgeblendete Commits werden nur aus der UI entfernt, nicht aus Git +- Anzeige zeigt "Alle Commits ausgeblendet" wenn Liste leer + +ÄNDERUNGEN +-------------------------------------------------------------------------------- +- frontend/index.html: Commits-Header mit "Alle ausblenden" Button +- frontend/css/gitea.css: + * .commits-header Style für Überschrift mit Button + * .commit-delete Button-Style (erscheint bei Hover) +- frontend/js/gitea.js: + * hiddenCommits Set im Constructor + * renderCommits() filtert ausgeblendete Commits + * handleCommitListClick() für Event-Delegation + * hideCommit(), clearAllCommits() Methoden +- frontend/sw.js: Cache-Version auf 125 erhöht + ================================================================================ 29.12.2025 - Gitea: Commit-Autor = eingeloggter Benutzer ================================================================================ diff --git a/backups/backup_2025-12-22T19-54-01-136Z.db-wal b/backups/backup_2025-12-22T19-54-01-136Z.db-wal deleted file mode 100644 index 7373ca4..0000000 Binary files a/backups/backup_2025-12-22T19-54-01-136Z.db-wal and /dev/null differ diff --git a/backups/backup_2025-12-22T19-54-01-136Z.db b/backups/backup_2025-12-29T19-30-20-564Z.db similarity index 77% rename from backups/backup_2025-12-22T19-54-01-136Z.db rename to backups/backup_2025-12-29T19-30-20-564Z.db index 0fdc965..dfdeb0e 100644 Binary files a/backups/backup_2025-12-22T19-54-01-136Z.db and b/backups/backup_2025-12-29T19-30-20-564Z.db differ diff --git a/backups/backup_2025-12-29T19-30-20-564Z.db-wal b/backups/backup_2025-12-29T19-30-20-564Z.db-wal new file mode 100644 index 0000000..4f0f992 Binary files /dev/null and b/backups/backup_2025-12-29T19-30-20-564Z.db-wal differ diff --git a/data/taskmate.db-shm b/data/taskmate.db-shm index fe9ac28..4b65144 100644 Binary files a/data/taskmate.db-shm and b/data/taskmate.db-shm differ diff --git a/data/taskmate.db-wal b/data/taskmate.db-wal index e69de29..4f0f992 100644 Binary files a/data/taskmate.db-wal and b/data/taskmate.db-wal differ diff --git a/frontend/css/gitea.css b/frontend/css/gitea.css index 73cfdb4..c027cdf 100644 --- a/frontend/css/gitea.css +++ b/frontend/css/gitea.css @@ -391,6 +391,19 @@ COMMITS PANEL ============================================================================= */ +.commits-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: var(--spacing-3); +} + +.commits-header h3 { + margin: 0; + font-size: var(--text-base); + color: var(--text-primary); +} + .gitea-commits-panel h3 { margin: 0 0 var(--spacing-3) 0; font-size: var(--text-base); @@ -452,6 +465,32 @@ color: var(--text-secondary); } +.commit-delete { + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + border: none; + background: transparent; + color: var(--text-tertiary); + cursor: pointer; + border-radius: var(--radius-sm); + opacity: 0; + transition: opacity 0.15s, color 0.15s, background 0.15s; + flex-shrink: 0; + align-self: center; +} + +.commit-item:hover .commit-delete { + opacity: 1; +} + +.commit-delete:hover { + color: var(--error); + background: rgba(239, 68, 68, 0.1); +} + /* ============================================================================= EMPTY STATE ============================================================================= */ diff --git a/frontend/index.html b/frontend/index.html index 431c872..88310d9 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -659,7 +659,12 @@
-

Letzte Commits

+
+

Letzte Commits

+ +
diff --git a/frontend/js/gitea.js b/frontend/js/gitea.js index a7b81d3..decf542 100644 --- a/frontend/js/gitea.js +++ b/frontend/js/gitea.js @@ -19,6 +19,7 @@ class GiteaManager { this.initialized = false; this.refreshInterval = null; this.isLoading = false; + this.hiddenCommits = new Set(); // Ausgeblendete Commits } async init() { @@ -79,6 +80,10 @@ class GiteaManager { // Branch umbenennen $('#btn-rename-branch')?.addEventListener('click', () => this.openRenameBranchModal()); $('#git-rename-branch-form')?.addEventListener('submit', (e) => this.executeRenameBranch(e)); + + // Commits ausblenden + $('#btn-clear-commits')?.addEventListener('click', () => this.clearAllCommits()); + $('#git-commits-list')?.addEventListener('click', (e) => this.handleCommitListClick(e)); } subscribeToStore() { @@ -775,24 +780,73 @@ class GiteaManager { renderCommits() { const listEl = $('#git-commits-list'); + const clearBtn = $('#btn-clear-commits'); if (!listEl) return; - if (this.commits.length === 0) { - listEl.innerHTML = '

Keine Commits gefunden

'; + // Filtern: Ausgeblendete Commits nicht anzeigen + const visibleCommits = this.commits.filter(commit => { + const hash = commit.hash || commit.sha || commit.shortHash; + return !this.hiddenCommits.has(hash); + }); + + // Button-Text anpassen + if (clearBtn) { + clearBtn.style.display = visibleCommits.length > 0 ? '' : 'none'; + } + + if (visibleCommits.length === 0) { + const message = this.commits.length > 0 + ? 'Alle Commits ausgeblendet' + : 'Keine Commits gefunden'; + listEl.innerHTML = `

${message}

`; return; } - listEl.innerHTML = this.commits.map(commit => ` -
- ${escapeHtml(commit.shortHash || commit.sha?.substring(0, 7))} + listEl.innerHTML = visibleCommits.map(commit => { + const hash = commit.hash || commit.sha || ''; + const shortHash = commit.shortHash || hash.substring(0, 7); + return ` +
+ ${escapeHtml(shortHash)}
${escapeHtml(commit.message?.split('\n')[0] || '')}
${escapeHtml(commit.author)} · ${this.formatDate(commit.date)}
+
- `).join(''); + `}).join(''); + } + + handleCommitListClick(e) { + const deleteBtn = e.target.closest('.commit-delete'); + if (deleteBtn) { + const hash = deleteBtn.dataset.hash; + if (hash) { + this.hideCommit(hash); + } + } + } + + hideCommit(hash) { + this.hiddenCommits.add(hash); + this.renderCommits(); + this.showToast('Commit ausgeblendet', 'info'); + } + + clearAllCommits() { + // Alle sichtbaren Commits ausblenden + this.commits.forEach(commit => { + const hash = commit.hash || commit.sha || commit.shortHash; + if (hash) { + this.hiddenCommits.add(hash); + } + }); + this.renderCommits(); + this.showToast('Alle Commits ausgeblendet', 'info'); } renderChanges() { diff --git a/frontend/sw.js b/frontend/sw.js index f6bc174..42f66a3 100644 --- a/frontend/sw.js +++ b/frontend/sw.js @@ -4,7 +4,7 @@ * Offline support and caching */ -const CACHE_VERSION = '124'; +const CACHE_VERSION = '125'; const CACHE_NAME = 'taskmate-v' + CACHE_VERSION; const STATIC_CACHE_NAME = 'taskmate-static-v' + CACHE_VERSION; const DYNAMIC_CACHE_NAME = 'taskmate-dynamic-v' + CACHE_VERSION; diff --git a/logs/app.log b/logs/app.log index 2bb1032..35bfee4 100644 --- a/logs/app.log +++ b/logs/app.log @@ -33265,3 +33265,225 @@ hint: See the 'Note about fast-forwards' in 'git push --help' for details. [2025-12-29T19:20:08.232Z] [INFO] GET /api/health 200 1ms [2025-12-29T19:20:25.885Z] [INFO] CSRF: Token missing or not stored for user 1, generated new token [2025-12-29T19:20:25.886Z] [INFO] POST /api/git/commit/4 403 5ms +[2025-12-29T19:20:26.358Z] [INFO] Commit mit Autor: HG +[2025-12-29T19:20:27.316Z] [INFO] POST /api/git/commit/4 200 1425ms +[2025-12-29T19:20:27.832Z] [INFO] GET /api/git/status/4 200 510ms +[2025-12-29T19:20:27.952Z] [INFO] GET /api/git/branches/4 304 119ms +[2025-12-29T19:20:28.055Z] [INFO] GET /api/git/commits/4?limit=10 200 102ms +[2025-12-29T19:20:38.170Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:21:08.088Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:21:35.656Z] [INFO] POST /api/git/push/4 200 2395ms +[2025-12-29T19:21:36.140Z] [INFO] GET /api/git/status/4 200 477ms +[2025-12-29T19:21:36.227Z] [INFO] GET /api/git/branches/4 304 86ms +[2025-12-29T19:21:36.317Z] [INFO] GET /api/git/commits/4?limit=10 304 89ms +[2025-12-29T19:21:38.001Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:22:07.921Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:22:37.844Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:23:07.716Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:23:37.640Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:24:07.579Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:24:37.087Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:25:07.038Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:25:32.215Z] [INFO] GET / 304 0ms +[2025-12-29T19:25:32.223Z] [INFO] Socket disconnected: HG (SBl_TOuyLp5B7BWvAAAD) +[2025-12-29T19:25:32.240Z] [INFO] GET /css/variables.css 304 0ms +[2025-12-29T19:25:32.242Z] [INFO] GET /css/board.css 304 1ms +[2025-12-29T19:25:32.244Z] [INFO] GET /css/base.css 304 1ms +[2025-12-29T19:25:32.244Z] [INFO] GET /css/list.css 304 1ms +[2025-12-29T19:25:32.265Z] [INFO] GET /css/admin.css 304 13ms +[2025-12-29T19:25:32.263Z] [INFO] GET /css/proposals.css 304 18ms +[2025-12-29T19:25:32.264Z] [INFO] GET /css/notifications.css 304 18ms +[2025-12-29T19:25:32.264Z] [INFO] GET /css/components.css 304 19ms +[2025-12-29T19:25:32.265Z] [INFO] GET /css/modal.css 304 17ms +[2025-12-29T19:25:32.265Z] [INFO] GET /css/calendar.css 304 13ms +[2025-12-29T19:25:32.287Z] [INFO] GET /css/responsive.css 304 21ms +[2025-12-29T19:25:32.287Z] [INFO] GET /css/gitea.css 304 21ms +[2025-12-29T19:25:32.288Z] [INFO] GET /js/app.js 304 21ms +[2025-12-29T19:25:32.313Z] [INFO] GET /js/store.js 304 4ms +[2025-12-29T19:25:32.314Z] [INFO] GET /js/api.js 304 5ms +[2025-12-29T19:25:32.314Z] [INFO] GET /js/sync.js 304 4ms +[2025-12-29T19:25:32.314Z] [INFO] GET /js/auth.js 304 4ms +[2025-12-29T19:25:32.315Z] [INFO] GET /js/offline.js 304 4ms +[2025-12-29T19:25:32.315Z] [INFO] GET /js/board.js 304 3ms +[2025-12-29T19:25:32.348Z] [INFO] GET /js/calendar.js 304 33ms +[2025-12-29T19:25:32.348Z] [INFO] GET /js/list.js 304 32ms +[2025-12-29T19:25:32.349Z] [INFO] GET /js/shortcuts.js 304 33ms +[2025-12-29T19:25:32.349Z] [INFO] GET /js/task-modal.js 304 33ms +[2025-12-29T19:25:32.350Z] [INFO] GET /js/undo.js 304 34ms +[2025-12-29T19:25:32.364Z] [INFO] GET /js/proposals.js 304 14ms +[2025-12-29T19:25:32.365Z] [INFO] GET /js/notifications.js 304 15ms +[2025-12-29T19:25:32.349Z] [INFO] GET /js/admin.js 304 32ms +[2025-12-29T19:25:32.366Z] [INFO] GET /js/gitea.js 304 15ms +[2025-12-29T19:25:32.366Z] [INFO] GET /js/utils.js 304 15ms +[2025-12-29T19:25:32.404Z] [INFO] GET /assets/icons/task.svg 304 5ms +[2025-12-29T19:25:32.404Z] [INFO] GET /api/auth/users 401 5ms +[2025-12-29T19:25:33.885Z] [INFO] GET /sw.js 304 1ms +[2025-12-29T19:25:36.953Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:25:37.493Z] [INFO] Login erfolgreich: hendrik_gebhardt@gmx.de +[2025-12-29T19:25:37.494Z] [INFO] POST /api/auth/login 200 263ms +[2025-12-29T19:25:37.518Z] [INFO] Socket connected: HG (rSVvS2Q1wUzOL2XNAAAG) +[2025-12-29T19:25:37.509Z] [INFO] GET /api/auth/users 304 5ms +[2025-12-29T19:25:37.521Z] [INFO] Socket connected: HG (nx3DzRtMh6-KdkM2AAAH) +[2025-12-29T19:25:37.543Z] [INFO] GET /api/columns/4 304 8ms +[2025-12-29T19:25:37.540Z] [INFO] GET /api/stats/dashboard?projectId=4 304 5ms +[2025-12-29T19:25:37.526Z] [INFO] GET /api/projects 304 3ms +[2025-12-29T19:25:37.532Z] [INFO] HG joined project:[object Object] +[2025-12-29T19:25:37.548Z] [INFO] GET /api/tasks/project/4 304 12ms +[2025-12-29T19:25:37.552Z] [INFO] GET /api/labels/4 304 16ms +[2025-12-29T19:25:37.563Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 304 3ms +[2025-12-29T19:25:37.573Z] [INFO] GET /api/notifications 304 3ms +[2025-12-29T19:25:38.966Z] [INFO] GET /api/applications/4 200 3ms +[2025-12-29T19:25:39.560Z] [INFO] GET /api/git/branches/4 304 588ms +[2025-12-29T19:25:39.469Z] [INFO] GET /api/git/status/4 200 497ms +[2025-12-29T19:25:39.647Z] [INFO] GET /api/git/commits/4?limit=10 304 674ms +[2025-12-29T19:26:06.476Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:26:36.010Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:27:05.543Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:27:35.094Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:28:04.637Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:28:23.755Z] [INFO] SIGTERM empfangen, fahre herunter... +[2025-12-29T19:29:21.591Z] [ERROR] Fehler beim Abrufen der Upload-Einstellungen: +[2025-12-29T19:29:21.674Z] [INFO] Datenbank-Tabellen erstellt +[2025-12-29T19:29:21.677Z] [INFO] Datenbank initialisiert +[2025-12-29T19:29:21.680Z] [INFO] Umgebung: production +[2025-12-29T19:29:21.680Z] [INFO] Server läuft auf Port 3000 +[2025-12-29T19:29:21.681Z] [INFO] Backup-Scheduler gestartet (alle 24 Stunden) +[2025-12-29T19:29:21.681Z] [INFO] Automatische Backups aktiviert +[2025-12-29T19:29:26.334Z] [INFO] GET /api/health 200 7ms +[2025-12-29T19:29:26.809Z] [INFO] Socket connected: HG (VOKhbUt8p5y14j9pAAAB) +[2025-12-29T19:29:26.823Z] [INFO] HG joined project:[object Object] +[2025-12-29T19:29:31.009Z] [INFO] Socket connected: HG (wdUe3wl2kLUaKfuoAAAD) +[2025-12-29T19:29:31.019Z] [INFO] HG joined project:[object Object] +[2025-12-29T19:29:48.799Z] [INFO] GET / 200 5ms +[2025-12-29T19:29:48.836Z] [INFO] GET /css/variables.css 304 1ms +[2025-12-29T19:29:48.852Z] [INFO] GET /css/modal.css 304 0ms +[2025-12-29T19:29:48.842Z] [INFO] GET /css/base.css 304 1ms +[2025-12-29T19:29:48.855Z] [INFO] GET /css/proposals.css 304 2ms +[2025-12-29T19:29:48.850Z] [INFO] GET /css/admin.css 304 4ms +[2025-12-29T19:29:48.886Z] [INFO] GET /css/responsive.css 304 21ms +[2025-12-29T19:29:48.884Z] [INFO] GET /css/notifications.css 304 23ms +[2025-12-29T19:29:48.885Z] [INFO] GET /css/list.css 304 22ms +[2025-12-29T19:29:48.856Z] [INFO] GET /css/calendar.css 304 1ms +[2025-12-29T19:29:48.887Z] [INFO] GET /css/components.css 304 15ms +[2025-12-29T19:29:48.890Z] [INFO] GET /css/board.css 304 21ms +[2025-12-29T19:29:48.946Z] [INFO] GET /css/gitea.css 200 80ms +[2025-12-29T19:29:48.940Z] [INFO] GET /js/app.js 304 49ms +[2025-12-29T19:29:48.999Z] [INFO] GET /js/auth.js 304 17ms +[2025-12-29T19:29:49.001Z] [INFO] GET /js/api.js 304 25ms +[2025-12-29T19:29:49.002Z] [INFO] GET /js/sync.js 304 19ms +[2025-12-29T19:29:49.004Z] [INFO] GET /js/offline.js 304 20ms +[2025-12-29T19:29:49.007Z] [INFO] GET /js/board.js 304 22ms +[2025-12-29T19:29:49.042Z] [INFO] GET /js/calendar.js 304 32ms +[2025-12-29T19:29:49.041Z] [INFO] GET /js/task-modal.js 304 31ms +[2025-12-29T19:29:49.042Z] [INFO] GET /js/list.js 304 32ms +[2025-12-29T19:29:48.996Z] [INFO] GET /js/store.js 304 19ms +[2025-12-29T19:29:49.044Z] [INFO] GET /js/admin.js 304 33ms +[2025-12-29T19:29:49.043Z] [INFO] GET /js/undo.js 304 32ms +[2025-12-29T19:29:49.043Z] [INFO] GET /js/shortcuts.js 304 32ms +[2025-12-29T19:29:49.099Z] [INFO] GET /js/notifications.js 304 54ms +[2025-12-29T19:29:49.099Z] [INFO] GET /js/utils.js 304 52ms +[2025-12-29T19:29:49.098Z] [INFO] GET /js/proposals.js 304 53ms +[2025-12-29T19:29:49.104Z] [INFO] GET /js/gitea.js 200 59ms +[2025-12-29T19:29:49.162Z] [INFO] GET /api/auth/users 304 8ms +[2025-12-29T19:29:49.169Z] [INFO] GET /assets/icons/task.svg 200 6ms +[2025-12-29T19:29:49.180Z] [INFO] GET /api/auth/users 304 4ms +[2025-12-29T19:29:49.203Z] [INFO] Socket connected: HG (WLX8rFFdGcDBaqlzAAAF) +[2025-12-29T19:29:49.215Z] [INFO] GET /api/projects 304 10ms +[2025-12-29T19:29:49.233Z] [INFO] HG joined project:[object Object] +[2025-12-29T19:29:49.248Z] [INFO] GET /api/stats/dashboard?projectId=4 304 13ms +[2025-12-29T19:29:49.252Z] [INFO] GET /api/columns/4 304 17ms +[2025-12-29T19:29:49.258Z] [INFO] GET /api/labels/4 304 22ms +[2025-12-29T19:29:49.261Z] [INFO] GET /api/tasks/project/4 304 25ms +[2025-12-29T19:29:49.302Z] [INFO] GET /api/notifications 304 7ms +[2025-12-29T19:29:49.282Z] [INFO] GET /api/proposals?sort=date&archived=0&projectId=4 304 9ms +[2025-12-29T19:29:50.856Z] [INFO] GET /sw.js 200 7ms +[2025-12-29T19:29:50.878Z] [INFO] GET / 304 2ms +[2025-12-29T19:29:50.881Z] [INFO] GET /css/variables.css 304 4ms +[2025-12-29T19:29:50.883Z] [INFO] GET /index.html 200 6ms +[2025-12-29T19:29:50.886Z] [INFO] GET /css/components.css 304 0ms +[2025-12-29T19:29:50.885Z] [INFO] GET /css/base.css 304 0ms +[2025-12-29T19:29:50.899Z] [INFO] GET /css/modal.css 304 1ms +[2025-12-29T19:29:50.887Z] [INFO] GET /css/board.css 304 0ms +[2025-12-29T19:29:50.900Z] [INFO] GET /css/calendar.css 304 1ms +[2025-12-29T19:29:50.900Z] [INFO] GET /css/responsive.css 304 1ms +[2025-12-29T19:29:50.913Z] [INFO] GET /js/app.js 304 9ms +[2025-12-29T19:29:50.913Z] [INFO] GET /js/utils.js 304 9ms +[2025-12-29T19:29:50.914Z] [INFO] GET /js/api.js 304 9ms +[2025-12-29T19:29:50.938Z] [INFO] GET /js/sync.js 304 16ms +[2025-12-29T19:29:50.938Z] [INFO] GET /js/store.js 304 17ms +[2025-12-29T19:29:50.937Z] [INFO] GET /js/auth.js 304 16ms +[2025-12-29T19:29:50.948Z] [INFO] GET /js/board.js 304 1ms +[2025-12-29T19:29:50.949Z] [INFO] GET /js/task-modal.js 304 1ms +[2025-12-29T19:29:50.949Z] [INFO] GET /js/offline.js 304 1ms +[2025-12-29T19:29:50.991Z] [INFO] GET /js/list.js 304 29ms +[2025-12-29T19:29:50.990Z] [INFO] GET /js/calendar.js 304 28ms +[2025-12-29T19:29:50.991Z] [INFO] GET /js/shortcuts.js 304 28ms +[2025-12-29T19:29:51.036Z] [INFO] GET /js/tour.js 200 36ms +[2025-12-29T19:29:51.038Z] [INFO] GET /js/proposals.js 304 0ms +[2025-12-29T19:29:51.033Z] [INFO] GET /js/admin.js 304 32ms +[2025-12-29T19:29:51.031Z] [INFO] GET /js/undo.js 304 35ms +[2025-12-29T19:29:51.092Z] [INFO] GET /css/admin.css 304 2ms +[2025-12-29T19:29:51.081Z] [INFO] GET /js/notifications.js 304 40ms +[2025-12-29T19:29:51.080Z] [INFO] GET /js/gitea.js 304 33ms +[2025-12-29T19:29:51.082Z] [INFO] GET /css/list.css 304 34ms +[2025-12-29T19:29:51.093Z] [INFO] GET /css/proposals.css 304 2ms +[2025-12-29T19:29:51.107Z] [INFO] GET /css/gitea.css 304 7ms +[2025-12-29T19:29:51.092Z] [INFO] GET /css/notifications.css 304 1ms +[2025-12-29T19:29:55.963Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:30:20.586Z] [INFO] Backup erstellt: backup_2025-12-29T19-30-20-564Z.db +[2025-12-29T19:30:20.594Z] [INFO] Altes Backup gelöscht: backup_2025-12-22T19-54-01-136Z.db +[2025-12-29T19:30:20.601Z] [INFO] Fälligkeits-Check für Benachrichtigungen gestartet +[2025-12-29T19:30:25.515Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:30:55.018Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:31:24.576Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:31:53.968Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:32:23.509Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:32:52.954Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:33:22.389Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:33:51.920Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:34:21.306Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:34:50.200Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:35:19.652Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:35:49.096Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:36:18.493Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:36:47.938Z] [INFO] GET /api/health 200 6ms +[2025-12-29T19:37:17.376Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:37:46.806Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:38:16.246Z] [INFO] GET /api/health 200 4ms +[2025-12-29T19:38:45.667Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:39:15.056Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:39:44.500Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:40:13.943Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:40:43.402Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:41:12.846Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:41:42.287Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:42:11.718Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:42:41.075Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:43:10.518Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:43:39.949Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:44:09.375Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:44:38.799Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:45:08.198Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:45:37.621Z] [INFO] GET /api/health 200 2ms +[2025-12-29T19:46:07.021Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:46:36.422Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:47:05.826Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:47:35.221Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:48:04.574Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:48:33.961Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:49:03.354Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:49:32.743Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:50:02.132Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:50:31.491Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:51:00.904Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:51:10.140Z] [INFO] GET /api/applications/4 304 10ms +[2025-12-29T19:51:10.824Z] [INFO] GET /api/git/status/4 200 677ms +[2025-12-29T19:51:10.984Z] [INFO] GET /api/git/branches/4 304 159ms +[2025-12-29T19:51:11.087Z] [INFO] GET /api/git/commits/4?limit=10 304 102ms +[2025-12-29T19:51:23.922Z] [INFO] Socket disconnected: HG (VOKhbUt8p5y14j9pAAAB) +[2025-12-29T19:51:23.925Z] [INFO] Socket disconnected: HG (wdUe3wl2kLUaKfuoAAAD) +[2025-12-29T19:51:30.247Z] [INFO] GET /api/health 200 0ms +[2025-12-29T19:51:59.618Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:52:29.002Z] [INFO] GET /api/health 200 1ms +[2025-12-29T19:52:34.672Z] [INFO] CSRF: Token missing or not stored for user 1, generated new token +[2025-12-29T19:52:34.673Z] [INFO] POST /api/git/commit/4 403 5ms