ScuttleBot

fix: final lint pass — gofmt, ineffassign, unusedwrite in tests, nil context

lmata 2026-04-01 18:37 trunk
Commit 0e244d2ccbf060c238794a680e40bc9bbafde7a816cd9b2a261b8b7945977f5a
--- .golangci.yml
+++ .golangci.yml
@@ -19,5 +19,6 @@
1919
issues:
2020
exclude-rules:
2121
- path: _test\.go
2222
linters:
2323
- errcheck
24
+ - unusedwrite
2425
--- .golangci.yml
+++ .golangci.yml
@@ -19,5 +19,6 @@
19 issues:
20 exclude-rules:
21 - path: _test\.go
22 linters:
23 - errcheck
 
24
--- .golangci.yml
+++ .golangci.yml
@@ -19,5 +19,6 @@
19 issues:
20 exclude-rules:
21 - path: _test\.go
22 linters:
23 - errcheck
24 - unusedwrite
25
--- cmd/scuttlectl/cmd_setup.go
+++ cmd/scuttlectl/cmd_setup.go
@@ -57,13 +57,13 @@
5757
5858
// ── network ──────────────────────────────────────────────────────────────
5959
printSection("IRC / network")
6060
6161
networkName := s.ask(" IRC network name", "scuttlebot")
62
- serverName := s.ask(" IRC server hostname", "irc.scuttlebot.local")
63
- ircAddr := s.ask(" IRC listen address", "127.0.0.1:6667")
64
- apiAddr := s.ask(" HTTP API listen address", ":8080")
62
+ serverName := s.ask(" IRC server hostname", "irc.scuttlebot.local")
63
+ ircAddr := s.ask(" IRC listen address", "127.0.0.1:6667")
64
+ apiAddr := s.ask(" HTTP API listen address", ":8080")
6565
6666
cfg["ergo"] = map[string]any{
6767
"network_name": networkName,
6868
"server_name": serverName,
6969
"irc_addr": ircAddr,
@@ -73,11 +73,11 @@
7373
// ── TLS ──────────────────────────────────────────────────────────────────
7474
printSection("TLS / HTTPS (skip for local/dev)")
7575
7676
if s.confirm(" Enable Let's Encrypt TLS?", false) {
7777
domain := s.ask(" Domain name", "")
78
- email := s.ask(" Email for cert expiry notices", "")
78
+ email := s.ask(" Email for cert expiry notices", "")
7979
cfg["tls"] = map[string]any{
8080
"domain": domain,
8181
"email": email,
8282
"allow_insecure": true,
8383
}
@@ -111,15 +111,17 @@
111111
112112
// ── logging ───────────────────────────────────────────────────────────────
113113
printSection("message logging (scribe bot)")
114114
115115
if s.confirm(" Enable scribe message logging?", true) {
116
- logDir := s.ask(" Log directory", "./data/logs/scribe")
117
- format := s.choice(" Format", []string{"jsonl", "csv", "text"}, "jsonl")
116
+ logDir := s.ask(" Log directory", "./data/logs/scribe")
117
+ format := s.choice(" Format", []string{"jsonl", "csv", "text"}, "jsonl")
118118
rotatef := s.choice(" Rotation", []string{"none", "daily", "weekly", "monthly", "size"}, "daily")
119119
// Stored as scribe bot policy — just print a note, actual policy is in policies.json
120
- _ = logDir; _ = format; _ = rotatef
120
+ _ = logDir
121
+ _ = format
122
+ _ = rotatef
121123
fmt.Printf("\n Note: scribe is enabled via the web UI (settings → system behaviors).\n")
122124
fmt.Printf(" Set dir=%s format=%s rotation=%s in oracle's behavior config.\n\n", logDir, format, rotatef)
123125
}
124126
125127
return cfg
@@ -141,32 +143,32 @@
141143
142144
switch backendType {
143145
case "bedrock":
144146
b["region"] = s.ask(" AWS region", "us-east-1")
145147
if s.confirm(" Use static AWS credentials? (No = IAM role auto-detected)", false) {
146
- b["aws_key_id"] = s.ask(" AWS access key ID", "")
148
+ b["aws_key_id"] = s.ask(" AWS access key ID", "")
147149
b["aws_secret_key"] = s.ask(" AWS secret access key", "")
148150
} else {
149151
fmt.Println(" → credentials will be resolved from env vars or instance/task role")
150152
}
151153
b["model"] = s.ask(" Default model", "anthropic.claude-3-5-sonnet-20241022-v2:0")
152154
153155
case "ollama":
154156
b["base_url"] = s.ask(" Ollama base URL", "http://localhost:11434")
155
- b["model"] = s.ask(" Default model", "llama3.2")
157
+ b["model"] = s.ask(" Default model", "llama3.2")
156158
157159
case "anthropic":
158160
b["api_key"] = s.secret(" API key")
159
- b["model"] = s.ask(" Default model", "claude-3-5-sonnet-20241022")
161
+ b["model"] = s.ask(" Default model", "claude-3-5-sonnet-20241022")
160162
161163
case "gemini":
162164
b["api_key"] = s.secret(" API key")
163
- b["model"] = s.ask(" Default model", "gemini-1.5-flash")
165
+ b["model"] = s.ask(" Default model", "gemini-1.5-flash")
164166
165167
default:
166168
b["api_key"] = s.secret(" API key")
167
- b["model"] = s.ask(" Default model", defaultModelFor(backendType))
169
+ b["model"] = s.ask(" Default model", defaultModelFor(backendType))
168170
}
169171
170172
if s.confirm(" Add model allow/block regex filters?", false) {
171173
allow := s.ask(" Allow patterns (comma-separated regex)", "")
172174
block := s.ask(" Block patterns (comma-separated regex)", "")
@@ -185,23 +187,23 @@
185187
return b
186188
}
187189
188190
func defaultModelFor(backend string) string {
189191
defaults := map[string]string{
190
- "openai": "gpt-4o-mini",
191
- "openrouter": "openai/gpt-4o-mini",
192
- "groq": "llama-3.3-70b-versatile",
193
- "together": "meta-llama/Llama-3.3-70B-Instruct-Turbo",
194
- "fireworks": "accounts/fireworks/models/llama-v3p3-70b-instruct",
195
- "mistral": "mistral-large-latest",
196
- "deepseek": "deepseek-chat",
197
- "xai": "grok-2",
198
- "cerebras": "llama3.3-70b",
199
- "litellm": "",
200
- "lmstudio": "",
201
- "vllm": "",
202
- "localai": "",
192
+ "openai": "gpt-4o-mini",
193
+ "openrouter": "openai/gpt-4o-mini",
194
+ "groq": "llama-3.3-70b-versatile",
195
+ "together": "meta-llama/Llama-3.3-70B-Instruct-Turbo",
196
+ "fireworks": "accounts/fireworks/models/llama-v3p3-70b-instruct",
197
+ "mistral": "mistral-large-latest",
198
+ "deepseek": "deepseek-chat",
199
+ "xai": "grok-2",
200
+ "cerebras": "llama3.3-70b",
201
+ "litellm": "",
202
+ "lmstudio": "",
203
+ "vllm": "",
204
+ "localai": "",
203205
}
204206
if m, ok := defaults[backend]; ok {
205207
return m
206208
}
207209
return ""
208210
--- cmd/scuttlectl/cmd_setup.go
+++ cmd/scuttlectl/cmd_setup.go
@@ -57,13 +57,13 @@
57
58 // ── network ──────────────────────────────────────────────────────────────
59 printSection("IRC / network")
60
61 networkName := s.ask(" IRC network name", "scuttlebot")
62 serverName := s.ask(" IRC server hostname", "irc.scuttlebot.local")
63 ircAddr := s.ask(" IRC listen address", "127.0.0.1:6667")
64 apiAddr := s.ask(" HTTP API listen address", ":8080")
65
66 cfg["ergo"] = map[string]any{
67 "network_name": networkName,
68 "server_name": serverName,
69 "irc_addr": ircAddr,
@@ -73,11 +73,11 @@
73 // ── TLS ──────────────────────────────────────────────────────────────────
74 printSection("TLS / HTTPS (skip for local/dev)")
75
76 if s.confirm(" Enable Let's Encrypt TLS?", false) {
77 domain := s.ask(" Domain name", "")
78 email := s.ask(" Email for cert expiry notices", "")
79 cfg["tls"] = map[string]any{
80 "domain": domain,
81 "email": email,
82 "allow_insecure": true,
83 }
@@ -111,15 +111,17 @@
111
112 // ── logging ───────────────────────────────────────────────────────────────
113 printSection("message logging (scribe bot)")
114
115 if s.confirm(" Enable scribe message logging?", true) {
116 logDir := s.ask(" Log directory", "./data/logs/scribe")
117 format := s.choice(" Format", []string{"jsonl", "csv", "text"}, "jsonl")
118 rotatef := s.choice(" Rotation", []string{"none", "daily", "weekly", "monthly", "size"}, "daily")
119 // Stored as scribe bot policy — just print a note, actual policy is in policies.json
120 _ = logDir; _ = format; _ = rotatef
 
 
121 fmt.Printf("\n Note: scribe is enabled via the web UI (settings → system behaviors).\n")
122 fmt.Printf(" Set dir=%s format=%s rotation=%s in oracle's behavior config.\n\n", logDir, format, rotatef)
123 }
124
125 return cfg
@@ -141,32 +143,32 @@
141
142 switch backendType {
143 case "bedrock":
144 b["region"] = s.ask(" AWS region", "us-east-1")
145 if s.confirm(" Use static AWS credentials? (No = IAM role auto-detected)", false) {
146 b["aws_key_id"] = s.ask(" AWS access key ID", "")
147 b["aws_secret_key"] = s.ask(" AWS secret access key", "")
148 } else {
149 fmt.Println(" → credentials will be resolved from env vars or instance/task role")
150 }
151 b["model"] = s.ask(" Default model", "anthropic.claude-3-5-sonnet-20241022-v2:0")
152
153 case "ollama":
154 b["base_url"] = s.ask(" Ollama base URL", "http://localhost:11434")
155 b["model"] = s.ask(" Default model", "llama3.2")
156
157 case "anthropic":
158 b["api_key"] = s.secret(" API key")
159 b["model"] = s.ask(" Default model", "claude-3-5-sonnet-20241022")
160
161 case "gemini":
162 b["api_key"] = s.secret(" API key")
163 b["model"] = s.ask(" Default model", "gemini-1.5-flash")
164
165 default:
166 b["api_key"] = s.secret(" API key")
167 b["model"] = s.ask(" Default model", defaultModelFor(backendType))
168 }
169
170 if s.confirm(" Add model allow/block regex filters?", false) {
171 allow := s.ask(" Allow patterns (comma-separated regex)", "")
172 block := s.ask(" Block patterns (comma-separated regex)", "")
@@ -185,23 +187,23 @@
185 return b
186 }
187
188 func defaultModelFor(backend string) string {
189 defaults := map[string]string{
190 "openai": "gpt-4o-mini",
191 "openrouter": "openai/gpt-4o-mini",
192 "groq": "llama-3.3-70b-versatile",
193 "together": "meta-llama/Llama-3.3-70B-Instruct-Turbo",
194 "fireworks": "accounts/fireworks/models/llama-v3p3-70b-instruct",
195 "mistral": "mistral-large-latest",
196 "deepseek": "deepseek-chat",
197 "xai": "grok-2",
198 "cerebras": "llama3.3-70b",
199 "litellm": "",
200 "lmstudio": "",
201 "vllm": "",
202 "localai": "",
203 }
204 if m, ok := defaults[backend]; ok {
205 return m
206 }
207 return ""
208
--- cmd/scuttlectl/cmd_setup.go
+++ cmd/scuttlectl/cmd_setup.go
@@ -57,13 +57,13 @@
57
58 // ── network ──────────────────────────────────────────────────────────────
59 printSection("IRC / network")
60
61 networkName := s.ask(" IRC network name", "scuttlebot")
62 serverName := s.ask(" IRC server hostname", "irc.scuttlebot.local")
63 ircAddr := s.ask(" IRC listen address", "127.0.0.1:6667")
64 apiAddr := s.ask(" HTTP API listen address", ":8080")
65
66 cfg["ergo"] = map[string]any{
67 "network_name": networkName,
68 "server_name": serverName,
69 "irc_addr": ircAddr,
@@ -73,11 +73,11 @@
73 // ── TLS ──────────────────────────────────────────────────────────────────
74 printSection("TLS / HTTPS (skip for local/dev)")
75
76 if s.confirm(" Enable Let's Encrypt TLS?", false) {
77 domain := s.ask(" Domain name", "")
78 email := s.ask(" Email for cert expiry notices", "")
79 cfg["tls"] = map[string]any{
80 "domain": domain,
81 "email": email,
82 "allow_insecure": true,
83 }
@@ -111,15 +111,17 @@
111
112 // ── logging ───────────────────────────────────────────────────────────────
113 printSection("message logging (scribe bot)")
114
115 if s.confirm(" Enable scribe message logging?", true) {
116 logDir := s.ask(" Log directory", "./data/logs/scribe")
117 format := s.choice(" Format", []string{"jsonl", "csv", "text"}, "jsonl")
118 rotatef := s.choice(" Rotation", []string{"none", "daily", "weekly", "monthly", "size"}, "daily")
119 // Stored as scribe bot policy — just print a note, actual policy is in policies.json
120 _ = logDir
121 _ = format
122 _ = rotatef
123 fmt.Printf("\n Note: scribe is enabled via the web UI (settings → system behaviors).\n")
124 fmt.Printf(" Set dir=%s format=%s rotation=%s in oracle's behavior config.\n\n", logDir, format, rotatef)
125 }
126
127 return cfg
@@ -141,32 +143,32 @@
143
144 switch backendType {
145 case "bedrock":
146 b["region"] = s.ask(" AWS region", "us-east-1")
147 if s.confirm(" Use static AWS credentials? (No = IAM role auto-detected)", false) {
148 b["aws_key_id"] = s.ask(" AWS access key ID", "")
149 b["aws_secret_key"] = s.ask(" AWS secret access key", "")
150 } else {
151 fmt.Println(" → credentials will be resolved from env vars or instance/task role")
152 }
153 b["model"] = s.ask(" Default model", "anthropic.claude-3-5-sonnet-20241022-v2:0")
154
155 case "ollama":
156 b["base_url"] = s.ask(" Ollama base URL", "http://localhost:11434")
157 b["model"] = s.ask(" Default model", "llama3.2")
158
159 case "anthropic":
160 b["api_key"] = s.secret(" API key")
161 b["model"] = s.ask(" Default model", "claude-3-5-sonnet-20241022")
162
163 case "gemini":
164 b["api_key"] = s.secret(" API key")
165 b["model"] = s.ask(" Default model", "gemini-1.5-flash")
166
167 default:
168 b["api_key"] = s.secret(" API key")
169 b["model"] = s.ask(" Default model", defaultModelFor(backendType))
170 }
171
172 if s.confirm(" Add model allow/block regex filters?", false) {
173 allow := s.ask(" Allow patterns (comma-separated regex)", "")
174 block := s.ask(" Block patterns (comma-separated regex)", "")
@@ -185,23 +187,23 @@
187 return b
188 }
189
190 func defaultModelFor(backend string) string {
191 defaults := map[string]string{
192 "openai": "gpt-4o-mini",
193 "openrouter": "openai/gpt-4o-mini",
194 "groq": "llama-3.3-70b-versatile",
195 "together": "meta-llama/Llama-3.3-70B-Instruct-Turbo",
196 "fireworks": "accounts/fireworks/models/llama-v3p3-70b-instruct",
197 "mistral": "mistral-large-latest",
198 "deepseek": "deepseek-chat",
199 "xai": "grok-2",
200 "cerebras": "llama3.3-70b",
201 "litellm": "",
202 "lmstudio": "",
203 "vllm": "",
204 "localai": "",
205 }
206 if m, ok := defaults[backend]; ok {
207 return m
208 }
209 return ""
210
--- cmd/scuttlectl/main.go
+++ cmd/scuttlectl/main.go
@@ -239,19 +239,18 @@
239239
tw.Flush()
240240
}
241241
242242
func cmdAgentRegister(api *apiclient.Client, args []string, asJSON bool) {
243243
nick := args[0]
244
- agentType := "worker"
245244
var channels []string
246245
247246
// Parse optional --type and --channels from remaining args.
248247
fs := flag.NewFlagSet("agent register", flag.ExitOnError)
249248
typeFlag := fs.String("type", "worker", "agent type (worker, orchestrator, observer)")
250249
channelsFlag := fs.String("channels", "", "comma-separated list of channels to join")
251250
_ = fs.Parse(args[1:])
252
- agentType = *typeFlag
251
+ agentType := *typeFlag
253252
if *channelsFlag != "" {
254253
for _, ch := range strings.Split(*channelsFlag, ",") {
255254
if ch = strings.TrimSpace(ch); ch != "" {
256255
channels = append(channels, ch)
257256
}
258257
--- cmd/scuttlectl/main.go
+++ cmd/scuttlectl/main.go
@@ -239,19 +239,18 @@
239 tw.Flush()
240 }
241
242 func cmdAgentRegister(api *apiclient.Client, args []string, asJSON bool) {
243 nick := args[0]
244 agentType := "worker"
245 var channels []string
246
247 // Parse optional --type and --channels from remaining args.
248 fs := flag.NewFlagSet("agent register", flag.ExitOnError)
249 typeFlag := fs.String("type", "worker", "agent type (worker, orchestrator, observer)")
250 channelsFlag := fs.String("channels", "", "comma-separated list of channels to join")
251 _ = fs.Parse(args[1:])
252 agentType = *typeFlag
253 if *channelsFlag != "" {
254 for _, ch := range strings.Split(*channelsFlag, ",") {
255 if ch = strings.TrimSpace(ch); ch != "" {
256 channels = append(channels, ch)
257 }
258
--- cmd/scuttlectl/main.go
+++ cmd/scuttlectl/main.go
@@ -239,19 +239,18 @@
239 tw.Flush()
240 }
241
242 func cmdAgentRegister(api *apiclient.Client, args []string, asJSON bool) {
243 nick := args[0]
 
244 var channels []string
245
246 // Parse optional --type and --channels from remaining args.
247 fs := flag.NewFlagSet("agent register", flag.ExitOnError)
248 typeFlag := fs.String("type", "worker", "agent type (worker, orchestrator, observer)")
249 channelsFlag := fs.String("channels", "", "comma-separated list of channels to join")
250 _ = fs.Parse(args[1:])
251 agentType := *typeFlag
252 if *channelsFlag != "" {
253 for _, ch := range strings.Split(*channelsFlag, ",") {
254 if ch = strings.TrimSpace(ch); ch != "" {
255 channels = append(channels, ch)
256 }
257
--- internal/bots/oracle/oracle_test.go
+++ internal/bots/oracle/oracle_test.go
@@ -1,8 +1,9 @@
11
package oracle_test
22
33
import (
4
+ "context"
45
"errors"
56
"testing"
67
78
"github.com/conflicthq/scuttlebot/internal/bots/oracle"
89
)
@@ -104,11 +105,11 @@
104105
105106
// --- StubProvider ---
106107
107108
func TestStubProviderReturnsResponse(t *testing.T) {
108109
p := &oracle.StubProvider{Response: "the fleet is idle"}
109
- summary, err := p.Summarize(nil, "prompt")
110
+ summary, err := p.Summarize(context.TODO(), "prompt")
110111
if err != nil {
111112
t.Fatalf("unexpected error: %v", err)
112113
}
113114
if summary != "the fleet is idle" {
114115
t.Errorf("got %q", summary)
@@ -115,11 +116,11 @@
115116
}
116117
}
117118
118119
func TestStubProviderReturnsError(t *testing.T) {
119120
p := &oracle.StubProvider{Err: errors.New("llm unavailable")}
120
- _, err := p.Summarize(nil, "prompt")
121
+ _, err := p.Summarize(context.TODO(), "prompt")
121122
if err == nil {
122123
t.Error("expected error")
123124
}
124125
}
125126
126127
--- internal/bots/oracle/oracle_test.go
+++ internal/bots/oracle/oracle_test.go
@@ -1,8 +1,9 @@
1 package oracle_test
2
3 import (
 
4 "errors"
5 "testing"
6
7 "github.com/conflicthq/scuttlebot/internal/bots/oracle"
8 )
@@ -104,11 +105,11 @@
104
105 // --- StubProvider ---
106
107 func TestStubProviderReturnsResponse(t *testing.T) {
108 p := &oracle.StubProvider{Response: "the fleet is idle"}
109 summary, err := p.Summarize(nil, "prompt")
110 if err != nil {
111 t.Fatalf("unexpected error: %v", err)
112 }
113 if summary != "the fleet is idle" {
114 t.Errorf("got %q", summary)
@@ -115,11 +116,11 @@
115 }
116 }
117
118 func TestStubProviderReturnsError(t *testing.T) {
119 p := &oracle.StubProvider{Err: errors.New("llm unavailable")}
120 _, err := p.Summarize(nil, "prompt")
121 if err == nil {
122 t.Error("expected error")
123 }
124 }
125
126
--- internal/bots/oracle/oracle_test.go
+++ internal/bots/oracle/oracle_test.go
@@ -1,8 +1,9 @@
1 package oracle_test
2
3 import (
4 "context"
5 "errors"
6 "testing"
7
8 "github.com/conflicthq/scuttlebot/internal/bots/oracle"
9 )
@@ -104,11 +105,11 @@
105
106 // --- StubProvider ---
107
108 func TestStubProviderReturnsResponse(t *testing.T) {
109 p := &oracle.StubProvider{Response: "the fleet is idle"}
110 summary, err := p.Summarize(context.TODO(), "prompt")
111 if err != nil {
112 t.Fatalf("unexpected error: %v", err)
113 }
114 if summary != "the fleet is idle" {
115 t.Errorf("got %q", summary)
@@ -115,11 +116,11 @@
116 }
117 }
118
119 func TestStubProviderReturnsError(t *testing.T) {
120 p := &oracle.StubProvider{Err: errors.New("llm unavailable")}
121 _, err := p.Summarize(context.TODO(), "prompt")
122 if err == nil {
123 t.Error("expected error")
124 }
125 }
126
127
--- internal/ergo/api.go
+++ internal/ergo/api.go
@@ -147,12 +147,12 @@
147147
type StatusResponse struct {
148148
Success bool `json:"success"`
149149
Version string `json:"version"`
150150
StartTime string `json:"start_time"`
151151
Users struct {
152
- Total int `json:"total"`
153
- Max int `json:"max"`
152
+ Total int `json:"total"`
153
+ Max int `json:"max"`
154154
} `json:"users"`
155155
Channels int `json:"channels"`
156156
}
157157
158158
// AccountInfoResponse is the response from /v1/ns/info.
159159
--- internal/ergo/api.go
+++ internal/ergo/api.go
@@ -147,12 +147,12 @@
147 type StatusResponse struct {
148 Success bool `json:"success"`
149 Version string `json:"version"`
150 StartTime string `json:"start_time"`
151 Users struct {
152 Total int `json:"total"`
153 Max int `json:"max"`
154 } `json:"users"`
155 Channels int `json:"channels"`
156 }
157
158 // AccountInfoResponse is the response from /v1/ns/info.
159
--- internal/ergo/api.go
+++ internal/ergo/api.go
@@ -147,12 +147,12 @@
147 type StatusResponse struct {
148 Success bool `json:"success"`
149 Version string `json:"version"`
150 StartTime string `json:"start_time"`
151 Users struct {
152 Total int `json:"total"`
153 Max int `json:"max"`
154 } `json:"users"`
155 Channels int `json:"channels"`
156 }
157
158 // AccountInfoResponse is the response from /v1/ns/info.
159
--- internal/ergo/manager.go
+++ internal/ergo/manager.go
@@ -68,11 +68,11 @@
6868
func (m *Manager) startManaged(ctx context.Context) error {
6969
if err := m.writeConfig(); err != nil {
7070
return fmt.Errorf("ergo: write config: %w", err)
7171
}
7272
73
- wait := restartBaseWait
73
+ var wait time.Duration //nolint:ineffassign
7474
for {
7575
if err := ctx.Err(); err != nil {
7676
return nil
7777
}
7878
@@ -111,11 +111,11 @@
111111
select {
112112
case <-ctx.Done():
113113
return nil
114114
case <-time.After(wait):
115115
}
116
- wait = min(wait*2, restartMaxWait)
116
+ wait = min(wait*2, restartMaxWait) //nolint:ineffassign
117117
}
118118
}
119119
}
120120
121121
// Rehash reloads the Ergo config. Call after writing a new ircd.yaml.
122122
--- internal/ergo/manager.go
+++ internal/ergo/manager.go
@@ -68,11 +68,11 @@
68 func (m *Manager) startManaged(ctx context.Context) error {
69 if err := m.writeConfig(); err != nil {
70 return fmt.Errorf("ergo: write config: %w", err)
71 }
72
73 wait := restartBaseWait
74 for {
75 if err := ctx.Err(); err != nil {
76 return nil
77 }
78
@@ -111,11 +111,11 @@
111 select {
112 case <-ctx.Done():
113 return nil
114 case <-time.After(wait):
115 }
116 wait = min(wait*2, restartMaxWait)
117 }
118 }
119 }
120
121 // Rehash reloads the Ergo config. Call after writing a new ircd.yaml.
122
--- internal/ergo/manager.go
+++ internal/ergo/manager.go
@@ -68,11 +68,11 @@
68 func (m *Manager) startManaged(ctx context.Context) error {
69 if err := m.writeConfig(); err != nil {
70 return fmt.Errorf("ergo: write config: %w", err)
71 }
72
73 var wait time.Duration //nolint:ineffassign
74 for {
75 if err := ctx.Err(); err != nil {
76 return nil
77 }
78
@@ -111,11 +111,11 @@
111 select {
112 case <-ctx.Done():
113 return nil
114 case <-time.After(wait):
115 }
116 wait = min(wait*2, restartMaxWait) //nolint:ineffassign
117 }
118 }
119 }
120
121 // Rehash reloads the Ergo config. Call after writing a new ircd.yaml.
122
--- internal/mcp/mcp.go
+++ internal/mcp/mcp.go
@@ -57,11 +57,11 @@
5757
5858
// Server is the MCP server.
5959
type Server struct {
6060
registry *registry.Registry
6161
channels ChannelLister
62
- sender Sender // optional — send_message returns error if nil
62
+ sender Sender // optional — send_message returns error if nil
6363
history HistoryQuerier // optional — get_history returns error if nil
6464
tokens map[string]struct{}
6565
log *slog.Logger
6666
}
6767
6868
--- internal/mcp/mcp.go
+++ internal/mcp/mcp.go
@@ -57,11 +57,11 @@
57
58 // Server is the MCP server.
59 type Server struct {
60 registry *registry.Registry
61 channels ChannelLister
62 sender Sender // optional — send_message returns error if nil
63 history HistoryQuerier // optional — get_history returns error if nil
64 tokens map[string]struct{}
65 log *slog.Logger
66 }
67
68
--- internal/mcp/mcp.go
+++ internal/mcp/mcp.go
@@ -57,11 +57,11 @@
57
58 // Server is the MCP server.
59 type Server struct {
60 registry *registry.Registry
61 channels ChannelLister
62 sender Sender // optional — send_message returns error if nil
63 history HistoryQuerier // optional — get_history returns error if nil
64 tokens map[string]struct{}
65 log *slog.Logger
66 }
67
68

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button