feat(keeld): construct AW memory store, nop fallback when AW is down
This commit is contained in:
@@ -14,10 +14,12 @@ import (
|
||||
"time"
|
||||
|
||||
"keel/internal/ai"
|
||||
"keel/internal/aw"
|
||||
"keel/internal/enforce"
|
||||
"keel/internal/evidence"
|
||||
"keel/internal/harness"
|
||||
"keel/internal/knowledge"
|
||||
"keel/internal/memory"
|
||||
"keel/internal/mode"
|
||||
"keel/internal/mode/focus"
|
||||
"keel/internal/mode/offscreen"
|
||||
@@ -63,11 +65,28 @@ func main() {
|
||||
return harness.Services{}, fmt.Errorf("%w: %v", settings.ErrInvalidBackend, err)
|
||||
}
|
||||
svc := ai.NewService(backend)
|
||||
|
||||
// Defend against a hand-blanked aw_url: SeedFromEnv defaults this only on
|
||||
// first run, but Load returns whatever the JSON file holds on later starts.
|
||||
awURL := s.AWURL
|
||||
if awURL == "" {
|
||||
awURL = "http://localhost:5600"
|
||||
}
|
||||
var mem memory.Store = memory.NewNop()
|
||||
awc := aw.New(awURL)
|
||||
if err := awc.EnsureBucket(context.Background(), "keel.events", "keel.event", "keel"); err != nil {
|
||||
log.Printf("memory: AW unavailable at %s (%v); running without memory", awURL, err)
|
||||
} else {
|
||||
mem = memory.NewAWStore(awc, "keel.events")
|
||||
log.Printf("memory: keel.events ready at %s", awURL)
|
||||
}
|
||||
|
||||
return harness.Services{
|
||||
AI: svc,
|
||||
Tasks: tasks.NewMarvin(s.MarvinCmd),
|
||||
Knowledge: knowledge.NewFileSource(s.KnowledgePath),
|
||||
Enforce: enforce.NewGuard(),
|
||||
Memory: mem,
|
||||
Clock: time.Now,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -6,18 +6,21 @@ import (
|
||||
"keel/internal/ai"
|
||||
"keel/internal/enforce"
|
||||
"keel/internal/knowledge"
|
||||
"keel/internal/memory"
|
||||
"keel/internal/tasks"
|
||||
)
|
||||
|
||||
// Services is the shared infrastructure every mode receives from the harness.
|
||||
// Dir is the mode's namespaced persistence directory (~/.keel/modes/<kind>);
|
||||
// modes build their own file paths under it. Notify fires the harness change
|
||||
// listeners (web SSE + status bar).
|
||||
// listeners (web SSE + status bar). Memory is Keel's durable cross-run event
|
||||
// store (AW-backed, or a nop when AW is down).
|
||||
type Services struct {
|
||||
AI *ai.Service
|
||||
Tasks tasks.Provider
|
||||
Knowledge knowledge.Source
|
||||
Enforce enforce.Guard
|
||||
Memory memory.Store
|
||||
Clock func() time.Time
|
||||
Dir string
|
||||
Notify func()
|
||||
|
||||
Reference in New Issue
Block a user