@@ -281,3 +281,39 @@ func (s *server) readFileInWorkspace(w http.ResponseWriter, r *http.Request) {
281281
282282 writeResponse (logger , w , map [string ]any {"stdout" : out })
283283}
284+
285+ type statFileInWorkspaceRequest struct {
286+ workspaceCommonRequest `json:",inline"`
287+ FilePath string `json:"filePath"`
288+ }
289+
290+ func (s * server ) statFileInWorkspace (w http.ResponseWriter , r * http.Request ) {
291+ logger := gcontext .GetLogger (r .Context ())
292+ var reqObject statFileInWorkspaceRequest
293+ if err := json .NewDecoder (r .Body ).Decode (& reqObject ); err != nil {
294+ writeError (logger , w , http .StatusBadRequest , fmt .Errorf ("invalid request body: %w" , err ))
295+ return
296+ }
297+
298+ prg , err := loader .Program (r .Context (), s .getWorkspaceTool (reqObject .workspaceCommonRequest ), "Stat File In Workspace" , loader.Options {Cache : s .client .Cache })
299+ if err != nil {
300+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to load program: %w" , err ))
301+ return
302+ }
303+
304+ out , err := s .client .Run (
305+ r .Context (),
306+ prg ,
307+ reqObject .Env ,
308+ fmt .Sprintf (
309+ `{"workspace_id": "%s", "file_path": "%s"}` ,
310+ reqObject .ID , reqObject .FilePath ,
311+ ),
312+ )
313+ if err != nil {
314+ writeError (logger , w , http .StatusInternalServerError , fmt .Errorf ("failed to run program: %w" , err ))
315+ return
316+ }
317+
318+ writeResponse (logger , w , map [string ]any {"stdout" : out })
319+ }
0 commit comments