diff --git a/cmd/byre/run.go b/cmd/byre/run.go index fed7139..2f75865 100644 --- a/cmd/byre/run.go +++ b/cmd/byre/run.go @@ -13,6 +13,7 @@ import ( "strings" "g.fc.run/ai/byre/internal/claude" + "g.fc.run/ai/byre/internal/git" ) func runCmd(args []string) { @@ -27,10 +28,9 @@ func runCmd(args []string) { ctx := context.Background() s, err := claude.Start(ctx, claude.Options{ - Cwd: dir, - Resume: *resume, - GitName: gitConfig(dir, "user.name"), - GitEmail: gitConfig(dir, "user.email"), + Cwd: dir, + Resume: *resume, + Env: git.IdentityEnv(gitConfig(dir, "user.name"), gitConfig(dir, "user.email")), }) if err != nil { fatal("start claude", "err", err) diff --git a/internal/agents/manager.go b/internal/agents/manager.go index 3d13e23..3ea076c 100644 --- a/internal/agents/manager.go +++ b/internal/agents/manager.go @@ -949,6 +949,7 @@ func (m *Manager) startLive(ctx context.Context, sess api.AgentSession, task api tools = append(m.leadTools(l), m.readKnowledgeTool()) env = nil } + env = append(git.IdentityEnv(l.gitName, l.gitEmail), env...) servers := []*mcp.Server{{Name: "byre", Version: "0.0.0", Tools: tools}} sctx, cancel := context.WithTimeout(ctx, 60*time.Second) diff --git a/internal/agents/mergein.go b/internal/agents/mergein.go index a6e5d96..247bd55 100644 --- a/internal/agents/mergein.go +++ b/internal/agents/mergein.go @@ -514,12 +514,7 @@ func (m *Manager) squashAndClose(ctx context.Context, taskID, login string) erro return err } - env := []string{ - "GIT_AUTHOR_NAME=" + user.GitName, - "GIT_AUTHOR_EMAIL=" + user.GitEmail, - "GIT_COMMITTER_NAME=" + user.GitName, - "GIT_COMMITTER_EMAIL=" + user.GitEmail, - } + env := git.IdentityEnv(user.GitName, user.GitEmail) commit, err := git.SquashCommit(project.RepoPath, task.WorktreePath, project.DefaultBranch, squashMessage(task.MergeTitle, coAuthors), env, m.signer(ctx, user)) if err != nil { return err diff --git a/internal/agents/mergemain.go b/internal/agents/mergemain.go index 7830fcb..588dceb 100644 --- a/internal/agents/mergemain.go +++ b/internal/agents/mergemain.go @@ -123,12 +123,7 @@ func (m *Manager) pushToMain(ctx context.Context, l *live, task api.Task, projec if err != nil { return "", err } - env := []string{ - "GIT_AUTHOR_NAME=" + user.GitName, - "GIT_AUTHOR_EMAIL=" + user.GitEmail, - "GIT_COMMITTER_NAME=" + user.GitName, - "GIT_COMMITTER_EMAIL=" + user.GitEmail, - } + env := git.IdentityEnv(user.GitName, user.GitEmail) commit, err := git.SquashCommit(project.RepoPath, l.dir, project.DefaultBranch, squashMessage(title, coAuthors), env, m.signer(ctx, user)) conflict := &git.ConflictError{} if errors.As(err, &conflict) { diff --git a/internal/agents/process.go b/internal/agents/process.go index 1c91529..3afe0cb 100644 --- a/internal/agents/process.go +++ b/internal/agents/process.go @@ -88,8 +88,6 @@ func (m *Manager) startClaude(ctx context.Context, sess api.AgentSession, l *liv opts := claude.Options{ Cwd: l.dir, Model: sess.Model, - GitName: l.gitName, - GitEmail: l.gitEmail, Env: env, Guidance: g + l.notes, MCPServers: servers, @@ -169,8 +167,6 @@ func (m *Manager) startCodex(ctx context.Context, sess api.AgentSession, l *live opts := codex.Options{ Cwd: l.dir, Model: sess.Model, - GitName: l.gitName, - GitEmail: l.gitEmail, Env: append(env, "CODEX_HOME="+m.codexHome), Guidance: g + l.notes, Reminder: g, @@ -247,8 +243,6 @@ func (m *Manager) startAntigravity(ctx context.Context, sess api.AgentSession, l Cwd: l.dir, Model: sess.Model, Resume: sess.VendorSessionId, - GitName: l.gitName, - GitEmail: l.gitEmail, Env: env, Guidance: g, Notes: strings.TrimSpace(l.notes), diff --git a/internal/agents/snapshots.go b/internal/agents/snapshots.go index 235e08b..ebbcceb 100644 --- a/internal/agents/snapshots.go +++ b/internal/agents/snapshots.go @@ -155,12 +155,7 @@ func (m *Manager) takeSnapshot(ctx context.Context, t snapTarget, trigger api.Sn } n := last.N + 1 - commit, err := git.CommitSnapshot(t.dir, tree, git.SnapshotRef(t.taskID, n), fmt.Sprintf("byre snapshot %d (%s)", n, trigger), []string{ - "GIT_AUTHOR_NAME=" + t.gitName, - "GIT_AUTHOR_EMAIL=" + t.gitEmail, - "GIT_COMMITTER_NAME=" + t.gitName, - "GIT_COMMITTER_EMAIL=" + t.gitEmail, - }) + commit, err := git.CommitSnapshot(t.dir, tree, git.SnapshotRef(t.taskID, n), fmt.Sprintf("byre snapshot %d (%s)", n, trigger), git.IdentityEnv(t.gitName, t.gitEmail)) if err != nil { return nil, err } diff --git a/internal/antigravity/session.go b/internal/antigravity/session.go index cad830b..9cf61af 100644 --- a/internal/antigravity/session.go +++ b/internal/antigravity/session.go @@ -33,8 +33,6 @@ type Options struct { Cwd string Model string Resume string - GitName string - GitEmail string Env []string Guidance string Notes string @@ -327,13 +325,7 @@ func (s *Session) spawnLocked() error { cmd := procgroup.Command("agy", args...) cmd.Dir = s.opts.Cwd cmd.Stderr = os.Stderr - cmd.Env = append(os.Environ(), - "GIT_AUTHOR_NAME="+s.opts.GitName, - "GIT_AUTHOR_EMAIL="+s.opts.GitEmail, - "GIT_COMMITTER_NAME="+s.opts.GitName, - "GIT_COMMITTER_EMAIL="+s.opts.GitEmail, - ) - cmd.Env = append(cmd.Env, s.opts.Env...) + cmd.Env = append(os.Environ(), s.opts.Env...) stdin, err := cmd.StdinPipe() if err != nil { diff --git a/internal/claude/session.go b/internal/claude/session.go index df85d3f..dc7d865 100644 --- a/internal/claude/session.go +++ b/internal/claude/session.go @@ -35,8 +35,6 @@ type Options struct { Resume string ResumeAt string ForkSession bool - GitName string - GitEmail string Env []string Guidance string Hooks map[string][]HookMatcher @@ -370,10 +368,6 @@ func buildEnv(opts Options) []string { env = append(env, "CLAUDE_CODE_ENTRYPOINT=sdk-go", "CLAUDE_CODE_DISABLE_AUTOUPDATER=1", - "GIT_AUTHOR_NAME="+opts.GitName, - "GIT_AUTHOR_EMAIL="+opts.GitEmail, - "GIT_COMMITTER_NAME="+opts.GitName, - "GIT_COMMITTER_EMAIL="+opts.GitEmail, ) return append(env, opts.Env...) } diff --git a/internal/codex/session.go b/internal/codex/session.go index 26fdded..5b49daf 100644 --- a/internal/codex/session.go +++ b/internal/codex/session.go @@ -27,8 +27,6 @@ type Options struct { Resume string ForkFrom string ForkAt string - GitName string - GitEmail string Env []string Guidance string Reminder string @@ -158,7 +156,7 @@ func spawn(opts Options) (*Session, error) { cmd := procgroup.Command("codex", "app-server", "-c", "check_for_update_on_startup=false") cmd.Dir = opts.Cwd cmd.Stderr = os.Stderr - cmd.Env = buildEnv(opts) + cmd.Env = append(os.Environ(), opts.Env...) stdinR, stdin, err := os.Pipe() if err != nil { @@ -321,16 +319,6 @@ func (s *Session) setThread(id string) { s.stateMu.Unlock() } -func buildEnv(opts Options) []string { - env := append(os.Environ(), - "GIT_AUTHOR_NAME="+opts.GitName, - "GIT_AUTHOR_EMAIL="+opts.GitEmail, - "GIT_COMMITTER_NAME="+opts.GitName, - "GIT_COMMITTER_EMAIL="+opts.GitEmail, - ) - return append(env, opts.Env...) -} - func (s *Session) Events() <-chan Event { return s.events } diff --git a/internal/git/git.go b/internal/git/git.go index f01e5ed..94014a7 100644 --- a/internal/git/git.go +++ b/internal/git/git.go @@ -366,12 +366,7 @@ func CommitAll(dir, message, name, email string) (string, error) { return "", nil } - env := []string{ - "GIT_AUTHOR_NAME=" + name, - "GIT_AUTHOR_EMAIL=" + email, - "GIT_COMMITTER_NAME=" + name, - "GIT_COMMITTER_EMAIL=" + email, - } + env := IdentityEnv(name, email) _, err = runEnv(dir, env, "add", "--all") if err != nil { return "", err @@ -384,12 +379,7 @@ func CommitAll(dir, message, name, email string) (string, error) { } func Merge(dir, rev, message, name, email string) error { - env := []string{ - "GIT_AUTHOR_NAME=" + name, - "GIT_AUTHOR_EMAIL=" + email, - "GIT_COMMITTER_NAME=" + name, - "GIT_COMMITTER_EMAIL=" + email, - } + env := IdentityEnv(name, email) _, err := runEnv(dir, env, "merge", "--no-ff", "--quiet", "--message", message, rev) return err } diff --git a/internal/git/identity.go b/internal/git/identity.go new file mode 100644 index 0000000..0bf8a8b --- /dev/null +++ b/internal/git/identity.go @@ -0,0 +1,10 @@ +package git + +func IdentityEnv(name, email string) []string { + return []string{ + "GIT_AUTHOR_NAME=" + name, + "GIT_AUTHOR_EMAIL=" + email, + "GIT_COMMITTER_NAME=" + name, + "GIT_COMMITTER_EMAIL=" + email, + } +} diff --git a/internal/git/rename.go b/internal/git/rename.go index f84b1bc..13a84cc 100644 --- a/internal/git/rename.go +++ b/internal/git/rename.go @@ -136,7 +136,7 @@ func RewriteNotes(repo string, rewrite func(string) string) error { return err } name, email, _ := strings.Cut(who, "\n") - env := []string{"GIT_AUTHOR_NAME=" + name, "GIT_AUTHOR_EMAIL=" + email, "GIT_COMMITTER_NAME=" + name, "GIT_COMMITTER_EMAIL=" + email} + env := IdentityEnv(name, email) commit, err := runEnv(repo, env, "commit-tree", "-p", parent, "-m", "Rewrite byre ids in notes", tree) if err != nil { return err