diff --git a/pkg/controller/handlers/projects/projects.go b/pkg/controller/handlers/projects/projects.go new file mode 100644 index 000000000..5818714db --- /dev/null +++ b/pkg/controller/handlers/projects/projects.go @@ -0,0 +1,32 @@ +package projects + +import ( + "github.com/obot-platform/nah/pkg/router" + v1 "github.com/obot-platform/obot/pkg/storage/apis/obot.obot.ai/v1" + "k8s.io/apimachinery/pkg/api/equality" +) + +type Handler struct{} + +func NewHandler() *Handler { + return &Handler{} +} + +func (h *Handler) CopyProjectInfo(req router.Request, _ router.Response) error { + projectThread := req.Object.(*v1.Thread) + if !projectThread.Spec.Project || projectThread.Spec.ParentThreadName == "" { + return nil + } + + var parentThread v1.Thread + if err := req.Get(&parentThread, projectThread.Namespace, projectThread.Spec.ParentThreadName); err != nil { + return err + } + + if !equality.Semantic.DeepEqual(projectThread.Spec.Manifest, parentThread.Spec.Manifest) { + projectThread.Spec.Manifest = parentThread.Spec.Manifest + return req.Client.Update(req.Ctx, projectThread) + } + + return nil +} diff --git a/pkg/controller/routes.go b/pkg/controller/routes.go index 22f672f0e..1d4f3946c 100644 --- a/pkg/controller/routes.go +++ b/pkg/controller/routes.go @@ -12,6 +12,7 @@ import ( "github.com/obot-platform/obot/pkg/controller/handlers/knowledgesource" "github.com/obot-platform/obot/pkg/controller/handlers/knowledgesummary" "github.com/obot-platform/obot/pkg/controller/handlers/oauthapp" + "github.com/obot-platform/obot/pkg/controller/handlers/projects" "github.com/obot-platform/obot/pkg/controller/handlers/runs" "github.com/obot-platform/obot/pkg/controller/handlers/threads" "github.com/obot-platform/obot/pkg/controller/handlers/threadshare" @@ -48,6 +49,7 @@ func (c *Controller) setupRoutes() error { toolInfo := toolinfo.New(c.services.GPTClient) threads := threads.NewHandler(c.services.GPTClient, c.services.Invoker) credentialCleanup := cleanup.NewCredentials(c.services.GPTClient) + projects := projects.NewHandler() // Runs root.Type(&v1.Run{}).FinalizeFunc(v1.RunFinalizer, runs.DeleteRunState) @@ -68,6 +70,7 @@ func (c *Controller) setupRoutes() error { root.Type(&v1.Thread{}).HandlerFunc(threads.CleanupEphemeralThreads) root.Type(&v1.Thread{}).HandlerFunc(threads.SetCreated) root.Type(&v1.Thread{}).HandlerFunc(threads.GenerateName) + root.Type(&v1.Thread{}).HandlerFunc(projects.CopyProjectInfo) root.Type(&v1.Thread{}).FinalizeFunc(v1.ThreadFinalizer, credentialCleanup.Remove) root.Type(&v1.Thread{}).FinalizeFunc(v1.ThreadFinalizer+"-child-cleanup", threads.ActivateRuns)