perf(tmux): batch session queries in gt down (#477)
* perf(tmux): batch session queries in gt down to reduce N+1 subprocess calls Add SessionSet type to tmux package for O(1) session existence checks. Instead of calling HasSession() (which spawns a subprocess) for each rig/session during shutdown, now calls ListSessions() once and uses in-memory map lookups. Changes: - internal/tmux/tmux.go: Add SessionSet type with GetSessionSet() and Has() - internal/cmd/down.go: Use SessionSet for dry-run checks and session stops - internal/session/town.go: Add StopTownSessionWithCache() variant - internal/tmux/tmux_test.go: Add test for SessionSet With 5 rigs, this reduces subprocess calls from ~15 to 1 during shutdown preview, saving 60-150ms of execution time. Closes: gt-xh2bh Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * perf(tmux): optimize SessionSet to avoid intermediate slice allocation - Build map directly from tmux output instead of calling ListSessions() - Use strings.IndexByte for efficient newline parsing - Pre-size map using newline count to avoid rehashing - Simplify nil checks in Has() and Names() * fix(sling): restore bd cook directory context for formula-on-bead mode The bd cook command needs to run from the target rig's directory to access the correct formula database. This was accidentally removed in a previous commit, causing TestSlingFormulaOnBeadRoutesBDCommandsToTargetRig to fail. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -380,8 +380,9 @@ func runSling(cmd *cobra.Command, args []string) error {
|
||||
formulaWorkDir := beads.ResolveHookDir(townRoot, beadID, hookWorkDir)
|
||||
|
||||
// Step 1: Cook the formula (ensures proto exists)
|
||||
// Cook doesn't need database context - runs from cwd like gt formula show
|
||||
// Cook runs from rig directory to access the correct formula database
|
||||
cookCmd := exec.Command("bd", "--no-daemon", "cook", formulaName)
|
||||
cookCmd.Dir = formulaWorkDir
|
||||
cookCmd.Stderr = os.Stderr
|
||||
if err := cookCmd.Run(); err != nil {
|
||||
return fmt.Errorf("cooking formula %s: %w", formulaName, err)
|
||||
|
||||
Reference in New Issue
Block a user