Skip to content

Commit a39a344

Browse files
authored
Fix log error lines (#34)
* Add support for level-specific log filtering in debug logs * chore: update version to 0.0.14 and enhance changelog with debug log fixes
1 parent 45770df commit a39a344

6 files changed

Lines changed: 126 additions & 9 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## [0.0.14] - 2026-05-12
2+
3+
### Fixed
4+
5+
- Debug log level tabs now use level-specific daemon log tails so noisy recent `INFO` lines no longer hide older `ERROR`, `WARN`, or `DEBUG` entries.
6+
17
## [0.0.13] - 2026-05-11
28

39
### Added

‎bundle_versions.json‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
{
22
"versions": [
3+
{
4+
"version": "0.0.14",
5+
"min_required_cli_version": "0.0.22",
6+
"max_required_cli_version": "latest",
7+
"download_url": "https://github.com/bitloops/local-dashboard/releases/download/v0.0.14/bundle.tar.zst",
8+
"checksum_url": "https://github.com/bitloops/local-dashboard/releases/download/v0.0.14/bundle.tar.zst.sha256"
9+
},
310
{
411
"version": "0.0.13",
512
"min_required_cli_version": "0.0.21",

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "local-dashboard",
3-
"version": "0.0.13",
3+
"version": "0.0.14",
44
"license": "Apache-2.0",
55
"type": "module",
66
"scripts": {

‎src/features/debug/api.test.ts‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
import {
77
fetchRuntimeDebugSnapshot,
88
filterDebugLogLines,
9+
selectDebugLogLines,
910
subscribeRuntimeDebugEvents,
1011
validateDebugSync,
1112
} from './api'
@@ -251,4 +252,44 @@ describe('filterDebugLogLines', () => {
251252
)
252253
expect(filterDebugLogLines(lines, 'debug')).toHaveLength(0)
253254
})
255+
256+
it('uses level-specific log tails when selecting filtered logs', () => {
257+
const supportingLogs = {
258+
available: true,
259+
path: '/tmp/daemon.log',
260+
lines: [
261+
{
262+
level: 'INFO',
263+
message: 'new info',
264+
raw: 'info',
265+
timestampUnix: null,
266+
},
267+
],
268+
errorLines: [
269+
{
270+
level: 'ERROR',
271+
message: 'older failure',
272+
raw: 'error',
273+
timestampUnix: null,
274+
},
275+
],
276+
warnLines: [],
277+
infoLines: [
278+
{
279+
level: 'INFO',
280+
message: 'new info',
281+
raw: 'info',
282+
timestampUnix: null,
283+
},
284+
],
285+
debugLines: [],
286+
}
287+
288+
expect(
289+
selectDebugLogLines(supportingLogs, 'all').map((line) => line.raw),
290+
).toEqual(['info'])
291+
expect(
292+
selectDebugLogLines(supportingLogs, 'error').map((line) => line.raw),
293+
).toEqual(['error'])
294+
})
254295
})

‎src/features/debug/api.ts‎

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,10 @@ export type DebugSupportingLogs = {
203203
available: boolean
204204
path: string
205205
lines: DebugLogLine[]
206+
errorLines?: DebugLogLine[]
207+
warnLines?: DebugLogLine[]
208+
infoLines?: DebugLogLine[]
209+
debugLines?: DebugLogLine[]
206210
}
207211

208212
export type RuntimeDebugSnapshot = DebugRuntimeSnapshot & {
@@ -407,6 +411,30 @@ const RUNTIME_DEBUG_SNAPSHOT_QUERY = `
407411
raw
408412
timestampUnix
409413
}
414+
errorLines {
415+
level
416+
message
417+
raw
418+
timestampUnix
419+
}
420+
warnLines {
421+
level
422+
message
423+
raw
424+
timestampUnix
425+
}
426+
infoLines {
427+
level
428+
message
429+
raw
430+
timestampUnix
431+
}
432+
debugLines {
433+
level
434+
message
435+
raw
436+
timestampUnix
437+
}
410438
}
411439
}
412440
}
@@ -501,13 +529,18 @@ export async function fetchRuntimeDebugSnapshot(
501529
throw new Error('Runtime debug snapshot response was empty.')
502530
}
503531

532+
const supportingLogs = normalizeSupportingLogs(debugSnapshot.supportingLogs)
533+
504534
return {
505535
...runtimeSnapshot,
506536
producerSpool: debugSnapshot.producerSpool,
507537
repoState: debugSnapshot.repoState,
508538
watcher: debugSnapshot.watcher,
509-
supportingLogs: debugSnapshot.supportingLogs,
510-
issues: deriveDebugIssues(runtimeSnapshot, debugSnapshot),
539+
supportingLogs,
540+
issues: deriveDebugIssues(runtimeSnapshot, {
541+
...debugSnapshot,
542+
supportingLogs,
543+
}),
511544
}
512545
}
513546

@@ -577,6 +610,38 @@ export function filterDebugLogLines(
577610
})
578611
}
579612

613+
export function selectDebugLogLines(
614+
logs: DebugSupportingLogs,
615+
levelFilter: DebugLogLevelFilter,
616+
): DebugLogLine[] {
617+
if (levelFilter === 'all') {
618+
return logs.lines
619+
}
620+
621+
const levelSpecificLines =
622+
levelFilter === 'error'
623+
? logs.errorLines
624+
: levelFilter === 'warn'
625+
? logs.warnLines
626+
: levelFilter === 'info'
627+
? logs.infoLines
628+
: logs.debugLines
629+
630+
return levelSpecificLines ?? filterDebugLogLines(logs.lines, levelFilter)
631+
}
632+
633+
function normalizeSupportingLogs(
634+
logs: DebugSupportingLogs,
635+
): DebugSupportingLogs {
636+
return {
637+
...logs,
638+
errorLines: logs.errorLines ?? filterDebugLogLines(logs.lines, 'error'),
639+
warnLines: logs.warnLines ?? filterDebugLogLines(logs.lines, 'warn'),
640+
infoLines: logs.infoLines ?? filterDebugLogLines(logs.lines, 'info'),
641+
debugLines: logs.debugLines ?? filterDebugLogLines(logs.lines, 'debug'),
642+
}
643+
}
644+
580645
function deriveDebugIssues(
581646
runtimeSnapshot: DebugRuntimeSnapshot,
582647
debugSnapshot: RuntimeDebugSnapshotQueryData['runtimeDebugSnapshot'],
@@ -680,9 +745,7 @@ function deriveDebugIssues(
680745
})
681746
}
682747

683-
const recentErrors = supportingLogs.lines.filter((line) =>
684-
line.level?.toLowerCase().includes('error'),
685-
)
748+
const recentErrors = selectDebugLogLines(supportingLogs, 'error')
686749
if (recentErrors.length > 0) {
687750
issues.push({
688751
id: 'logs-have-errors',

‎src/features/debug/index.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { cn } from '@/lib/utils'
2424
import {
2525
fetchDebugRepositories,
2626
fetchRuntimeDebugSnapshot,
27-
filterDebugLogLines,
27+
selectDebugLogLines,
2828
subscribeRuntimeDebugEvents,
2929
validateDebugSync,
3030
type DebugTask,
@@ -874,8 +874,8 @@ function RepoPanel({ snapshot }: { snapshot: RuntimeDebugSnapshot }) {
874874

875875
function LogsPanel({ snapshot }: { snapshot: RuntimeDebugSnapshot }) {
876876
const [levelFilter, setLevelFilter] = useState<DebugLogLevelFilter>('all')
877-
const filteredLines = filterDebugLogLines(
878-
snapshot.supportingLogs.lines,
877+
const filteredLines = selectDebugLogLines(
878+
snapshot.supportingLogs,
879879
levelFilter,
880880
)
881881
const filters: DebugLogLevelFilter[] = [

0 commit comments

Comments
 (0)