From 757d81a4ba09788d288c96512462cba007a684b6 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Tue, 4 Aug 2026 13:21:37 +0200 Subject: [PATCH] fs: pass sessID and uname to LoadAutoLoadTools for tool server env setup --- fs/lifecycle.go | 2 +- fs/persist.go | 2 +- fs/setup.go | 16 +++++++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/fs/lifecycle.go b/fs/lifecycle.go index fad1950..176e1b2 100644 --- a/fs/lifecycle.go +++ b/fs/lifecycle.go @@ -535,7 +535,7 @@ func CreateAgent(rs *RootState, sessName string, args []string) error { } // Load configured tools before building the runtime. - LoadAutoLoadTools(cfg, toolSrv, func(f string, a ...any) { + LoadAutoLoadTools(cfg, toolSrv, sessID, uname, func(f string, a ...any) { rs.Cfg.Log.Error("session %s: "+f, append([]any{sessName}, a...)...) }) diff --git a/fs/persist.go b/fs/persist.go index 92b0a2c..c5b5d23 100644 --- a/fs/persist.go +++ b/fs/persist.go @@ -155,7 +155,7 @@ func restoreSession(rs *RootState, ps *agent.PersistedAgent) error { layers := BuildPromptLayers(cfg, cwd, sessID, uname, infra.PromptEnv, "") // Load configured tools before building the runtime. - LoadAutoLoadTools(cfg, infra.ToolsConn, func(f string, a ...any) { + LoadAutoLoadTools(cfg, infra.ToolsConn, sessID, uname, func(f string, a ...any) { rs.Cfg.Log.Error("session %s: "+f, append([]any{sessID}, a...)...) }) diff --git a/fs/setup.go b/fs/setup.go index 83eb2d4..522787b 100644 --- a/fs/setup.go +++ b/fs/setup.go @@ -191,10 +191,24 @@ func (p PromptLayers) BaseLayers() []string { } // LoadAutoLoadTools loads all tools from the agent config's autoLoad list. -func LoadAutoLoadTools(cfg *agent.AgentConfig, runner toolsrv.Runner, logError func(string, ...any)) { +// It first sends the session ID and uname to the tool server so that +// ollie-remote can attach its tool registry before processing tool_load RPCs. +func LoadAutoLoadTools(cfg *agent.AgentConfig, runner toolsrv.Runner, sessID, uname string, logError func(string, ...any)) { if cfg == nil || runner == nil { return } + + // Send session ID to the tool server first — ollie-remote uses this + // to attach its tool registry via the OnEnvSet callback. + if es, ok := runner.(interface{ SetEnv(string, string) }); ok { + if sessID != "" { + es.SetEnv("OLLIE_SESSION_ID", sessID) + } + if uname != "" { + es.SetEnv("OLLIE_UNAME", uname) + } + } + for _, tl := range cfg.AutoLoad { if err := loadToolOnRunner(runner, tl); err != nil { if logError != nil {