@@ -40,20 +40,13 @@ type Server struct {
4040 ociTeamKey string
4141 agentsDir string
4242 agentsPath string // For local files: specific file path to reload (instead of scanning agentsDir)
43- rootFS * os.Root
4443}
4544
4645type Opt func (* Server ) error
4746
4847func WithAgentsDir (dir string ) Opt {
4948 return func (s * Server ) error {
50- rootFs , err := os .OpenRoot (dir )
51- if err != nil {
52- return fmt .Errorf ("failed to open root filesystem at %s: %w" , dir , err )
53- }
54-
5549 s .agentsDir = dir
56- s .rootFS = rootFs
5750 return nil
5851 }
5952}
@@ -106,17 +99,11 @@ func New(sessionStore session.Store, runConfig *config.RuntimeConfig, teams map[
10699
107100 // List all available agents
108101 group .GET ("/agents" , s .getAgents )
109- // Get an agent by id
110- group .GET ("/agents/:id" , s .getAgentConfig )
111- // Get an agent's raw YAML configuration by id
112- group .GET ("/agents/:id/yaml" , s .getAgentConfigYAML )
113102
114103 // SESSIONS
115104
116105 // List all sessions
117106 group .GET ("/sessions" , s .getSessions )
118- // Get sessions by agent filename
119- group .GET ("/sessions/agent/:id" , s .getSessionsByAgent )
120107 // Get a session by id
121108 group .GET ("/sessions/:id" , s .getSession )
122109 // Resume a session by id
@@ -154,7 +141,7 @@ func (s *Server) Serve(ctx context.Context, ln net.Listener) error {
154141// hasAgentsDir returns true if the server has a local agents directory.
155142// Returns false for OCI reference-based servers, which load from memory.
156143func (s * Server ) hasAgentsDir () bool {
157- return s .agentsDir != "" && s . rootFS != nil
144+ return s .agentsDir != ""
158145}
159146
160147// getTeam retrieves a team by key with read lock
@@ -191,38 +178,6 @@ func (s *Server) getOCIRef(key string) (string, bool) {
191178
192179// API handlers
193180
194- func (s * Server ) getAgentConfig (c echo.Context ) error {
195- agentID := c .Param ("id" )
196- p := addYamlExt (agentID )
197-
198- data , err := s .rootFS .ReadFile (p )
199- if err != nil {
200- return fmt .Errorf ("reading config file %s: %w" , p , err )
201- }
202-
203- cfg , err := config .Load (c .Request ().Context (), teamloader .NewBytesSource (data ))
204- if err != nil {
205- slog .Error ("Failed to load config" , "error" , err )
206- return echo .NewHTTPError (http .StatusNotFound , "agent not found" )
207- }
208-
209- return c .JSON (http .StatusOK , cfg )
210- }
211-
212- func (s * Server ) getAgentConfigYAML (c echo.Context ) error {
213- agentID := c .Param ("id" )
214- p := addYamlExt (agentID )
215-
216- // Read the YAML file
217- yamlContent , err := s .rootFS .ReadFile (p )
218- if err != nil {
219- slog .Error ("Failed to read agent YAML file" , "path" , p , "error" , err )
220- return echo .NewHTTPError (http .StatusInternalServerError , "failed to read agent file" )
221- }
222-
223- return c .String (http .StatusOK , string (yamlContent ))
224- }
225-
226181func (s * Server ) getAgents (c echo.Context ) error {
227182 // Refresh agents from disk to get the latest configurations
228183 // Only refresh for local files/dirs (hasAgentsDir == true)
@@ -346,41 +301,13 @@ func (s *Server) getSessions(c echo.Context) error {
346301 responses := make ([]api.SessionsResponse , len (sessions ))
347302 for i , sess := range sessions {
348303 responses [i ] = api.SessionsResponse {
349- ID : sess .ID ,
350- Title : sess .Title ,
351- CreatedAt : sess .CreatedAt .Format (time .RFC3339 ),
352- NumMessages : len (sess .GetAllMessages ()),
353- InputTokens : sess .InputTokens ,
354- OutputTokens : sess .OutputTokens ,
355- GetMostRecentAgentFilename : sess .GetMostRecentAgentFilename (),
356- WorkingDir : sess .WorkingDir ,
357- }
358- }
359- return c .JSON (http .StatusOK , responses )
360- }
361-
362- func (s * Server ) getSessionsByAgent (c echo.Context ) error {
363- agentFilename := c .Param ("id" )
364- if agentFilename == "" {
365- return echo .NewHTTPError (http .StatusBadRequest , "id parameter is required" )
366- }
367-
368- sessions , err := s .sessionStore .GetSessionsByAgent (c .Request ().Context (), agentFilename )
369- if err != nil {
370- return echo .NewHTTPError (http .StatusInternalServerError , fmt .Sprintf ("failed to get sessions for agent: %v" , err ))
371- }
372-
373- responses := make ([]api.SessionsResponse , len (sessions ))
374- for i , sess := range sessions {
375- responses [i ] = api.SessionsResponse {
376- ID : sess .ID ,
377- Title : sess .Title ,
378- CreatedAt : sess .CreatedAt .Format (time .RFC3339 ),
379- NumMessages : len (sess .GetAllMessages ()),
380- InputTokens : sess .InputTokens ,
381- OutputTokens : sess .OutputTokens ,
382- GetMostRecentAgentFilename : sess .GetMostRecentAgentFilename (),
383- WorkingDir : sess .WorkingDir ,
304+ ID : sess .ID ,
305+ Title : sess .Title ,
306+ CreatedAt : sess .CreatedAt .Format (time .RFC3339 ),
307+ NumMessages : len (sess .GetAllMessages ()),
308+ InputTokens : sess .InputTokens ,
309+ OutputTokens : sess .OutputTokens ,
310+ WorkingDir : sess .WorkingDir ,
384311 }
385312 }
386313 return c .JSON (http .StatusOK , responses )
@@ -540,7 +467,7 @@ func (s *Server) runAgent(c echo.Context) error {
540467 }
541468
542469 for _ , msg := range messages {
543- sess .AddMessage (session .UserMessage (agentFilename , msg .Content , msg .MultiContent ... ))
470+ sess .AddMessage (session .UserMessage (msg .Content , msg .MultiContent ... ))
544471 }
545472
546473 if err := s .sessionStore .UpdateSession (c .Request ().Context (), sess ); err != nil {
@@ -655,13 +582,6 @@ func (s *Server) loadTeamForSession(ctx context.Context, agentFilename string, s
655582 return t , nil
656583}
657584
658- func addYamlExt (filename string ) string {
659- if strings .HasSuffix (filename , ".yaml" ) || strings .HasSuffix (filename , ".yml" ) {
660- return filename
661- }
662- return filename + ".yaml"
663- }
664-
665585func (s * Server ) elicitation (c echo.Context ) error {
666586 sessionID := c .Param ("id" )
667587 var req api.ResumeElicitationRequest
0 commit comments