9p: use tools.Server directly, eliminate Dispatcher indirection

NewDispatcher factories replaced with direct server factories.
Tests use nil server (no tools needed).
This commit is contained in:
Levi Neely 2026-07-29 22:50:16 +02:00
parent e88e0a6f4c
commit 72747b887d
3 changed files with 19 additions and 27 deletions

View File

@ -35,7 +35,7 @@ func newNoopCore(id string) *session.Session {
NewBackend: func(name string) (backend.Backend, error) { NewBackend: func(name string) (backend.Backend, error) {
return backend.NewNoop(name, "default"), nil return backend.NewNoop(name, "default"), nil
}, },
NewDispatcher: func() tools.Dispatcher { return tools.NewDispatcher() }, NewToolServer: func() tools.Server { return nil },
}) })
} }
@ -59,7 +59,7 @@ func newBlockingCore(id string) *session.Session {
NewBackend: func(name string) (backend.Backend, error) { NewBackend: func(name string) (backend.Backend, error) {
return backend.NewNoop(name, "default"), nil return backend.NewNoop(name, "default"), nil
}, },
NewDispatcher: func() tools.Dispatcher { return tools.NewDispatcher() }, NewToolServer: func() tools.Server { return nil },
}) })
} }
@ -81,7 +81,7 @@ func newContentCore(id, content string) *session.Session {
NewBackend: func(name string) (backend.Backend, error) { NewBackend: func(name string) (backend.Backend, error) {
return backend.NewNoop(name, "default"), nil return backend.NewNoop(name, "default"), nil
}, },
NewDispatcher: func() tools.Dispatcher { return tools.NewDispatcher() }, NewToolServer: func() tools.Server { return nil },
}) })
} }
@ -128,7 +128,7 @@ func newTestSessionManagerWithCore(t *testing.T) *mgr.Manager {
NewBackend: func(name string) (backend.Backend, error) { NewBackend: func(name string) (backend.Backend, error) {
return backend.NewNoop(name, "default"), nil return backend.NewNoop(name, "default"), nil
}, },
NewDispatcher: func() tools.Dispatcher { return tools.NewDispatcher() }, NewToolServer: func() tools.Server { return nil },
}), nil }), nil
}, },
}) })
@ -864,7 +864,7 @@ func TestSessionFileStoreMakePublishMultipleEvents(t *testing.T) {
AgentName: "default", AgentName: "default",
CWD: "/tmp", CWD: "/tmp",
SessionID: "s1", SessionID: "s1",
NewDispatcher: func() tools.Dispatcher { return tools.NewDispatcher() }, NewToolServer: func() tools.Server { return nil },
}) })
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
@ -1160,7 +1160,7 @@ func TestSessionManagerCreateSessionEnvExpansion(t *testing.T) {
AgentName: agentName, AgentName: agentName,
CWD: cwd, CWD: cwd,
SessionID: sessionID, SessionID: sessionID,
NewDispatcher: func() tools.Dispatcher { return tools.NewDispatcher() }, NewToolServer: func() tools.Server { return nil },
}), nil }), nil
}, },
}) })
@ -1185,7 +1185,7 @@ func TestSessionManagerCreateSessionTildeExpansion(t *testing.T) {
AgentName: agentName, AgentName: agentName,
CWD: cwd, CWD: cwd,
SessionID: sessionID, SessionID: sessionID,
NewDispatcher: func() tools.Dispatcher { return tools.NewDispatcher() }, NewToolServer: func() tools.Server { return nil },
}), nil }), nil
}, },
}) })

View File

