Lead create_project tool

This commit is contained in:
Ian Gulliver
2026-10-17 08:08:05 -07:00
parent 1ba79e99df
commit 62df39c5da
5 changed files with 45 additions and 16 deletions
+19 -14
View File
@@ -68,7 +68,7 @@ func New(dataDir string, portFirst int, spa fs.FS) (*Server, error) {
}
}
s.agents = agents.New(s.store, filepath.Join(dataDir, "worktrees"), filepath.Join(dataDir, "leads"), filepath.Join(dataDir, "codex"), s.status)
s.agents = agents.New(s.store, filepath.Join(dataDir, "worktrees"), filepath.Join(dataDir, "leads"), filepath.Join(dataDir, "codex"), s.status, s.createProject)
err = s.agents.Recover(context.Background())
if err != nil {
s.store.Close()
@@ -204,39 +204,44 @@ func (s *Server) CreateProject(w http.ResponseWriter, r *http.Request) {
return
}
if strings.TrimSpace(req.Name) == "" {
writeError(w, http.StatusBadRequest, errors.New("name is required"))
p, err := s.createProject(r.Context(), req.Name, req.RepoPath, actor(r))
if err != nil {
writeAgentError(w, err)
return
}
writeJSON(w, http.StatusCreated, p)
}
info, err := git.Inspect(req.RepoPath)
func (s *Server) createProject(ctx context.Context, name, repoPath, createdBy string) (api.Project, error) {
if strings.TrimSpace(name) == "" {
return api.Project{}, fmt.Errorf("%w: name is required", agents.ErrInvalid)
}
info, err := git.Inspect(repoPath)
if err != nil {
writeError(w, http.StatusBadRequest, err)
return
return api.Project{}, fmt.Errorf("%w: %w", agents.ErrInvalid, err)
}
err = git.ConfigureNotesFetch(info.Root)
if err != nil {
writeError(w, http.StatusInternalServerError, err)
return
return api.Project{}, err
}
p := api.Project{
Id: store.NewID(),
Name: req.Name,
Name: name,
RepoPath: info.Root,
DefaultBranch: info.DefaultBranch,
Remote: info.Remote,
CreatedBy: actor(r),
CreatedBy: createdBy,
CreatedAt: time.Now().UTC(),
}
err = s.store.CreateProject(r.Context(), p)
err = s.store.CreateProject(ctx, p)
if err != nil {
writeError(w, http.StatusBadRequest, err)
return
return api.Project{}, fmt.Errorf("%w: %w", agents.ErrInvalid, err)
}
writeJSON(w, http.StatusCreated, p)
return p, nil
}
func (s *Server) GetProject(w http.ResponseWriter, r *http.Request, projectID string) {