feat(completion): optimize ID prefix filtering and add completions to more commands

Improvements to shell completions from PR #935:

1. Add IDPrefix field to IssueFilter for efficient database-level filtering
   - Queries are now filtered at SQL level instead of fetching all issues
   - Updated sqlite, transaction, and memory stores to support IDPrefix

2. Add ValidArgsFunction to additional commands:
   - dep (add, remove, list, tree)
   - comments, comment (add)
   - delete
   - graph
   - label (add, remove, list)
   - duplicate, supersede
   - audit
   - move
   - relate, unrelate
   - refile
   - gate (show, resolve, add-waiter)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Executed-By: beads/crew/dave
Rig: beads
Role: crew
This commit is contained in:
beads/crew/dave
2026-01-06 19:05:34 -08:00
committed by Steve Yegge
parent 025cdac962
commit 5dfb838d60
16 changed files with 59 additions and 11 deletions

View File

@@ -620,6 +620,11 @@ func (m *MemoryStorage) SearchIssues(ctx context.Context, query string, filter t
}
}
// ID prefix filtering (for shell completion)
if filter.IDPrefix != "" && !strings.HasPrefix(issue.ID, filter.IDPrefix) {
continue
}
// Parent filtering (bd-yqhh): filter children by parent issue
if filter.ParentID != nil {
isChild := false

View File

@@ -1836,6 +1836,12 @@ func (s *SQLiteStorage) SearchIssues(ctx context.Context, query string, filter t
whereClauses = append(whereClauses, fmt.Sprintf("id IN (%s)", strings.Join(placeholders, ", ")))
}
// ID prefix filtering (for shell completion)
if filter.IDPrefix != "" {
whereClauses = append(whereClauses, "id LIKE ?")
args = append(args, filter.IDPrefix+"%")
}
// Wisp filtering
if filter.Ephemeral != nil {
if *filter.Ephemeral {

View File

@@ -1181,6 +1181,12 @@ func (t *sqliteTxStorage) SearchIssues(ctx context.Context, query string, filter
whereClauses = append(whereClauses, fmt.Sprintf("id IN (%s)", strings.Join(placeholders, ", ")))
}
// ID prefix filtering (for shell completion)
if filter.IDPrefix != "" {
whereClauses = append(whereClauses, "id LIKE ?")
args = append(args, filter.IDPrefix+"%")
}
// Wisp filtering
if filter.Ephemeral != nil {
if *filter.Ephemeral {