detached 4d548f3

chore(deps): integrate approved upstream foundations

commit
4d548f3f69cfbdc7fc18360aeb70966c0b334bd3
author
brice · · 2026-07-14 14:11 UTC
parent
41933ea
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
13 files · +482 -125
M go.mod +3 -3
@@ -6,10 +6,10 @@ require (
66 github.com/a-h/templ v0.3.1020
77 github.com/andybalholm/brotli v1.2.2
88 github.com/bnema/purego v0.11.0-bnema.4
9- github.com/bnema/purego-cef v0.13.3
9+ github.com/bnema/purego-cef v0.13.4-0.20260714140305-f0b7414af67e
1010 github.com/bnema/purego-cef2gtk v0.8.4
11- github.com/bnema/purego-pipewire v0.1.4
12- github.com/bnema/purego-sqlite v0.1.3
11+ github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a
12+ github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c
1313 github.com/bnema/puregotk v0.7.0
1414 github.com/charmbracelet/bubbles v1.0.0
1515 github.com/charmbracelet/bubbletea v1.3.10
@@ -6,10 +6,10 @@ require (
6 github.com/a-h/templ v0.3.10206 github.com/a-h/templ v0.3.1020
7 github.com/andybalholm/brotli v1.2.27 github.com/andybalholm/brotli v1.2.2
8 github.com/bnema/purego v0.11.0-bnema.48 github.com/bnema/purego v0.11.0-bnema.4
9- github.com/bnema/purego-cef v0.13.39+ github.com/bnema/purego-cef v0.13.4-0.20260714140305-f0b7414af67e
10 github.com/bnema/purego-cef2gtk v0.8.410 github.com/bnema/purego-cef2gtk v0.8.4
11- github.com/bnema/purego-pipewire v0.1.411+ github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a
12- github.com/bnema/purego-sqlite v0.1.312+ github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c
13 github.com/bnema/puregotk v0.7.013 github.com/bnema/puregotk v0.7.0
14 github.com/charmbracelet/bubbles v1.0.014 github.com/charmbracelet/bubbles v1.0.0
15 github.com/charmbracelet/bubbletea v1.3.1015 github.com/charmbracelet/bubbletea v1.3.10
M go.sum +6 -0
@@ -14,6 +14,8 @@ github.com/bnema/purego v0.11.0-bnema.4 h1:uQjx9QtM945rD6HkwYzPGuVN7wKr5HrFKIWE3
1414 github.com/bnema/purego v0.11.0-bnema.4/go.mod h1:LHW8Sb4QO18dQaLVRU8tZCGM0SjsC+agFW/3M3nCUtg=
1515 github.com/bnema/purego-cef v0.13.3 h1:41b+cEg0TvoYSiSMsZWh/YlWdNzTYM/gCxuBFeMv4qk=
1616 github.com/bnema/purego-cef v0.13.3/go.mod h1:yy/Ogjgk+VcppcUhI0A+NcXvfnqFEDOckwErdhlJQjo=
17+github.com/bnema/purego-cef v0.13.4-0.20260714140305-f0b7414af67e h1:v/AASmQ9QElAroqTvYVOmNmfx8QhajdhqGryU4xgFWc=
18+github.com/bnema/purego-cef v0.13.4-0.20260714140305-f0b7414af67e/go.mod h1:yy/Ogjgk+VcppcUhI0A+NcXvfnqFEDOckwErdhlJQjo=
1719 github.com/bnema/purego-cef2gtk v0.8.2 h1:C1ijk9oWkqMKI1C4GrQ9j7Z3SmZPBhoM+f5zOYiSvRU=
1820 github.com/bnema/purego-cef2gtk v0.8.2/go.mod h1:w/5Bjkm+ZaZbDIDS+ysC5qTBcpb8/WOeGDva8i39ocM=
1921 github.com/bnema/purego-cef2gtk v0.8.3-0.20260714065021-7e2055015742 h1:46alRD7aMr0BUf4BGVAyUE6FPdaAfIx/sRcCL2oMiuo=
@@ -26,8 +28,12 @@ github.com/bnema/purego-cef2gtk v0.8.4 h1:WIBU2F3rrT30WfhZV9b7xFBz8ktg8uHRzbKMua
2628 github.com/bnema/purego-cef2gtk v0.8.4/go.mod h1:w/5Bjkm+ZaZbDIDS+ysC5qTBcpb8/WOeGDva8i39ocM=
2729 github.com/bnema/purego-pipewire v0.1.4 h1:ThuPiZo9BeYn1w06hg/g0INgQUIBi8n9Gq1o5VRtjxk=
2830 github.com/bnema/purego-pipewire v0.1.4/go.mod h1:dn9RGRtNteqIarb8gTv97VD/FQgur7ZJ1BE/Ub9NYSk=
31+github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a h1:P5CmPXZMEGXXO1ttytz/mMEJSYxYvJnnoWRzLcFMvb4=
32+github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a/go.mod h1:dn9RGRtNteqIarb8gTv97VD/FQgur7ZJ1BE/Ub9NYSk=
2933 github.com/bnema/purego-sqlite v0.1.3 h1:aXysq9+wuRkbFzlVe2oIiooYseFZFb6ArwbfDYYafvY=
3034 github.com/bnema/purego-sqlite v0.1.3/go.mod h1:a15W2PgD/3b9W9HytbmPXz3pBAbjwf7dhNv997fSbhI=
35+github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c h1:VAUhmfqHLHHDSdZcelWEBkUjc5Iz6gPQIOF7Db10aMs=
36+github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c/go.mod h1:a15W2PgD/3b9W9HytbmPXz3pBAbjwf7dhNv997fSbhI=
3137 github.com/bnema/puregotk v0.7.0 h1:jMaIbmHyWeexuaUrSa2Vo6rz1zGDt01gzaro09h/W6Y=
3238 github.com/bnema/puregotk v0.7.0/go.mod h1:neNov5avH++/0PJzodv9Rg2zH87GfZX7KfRcpdUA1U8=
3339 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
@@ -14,6 +14,8 @@ github.com/bnema/purego v0.11.0-bnema.4 h1:uQjx9QtM945rD6HkwYzPGuVN7wKr5HrFKIWE3
14 github.com/bnema/purego v0.11.0-bnema.4/go.mod h1:LHW8Sb4QO18dQaLVRU8tZCGM0SjsC+agFW/3M3nCUtg=14 github.com/bnema/purego v0.11.0-bnema.4/go.mod h1:LHW8Sb4QO18dQaLVRU8tZCGM0SjsC+agFW/3M3nCUtg=
15 github.com/bnema/purego-cef v0.13.3 h1:41b+cEg0TvoYSiSMsZWh/YlWdNzTYM/gCxuBFeMv4qk=15 github.com/bnema/purego-cef v0.13.3 h1:41b+cEg0TvoYSiSMsZWh/YlWdNzTYM/gCxuBFeMv4qk=
16 github.com/bnema/purego-cef v0.13.3/go.mod h1:yy/Ogjgk+VcppcUhI0A+NcXvfnqFEDOckwErdhlJQjo=16 github.com/bnema/purego-cef v0.13.3/go.mod h1:yy/Ogjgk+VcppcUhI0A+NcXvfnqFEDOckwErdhlJQjo=
17+github.com/bnema/purego-cef v0.13.4-0.20260714140305-f0b7414af67e h1:v/AASmQ9QElAroqTvYVOmNmfx8QhajdhqGryU4xgFWc=
18+github.com/bnema/purego-cef v0.13.4-0.20260714140305-f0b7414af67e/go.mod h1:yy/Ogjgk+VcppcUhI0A+NcXvfnqFEDOckwErdhlJQjo=
17 github.com/bnema/purego-cef2gtk v0.8.2 h1:C1ijk9oWkqMKI1C4GrQ9j7Z3SmZPBhoM+f5zOYiSvRU=19 github.com/bnema/purego-cef2gtk v0.8.2 h1:C1ijk9oWkqMKI1C4GrQ9j7Z3SmZPBhoM+f5zOYiSvRU=
18 github.com/bnema/purego-cef2gtk v0.8.2/go.mod h1:w/5Bjkm+ZaZbDIDS+ysC5qTBcpb8/WOeGDva8i39ocM=20 github.com/bnema/purego-cef2gtk v0.8.2/go.mod h1:w/5Bjkm+ZaZbDIDS+ysC5qTBcpb8/WOeGDva8i39ocM=
19 github.com/bnema/purego-cef2gtk v0.8.3-0.20260714065021-7e2055015742 h1:46alRD7aMr0BUf4BGVAyUE6FPdaAfIx/sRcCL2oMiuo=21 github.com/bnema/purego-cef2gtk v0.8.3-0.20260714065021-7e2055015742 h1:46alRD7aMr0BUf4BGVAyUE6FPdaAfIx/sRcCL2oMiuo=
@@ -26,8 +28,12 @@ github.com/bnema/purego-cef2gtk v0.8.4 h1:WIBU2F3rrT30WfhZV9b7xFBz8ktg8uHRzbKMua
26 github.com/bnema/purego-cef2gtk v0.8.4/go.mod h1:w/5Bjkm+ZaZbDIDS+ysC5qTBcpb8/WOeGDva8i39ocM=28 github.com/bnema/purego-cef2gtk v0.8.4/go.mod h1:w/5Bjkm+ZaZbDIDS+ysC5qTBcpb8/WOeGDva8i39ocM=
27 github.com/bnema/purego-pipewire v0.1.4 h1:ThuPiZo9BeYn1w06hg/g0INgQUIBi8n9Gq1o5VRtjxk=29 github.com/bnema/purego-pipewire v0.1.4 h1:ThuPiZo9BeYn1w06hg/g0INgQUIBi8n9Gq1o5VRtjxk=
28 github.com/bnema/purego-pipewire v0.1.4/go.mod h1:dn9RGRtNteqIarb8gTv97VD/FQgur7ZJ1BE/Ub9NYSk=30 github.com/bnema/purego-pipewire v0.1.4/go.mod h1:dn9RGRtNteqIarb8gTv97VD/FQgur7ZJ1BE/Ub9NYSk=
31+github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a h1:P5CmPXZMEGXXO1ttytz/mMEJSYxYvJnnoWRzLcFMvb4=
32+github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a/go.mod h1:dn9RGRtNteqIarb8gTv97VD/FQgur7ZJ1BE/Ub9NYSk=
29 github.com/bnema/purego-sqlite v0.1.3 h1:aXysq9+wuRkbFzlVe2oIiooYseFZFb6ArwbfDYYafvY=33 github.com/bnema/purego-sqlite v0.1.3 h1:aXysq9+wuRkbFzlVe2oIiooYseFZFb6ArwbfDYYafvY=
30 github.com/bnema/purego-sqlite v0.1.3/go.mod h1:a15W2PgD/3b9W9HytbmPXz3pBAbjwf7dhNv997fSbhI=34 github.com/bnema/purego-sqlite v0.1.3/go.mod h1:a15W2PgD/3b9W9HytbmPXz3pBAbjwf7dhNv997fSbhI=
35+github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c h1:VAUhmfqHLHHDSdZcelWEBkUjc5Iz6gPQIOF7Db10aMs=
36+github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c/go.mod h1:a15W2PgD/3b9W9HytbmPXz3pBAbjwf7dhNv997fSbhI=
31 github.com/bnema/puregotk v0.7.0 h1:jMaIbmHyWeexuaUrSa2Vo6rz1zGDt01gzaro09h/W6Y=37 github.com/bnema/puregotk v0.7.0 h1:jMaIbmHyWeexuaUrSa2Vo6rz1zGDt01gzaro09h/W6Y=
32 github.com/bnema/puregotk v0.7.0/go.mod h1:neNov5avH++/0PJzodv9Rg2zH87GfZX7KfRcpdUA1U8=38 github.com/bnema/puregotk v0.7.0/go.mod h1:neNov5avH++/0PJzodv9Rg2zH87GfZX7KfRcpdUA1U8=
33 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=39 github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
A internal/infrastructure/persistence/sqlite/history_repo_benchmark_test.go +66 -0
@@ -0,0 +1,66 @@
1+package sqlite_test
2+
3+import (
4+ "fmt"
5+ "path/filepath"
6+ "testing"
7+
8+ "github.com/bnema/dumber/internal/domain/entity"
9+ "github.com/bnema/dumber/internal/domain/repository"
10+ "github.com/bnema/dumber/internal/infrastructure/persistence/sqlite"
11+)
12+
13+// newHistoryBenchmarkRepository creates a representative local history corpus
14+// outside the measured operation. Sidebar reads use GetRecent and omnibox
15+// history suggestions use Search.
16+func newHistoryBenchmarkRepository(b *testing.B) (repository.HistoryRepository, func()) {
17+ b.Helper()
18+
19+ ctx := historyTestCtx()
20+ db, err := sqlite.NewConnection(ctx, filepath.Join(b.TempDir(), "dumber.db"))
21+ if err != nil {
22+ b.Fatal(err)
23+ }
24+
25+ repo := sqlite.NewHistoryRepository(db)
26+ for i := range 200 {
27+ entry := &entity.HistoryEntry{
28+ URL: fmt.Sprintf("https://example%d.test/dumber/history/%d", i%20, i),
29+ Title: fmt.Sprintf("Dumber history entry %d", i),
30+ }
31+ if err := repo.Save(ctx, entry); err != nil {
32+ _ = db.Close()
33+ b.Fatal(err)
34+ }
35+ }
36+
37+ return repo, func() { _ = db.Close() }
38+}
39+
40+func BenchmarkHistorySQLiteSidebarRecent(b *testing.B) {
41+ repo, closeDB := newHistoryBenchmarkRepository(b)
42+ defer closeDB()
43+ ctx := historyTestCtx()
44+
45+ b.ReportAllocs()
46+ b.ResetTimer()
47+ for range b.N {
48+ if _, err := repo.GetRecent(ctx, 50, 0); err != nil {
49+ b.Fatal(err)
50+ }
51+ }
52+}
53+
54+func BenchmarkHistorySQLiteOmniboxSearch(b *testing.B) {
55+ repo, closeDB := newHistoryBenchmarkRepository(b)
56+ defer closeDB()
57+ ctx := historyTestCtx()
58+
59+ b.ReportAllocs()
60+ b.ResetTimer()
61+ for range b.N {
62+ if _, err := repo.Search(ctx, "dumber history", 10); err != nil {
63+ b.Fatal(err)
64+ }
65+ }
66+}
@@ -0,0 +1,66 @@
1+package sqlite_test
2+
3+import (
4+ "fmt"
5+ "path/filepath"
6+ "testing"
7+
8+ "github.com/bnema/dumber/internal/domain/entity"
9+ "github.com/bnema/dumber/internal/domain/repository"
10+ "github.com/bnema/dumber/internal/infrastructure/persistence/sqlite"
11+)
12+
13+// newHistoryBenchmarkRepository creates a representative local history corpus
14+// outside the measured operation. Sidebar reads use GetRecent and omnibox
15+// history suggestions use Search.
16+func newHistoryBenchmarkRepository(b *testing.B) (repository.HistoryRepository, func()) {
17+ b.Helper()
18+
19+ ctx := historyTestCtx()
20+ db, err := sqlite.NewConnection(ctx, filepath.Join(b.TempDir(), "dumber.db"))
21+ if err != nil {
22+ b.Fatal(err)
23+ }
24+
25+ repo := sqlite.NewHistoryRepository(db)
26+ for i := range 200 {
27+ entry := &entity.HistoryEntry{
28+ URL: fmt.Sprintf("https://example%d.test/dumber/history/%d", i%20, i),
29+ Title: fmt.Sprintf("Dumber history entry %d", i),
30+ }
31+ if err := repo.Save(ctx, entry); err != nil {
32+ _ = db.Close()
33+ b.Fatal(err)
34+ }
35+ }
36+
37+ return repo, func() { _ = db.Close() }
38+}
39+
40+func BenchmarkHistorySQLiteSidebarRecent(b *testing.B) {
41+ repo, closeDB := newHistoryBenchmarkRepository(b)
42+ defer closeDB()
43+ ctx := historyTestCtx()
44+
45+ b.ReportAllocs()
46+ b.ResetTimer()
47+ for range b.N {
48+ if _, err := repo.GetRecent(ctx, 50, 0); err != nil {
49+ b.Fatal(err)
50+ }
51+ }
52+}
53+
54+func BenchmarkHistorySQLiteOmniboxSearch(b *testing.B) {
55+ repo, closeDB := newHistoryBenchmarkRepository(b)
56+ defer closeDB()
57+ ctx := historyTestCtx()
58+
59+ b.ReportAllocs()
60+ b.ResetTimer()
61+ for range b.N {
62+ if _, err := repo.Search(ctx, "dumber history", 10); err != nil {
63+ b.Fatal(err)
64+ }
65+ }
66+}
M vendor/github.com/bnema/purego-cef/cef/bridge.go +8 -13 generated file: collapsed
M vendor/github.com/bnema/purego-pipewire/internal/core/player.go +5 -0 generated file: collapsed
M vendor/github.com/bnema/purego-pipewire/internal/core/player_rt.go +10 -6 generated file: collapsed
M vendor/github.com/bnema/purego-pipewire/internal/core/pwbuffer.go +66 -32 generated file: collapsed
M vendor/github.com/bnema/purego-sqlite/driver/driver.go +268 -63 generated file: collapsed
M vendor/github.com/bnema/purego-sqlite/internal/core/db.go +8 -0 generated file: collapsed
M vendor/github.com/bnema/purego-sqlite/internal/core/rows.go +13 -0 generated file: collapsed
M vendor/github.com/bnema/purego-sqlite/internal/loader/loader.go +23 -5 generated file: collapsed
M vendor/github.com/bnema/purego-sqlite/internal/ports/in/ports_gen.go +3 -0 generated file: collapsed
M vendor/modules.txt +3 -3 generated file: collapsed

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close