@ -130,7 +130,7 @@ func (s *Manager) CreateSession(args []string) (string, error) {
if s.cfg.SkillsRegistry != nil { if s.cfg.SkillsRegistry != nil {
execOpts = append(execOpts, execute.WithSkillsRegistry(s.cfg.SkillsRegistry)) execOpts = append(execOpts, execute.WithSkillsRegistry(s.cfg.SkillsRegistry))
} }
var newDisp func() tools.Dispatcher var newToolServer func() tools.Server
var remoteEnv []string // extra env vars from remote host info var remoteEnv []string // extra env vars from remote host info
if remoteTarget != "" { if remoteTarget != "" {
// Dial eagerly so we get HostInfo for prompt resolution. // Dial eagerly so we get HostInfo for prompt resolution.
@ -144,18 +144,14 @@ func (s *Manager) CreateSession(args []string) (string, error) {
if dialErr != nil { if dialErr != nil {
return "", fmt.Errorf("remote dial: %w", dialErr) return "", fmt.Errorf("remote dial: %w", dialErr)
} }
newDisp = tools.NewDispatcherFunc(map[string]func() tools.Server{ newToolServer = func() tools.Server { return rsrv }
"execute": func() tools.Server { return rsrv },
})
remoteEnv = []string{ remoteEnv = []string{
"PRIME_CWD=" + cwd, "PRIME_CWD=" + cwd,
"PRIME_PLATFORM=" + rsrv.Info.Platform, "PRIME_PLATFORM=" + rsrv.Info.Platform,
"PRIME_IS_GIT_REPO=" + fmt.Sprintf("%v", rsrv.Info.IsGitRepo), "PRIME_IS_GIT_REPO=" + fmt.Sprintf("%v", rsrv.Info.IsGitRepo),
} }
} else { } else {
newDisp = tools.NewDispatcherFunc(map[string]func() tools.Server{ newToolServer = execute.Decl(cwd, execOpts...)
"execute": execute.Decl(cwd, execOpts...),
})
} }
var promptEnv []string var promptEnv []string
@ -197,8 +193,8 @@ func (s *Manager) CreateSession(args []string) (string, error) {
} }
envBlock := prompts.Environment(cwd, platform, isGitRepo, "") envBlock := prompts.Environment(cwd, platform, isGitRepo, "")
disp := newDisp() toolSrv := newToolServer()
rt := agent.BuildRuntime(cfg, disp, cwd, env, sysPrompt, opModel, envBlock) rt := agent.BuildRuntime(cfg, toolSrv, cwd, env, sysPrompt, opModel, envBlock)
// sessPtr is set after NewSession; the ReadPlanStep closure captures it. // sessPtr is set after NewSession; the ReadPlanStep closure captures it.
core = session.New(session.Config{ core = session.New(session.Config{
@ -211,7 +207,7 @@ func (s *Manager) CreateSession(args []string) (string, error) {
CWD: cwd, CWD: cwd,
Remote: remoteTarget, Remote: remoteTarget,
Runtime: rt, Runtime: rt,
NewDispatcher: newDisp, NewToolServer: newToolServer,
PromptEnvExtra: promptEnv, PromptEnvExtra: promptEnv,
BaseLayers: []string{sysPrompt, opModel, envBlock}, BaseLayers: []string{sysPrompt, opModel, envBlock},
Log: s.cfg.Sink.NewLogger("core"), Log: s.cfg.Sink.NewLogger("core"),

View File

@ -132,7 +132,7 @@ func (s *Manager) restoreSession(ps *agent.PersistedAgent) error {
} }
uname := s.nextUname() uname := s.nextUname()
var newDisp func() tools.Dispatcher var newToolServer func() tools.Server
var promptEnv []string var promptEnv []string
remoteTarget := ps.Remote remoteTarget := ps.Remote
@ -144,9 +144,7 @@ func (s *Manager) restoreSession(ps *agent.PersistedAgent) error {
if dialErr != nil { if dialErr != nil {
return fmt.Errorf("remote dial: %w", dialErr) return fmt.Errorf("remote dial: %w", dialErr)
} }
newDisp = tools.NewDispatcherFunc(map[string]func() tools.Server{ newToolServer = func() tools.Server { return rsrv }
"execute": func() tools.Server { return rsrv },
})
promptEnv = []string{ promptEnv = []string{
"PRIME_CWD=" + cwd, "PRIME_CWD=" + cwd,
"PRIME_PLATFORM=" + rsrv.Info.Platform, "PRIME_PLATFORM=" + rsrv.Info.Platform,
@ -168,9 +166,7 @@ func (s *Manager) restoreSession(ps *agent.PersistedAgent) error {
if s.cfg.SkillsRegistry != nil { if s.cfg.SkillsRegistry != nil {
execOpts = append(execOpts, execute.WithSkillsRegistry(s.cfg.SkillsRegistry)) execOpts = append(execOpts, execute.WithSkillsRegistry(s.cfg.SkillsRegistry))
} }
newDisp = tools.NewDispatcherFunc(map[string]func() tools.Server{ newToolServer = execute.Decl(cwd, execOpts...)
"execute": execute.Decl(cwd, execOpts...),
})
promptEnv = agent.PromptEnv(cwd) promptEnv = agent.PromptEnv(cwd)
} }
@ -204,8 +200,8 @@ func (s *Manager) restoreSession(ps *agent.PersistedAgent) error {
} }
envBlock := prompts.Environment(cwd, platform, isGitRepo, "") envBlock := prompts.Environment(cwd, platform, isGitRepo, "")
disp := newDisp() toolSrv := newToolServer()
rt := agent.BuildRuntime(cfg, disp, cwd, env, sysPrompt, opModel, envBlock) rt := agent.BuildRuntime(cfg, toolSrv, cwd, env, sysPrompt, opModel, envBlock)
restoredSession := agent.RestoreHistory(ps) restoredSession := agent.RestoreHistory(ps)
@ -221,7 +217,7 @@ func (s *Manager) restoreSession(ps *agent.PersistedAgent) error {
Remote: remoteTarget, Remote: remoteTarget,
History: restoredSession, History: restoredSession,
Runtime: rt, Runtime: rt,
NewDispatcher: newDisp, NewToolServer: newToolServer,
PromptEnvExtra: promptEnv, PromptEnvExtra: promptEnv,
BaseLayers: []string{sysPrompt, opModel, envBlock}, BaseLayers: []string{sysPrompt, opModel, envBlock},
Log: s.cfg.Sink.NewLogger("core"), Log: s.cfg.Sink.NewLogger("core"),