feat(workspace): session-scoped Caller.Holder + ReleaseByHolder for ACP integration

This commit is contained in:
2026-05-07 14:21:00 +08:00
parent 9fc96b0a1a
commit 3e50da4a49
6 changed files with 91 additions and 4 deletions
+42
View File
@@ -282,6 +282,48 @@ func (q *Queries) MarkPruneWarning(ctx context.Context, id pgtype.UUID) error {
return err
}
const releaseWorktreesByHolder = `-- name: ReleaseWorktreesByHolder :many
UPDATE workspace_worktrees
SET status = 'idle',
active_holder = NULL,
acquired_at = NULL,
last_used_at = now(),
prune_warning_at = NULL
WHERE active_holder = $1 AND status = 'active'
RETURNING id, workspace_id, branch, path, status, active_holder, acquired_at, last_used_at, created_at, prune_warning_at
`
func (q *Queries) ReleaseWorktreesByHolder(ctx context.Context, activeHolder *string) ([]WorkspaceWorktree, error) {
rows, err := q.db.Query(ctx, releaseWorktreesByHolder, activeHolder)
if err != nil {
return nil, err
}
defer rows.Close()
var items []WorkspaceWorktree
for rows.Next() {
var i WorkspaceWorktree
if err := rows.Scan(
&i.ID,
&i.WorkspaceID,
&i.Branch,
&i.Path,
&i.Status,
&i.ActiveHolder,
&i.AcquiredAt,
&i.LastUsedAt,
&i.CreatedAt,
&i.PruneWarningAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const setWorktreeActive = `-- name: SetWorktreeActive :one
UPDATE workspace_worktrees
SET status = 'active',