Skip to content

Commit 748ad72

Browse files
committed
Add preliminary livechess-uci dgt eboard uci adaptor
1 parent 4495d37 commit 748ad72

File tree

6 files changed

+236
-26
lines changed

6 files changed

+236
-26
lines changed

VERSION

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@
22
//
33
// Morlock chess engine
44
//
5-
// Copyright (C) 2000-2021
5+
// Copyright (C) 2000-2023
66
// Henning Korsholm Rohde <herohde@seekerror.org>
77
//
88

9+
### 16. dec 2023; Version 0.91 ###
10+
- Added livechess-uci. An adaptor to use a DGT Eboard as an UCI engine. Work in progress.
11+
12+
TODO:
13+
- Revamp Engine as interface with custom UCI options. Multiple feeds to same game suspect.
14+
915
### 25. nov 2023; Version 0.90 ###
1016
- Added BERNSTEIN. Running as "bernstein-2ply" and "bernstein-4ply" on lichess.org. Odd ply only due to no QS.
1117
- Noticed that ratings are depressed after allowing bot opponents.

cmd/livechess-uci/main.go

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
// livechess-uci is an adaptor for using a DGT EBoard via LiveChess as a UCI engine. The adaptor
2+
// allows use of DGT EBoards in chess programs, such as CuteChess, by pretending to be an engine.
3+
package main
4+
5+
import (
6+
"context"
7+
"flag"
8+
"github.com/herohde/livechess-go/pkg/livechess"
9+
"github.com/herohde/morlock/pkg/board"
10+
"github.com/herohde/morlock/pkg/board/fen"
11+
"github.com/herohde/morlock/pkg/engine"
12+
"github.com/herohde/morlock/pkg/engine/uci"
13+
"github.com/herohde/morlock/pkg/eval"
14+
"github.com/herohde/morlock/pkg/search"
15+
"github.com/seekerror/logw"
16+
"github.com/seekerror/stdlib/pkg/util/iox"
17+
"strings"
18+
"sync/atomic"
19+
)
20+
21+
// TODO(herohde) 12/16/2023: change engine to interface. Protocol seems brittle with setup otherwise.
22+
23+
var (
24+
serial = flag.String("serial", "auto", "Board selection by serial number (default: auto)")
25+
flip = flag.Bool("flip", false, "Flip board")
26+
)
27+
28+
func main() {
29+
flag.Parse()
30+
ctx := context.Background()
31+
32+
id := livechess.EBoardSerial(*serial)
33+
if id == "auto" {
34+
auto, err := livechess.AutoDetect(ctx, livechess.DefaultClient)
35+
if err != nil {
36+
logw.Exitf(ctx, "Watch failed to autodetect board: %v", err)
37+
}
38+
id = auto
39+
}
40+
41+
client, events, err := livechess.NewFeed(ctx, id)
42+
if err != nil {
43+
logw.Exitf(ctx, "Feed for %v failed: %v", id, err)
44+
}
45+
if *flip {
46+
if err := client.Flip(ctx, true); err != nil {
47+
logw.Exitf(ctx, "Flip board %v failed: %v", id, err)
48+
}
49+
}
50+
if err := client.Setup(ctx, fen.Initial); err != nil {
51+
logw.Exitf(ctx, "Setup board %v failed: %v", id, err)
52+
}
53+
54+
s := newAdaptor(ctx, client, events)
55+
56+
e := engine.New(ctx, "livechess-uci", "herohde", s,
57+
engine.WithOptions(engine.Options{Depth: 1}))
58+
59+
in := engine.ReadStdinLines(ctx)
60+
switch <-in {
61+
case uci.ProtocolName:
62+
driver, out := uci.NewDriver(ctx, e, in)
63+
go engine.WriteStdoutLines(ctx, out)
64+
65+
<-driver.Closed()
66+
67+
default:
68+
flag.Usage()
69+
logw.Exitf(ctx, "Protocol not supported")
70+
}
71+
}
72+
73+
type adaptor struct {
74+
client livechess.FeedClient
75+
76+
last atomic.Pointer[livechess.EBoardEventResponse] // last with start and move list
77+
pulse *iox.Pulse
78+
}
79+
80+
func newAdaptor(ctx context.Context, client livechess.FeedClient, events <-chan livechess.EBoardEventResponse) *adaptor {
81+
ret := &adaptor{
82+
client: client,
83+
pulse: iox.NewPulse(),
84+
}
85+
go ret.process(ctx, events)
86+
return ret
87+
}
88+
89+
func (a *adaptor) Search(ctx context.Context, sctx *search.Context, b *board.Board, depth int) (uint64, eval.Score, []board.Move, error) {
90+
// start := fen.Encode(b.Position(), b.Turn(), b.NoProgress(), b.FullMoves())
91+
92+
// (1) Generate possible next legal options
93+
94+
candidates := map[string]board.Move{}
95+
for _, m := range b.Position().LegalMoves(b.Turn()) {
96+
b.PushMove(m)
97+
next := strings.Split(fen.Encode(b.Position(), b.Turn(), 0, 0), " ")[0]
98+
candidates[next] = m
99+
b.PopMove()
100+
}
101+
102+
if len(candidates) == 0 {
103+
if result := b.AdjudicateNoLegalMoves(); result.Reason == board.Checkmate {
104+
return 1, eval.NegInfScore, nil, nil
105+
}
106+
return 1, eval.ZeroScore, nil, nil
107+
}
108+
109+
// (2) Wait for a board match one of them
110+
111+
for {
112+
if last := a.last.Load(); last != nil {
113+
if m, ok := candidates[last.Board]; ok {
114+
return 1, eval.ZeroScore, []board.Move{m}, nil
115+
}
116+
}
117+
118+
select {
119+
case <-a.pulse.Chan():
120+
// ok: try again
121+
case <-ctx.Done():
122+
return 0, eval.InvalidScore, nil, search.ErrHalted
123+
}
124+
}
125+
}
126+
127+
func (a *adaptor) process(ctx context.Context, events <-chan livechess.EBoardEventResponse) {
128+
for {
129+
select {
130+
case event, ok := <-events:
131+
if !ok {
132+
return
133+
}
134+
135+
if len(event.San) > 0 {
136+
a.last.Store(&event)
137+
a.pulse.Emit()
138+
}
139+
140+
case <-ctx.Done():
141+
return
142+
}
143+
}
144+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
[Event "?"]
2+
[Site "?"]
3+
[Date "2023.12.16"]
4+
[Round "?"]
5+
[White "livechess"]
6+
[Black "BERNSTEIN"]
7+
[Result "1-0"]
8+
[ECO "C42"]
9+
[GameDuration "00:02:31"]
10+
[GameEndTime "2023-12-16T22:33:56.892 PST"]
11+
[GameStartTime "2023-12-16T22:31:25.571 PST"]
12+
[Opening "Petrov Three knights game"]
13+
[PlyCount "29"]
14+
[TimeControl "40/1200+2"]
15+
16+
1. e4 {0.00/1 4.1s} e5 {-100.95/4 0.015s} 2. Nf3 {0.00/1 6.4s}
17+
Nf6 {-101.31/4 0.014s} 3. Nc3 {0.00/1 11s} Bd6 {-103.07/4 0.008s}
18+
4. Bc4 {0.00/1 7.4s} O-O {-102.15/4 0.001s} 5. O-O {0.00/1 8.0s}
19+
Nc6 {-102.40/4 0.018s} 6. d3 {0.00/1 10s} h6 {-102.52/4 0.020s}
20+
7. Be3 {0.00/1 23s} Ng4 {-102.33/4 0.021s} 8. Bd2 {0.00/1 9.6s}
21+
g5 {-102.52/4 0.021s} 9. h3 {0.00/1 9.3s} Nf6 {-103.12/4 0.009s}
22+
10. Nxg5 {0.00/1 18s} hxg5 {-109.10/4 0.009s} 11. Bxg5 {0.00/1 5.1s}
23+
Nb4 {-108.55/4 0.025s} 12. Qf3 {0.00/1 16s} Nxc2 {-109.37/4 0.013s}
24+
13. Bxf6 {0.00/1 8.6s} Qe8 {-111.90/4 0.009s} 14. Qg4+ {0.00/1 11s}
25+
Kh7 {-111.87/4 0.003s} 15. Qg7# {0.00/1 3.5s, White mates} 1-0
26+

go.mod

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
module github.com/herohde/morlock
22

3-
go 1.20
3+
go 1.21
44

55
require (
6+
github.com/herohde/livechess-go v0.0.0-20231217011205-bfb723a18ce9
67
github.com/seekerror/build v1.0.2
78
github.com/seekerror/logw v0.8.1
8-
github.com/seekerror/stdlib v0.0.0-20230911012819-a64b9b90a3d3
9-
github.com/stretchr/testify v1.7.2
9+
github.com/seekerror/stdlib v0.0.0-20231216224128-fab4c1e73ebe
10+
github.com/stretchr/testify v1.8.4
1011
)
1112

1213
require (
1314
github.com/davecgh/go-spew v1.1.1 // indirect
14-
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect
15-
github.com/golang/protobuf v1.3.1 // indirect
15+
github.com/golang/glog v1.2.0 // indirect
16+
github.com/golang/protobuf v1.5.2 // indirect
17+
github.com/gorilla/websocket v1.5.1 // indirect
1618
github.com/pmezard/go-difflib v1.0.0 // indirect
17-
golang.org/x/exp v0.0.0-20220602145555-4a0574d9293f // indirect
18-
golang.org/x/net v0.0.0-20190603091049-60506f45cf65 // indirect
19-
google.golang.org/appengine v1.6.7 // indirect
19+
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect
20+
golang.org/x/net v0.17.0 // indirect
21+
google.golang.org/appengine v1.6.8 // indirect
22+
google.golang.org/protobuf v1.31.0 // indirect
2023
gopkg.in/yaml.v3 v3.0.1 // indirect
2124
)

go.sum

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,63 @@
1-
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
21
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
32
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4-
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
53
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
6-
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
7-
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
4+
github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
5+
github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
6+
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
7+
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
8+
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
9+
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
10+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
11+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
12+
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
13+
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
14+
github.com/herohde/livechess-go v0.0.0-20231217011205-bfb723a18ce9 h1:CfC2f08FtyYvna5HDd04SDmalahO2ANKud1DxasRmEA=
15+
github.com/herohde/livechess-go v0.0.0-20231217011205-bfb723a18ce9/go.mod h1:8OybX1c3+FnBL6ROYEMx4ZomvTmbnylK9xULN1Qb15I=
816
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
917
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
1018
github.com/seekerror/build v1.0.2 h1:jEpZWWX/7UWrX2E/CfTf4GtdYoV6sheLFzPJTVTXxrU=
1119
github.com/seekerror/build v1.0.2/go.mod h1:dSA1UoR4T04qvwj4nYjqFR61KDNFamCavTHUGx+GuR0=
1220
github.com/seekerror/logw v0.8.1 h1:js2+Y+ibjlc0li6nvvSz/aSvS3swW8/1djwR0GNbLoA=
1321
github.com/seekerror/logw v0.8.1/go.mod h1:tQGCDVC4y4haGATyYfuP6pF561bva6gPbEGP/HxY9XM=
14-
github.com/seekerror/stdlib v0.0.0-20230911012819-a64b9b90a3d3 h1:rBmXyBg40TO9jHtEzQUT+46rIPNSy8xsIJi2GRJ7AY4=
15-
github.com/seekerror/stdlib v0.0.0-20230911012819-a64b9b90a3d3/go.mod h1:EcYBIdmJ5iWjngSXAWATwMRDl5L6Hmbz6HPQIPUxUcw=
16-
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
17-
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
18-
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
22+
github.com/seekerror/stdlib v0.0.0-20231216224128-fab4c1e73ebe h1:3ImTCNkYq1nrssBuxGpxtcO1kxOvsPr8u/gY5Ug4fbg=
23+
github.com/seekerror/stdlib v0.0.0-20231216224128-fab4c1e73ebe/go.mod h1:EcYBIdmJ5iWjngSXAWATwMRDl5L6Hmbz6HPQIPUxUcw=
24+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
25+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
26+
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
1927
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
20-
golang.org/x/exp v0.0.0-20220602145555-4a0574d9293f h1:KK6mxegmt5hGJRcAnEDjSNLxIRhZxDcgwMbcO/lMCRM=
21-
golang.org/x/exp v0.0.0-20220602145555-4a0574d9293f/go.mod h1:yh0Ynu2b5ZUe3MQfp2nM0ecK7wsgouWTDN0FNeJuIys=
22-
golang.org/x/net v0.0.0-20190603091049-60506f45cf65 h1:+rhAzEzT3f4JtomfC371qB+0Ola2caSKcY69NUBZrRQ=
23-
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
28+
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
29+
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4=
30+
golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
31+
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
32+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
33+
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
34+
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
35+
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
36+
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
37+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
38+
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
2439
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
40+
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
41+
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
42+
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
43+
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
44+
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
45+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
2546
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
26-
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
47+
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
48+
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
49+
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
2750
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
28-
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
29-
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
51+
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
52+
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
53+
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
54+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
55+
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
56+
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
57+
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
58+
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
59+
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
60+
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
3061
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
3162
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
3263
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

pkg/engine/engine.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"sync"
1515
)
1616

17-
var version = build.NewVersion(0, 90, 1)
17+
var version = build.NewVersion(0, 91, 0)
1818

1919
// Options are search creation options.
2020
type Options struct {

0 commit comments

Comments
 (0)