Implement qbit search against Voyage mock registry #27

Open
opened 2026-01-03 23:40:19 +00:00 by KofTwentyTwo · 0 comments
KofTwentyTwo commented 2026-01-03 23:40:19 +00:00 (Migrated from github.com)

Overview

Implement qbit search <query> command that searches the Voyage mock registry API for packages.

User Story

As a developer, I want to search for qbit packages by keyword so that I can discover available modules to add to my project.

Design

Command Interface

qctl qbit search <query> [--tag <tag>] [--limit <n>]

# Examples:
qctl qbit search auth
qctl qbit search --tag security
qctl qbit search data --limit 5

Output Format

@qrun/auth-sso          1.2.0   SSO authentication module
@qrun/auth-jwt          2.0.1   JWT token authentication
@qrun/auth-basic        1.0.0   Basic HTTP authentication

Voyage Mock API

Until Voyage is ready, use embedded mock data or local JSON file:

GET /v1/qbits?q={query}&tag={tag}&limit={limit}

Files to Create/Modify

  • qctl-qbit/src/main/java/io/qrun/qctl/qbit/SearchCommand.java - New command
  • qctl-qbit/src/main/java/io/qrun/qctl/qbit/registry/RegistryClient.java - API client interface
  • qctl-qbit/src/main/java/io/qrun/qctl/qbit/registry/MockRegistryClient.java - Mock implementation
  • qctl-qbit/src/main/java/io/qrun/qctl/qbit/model/PackageInfo.java - Package metadata DTO
  • qctl-qbit/src/main/resources/mock-registry.json - Mock package data
  • qctl-qbit/src/main/java/io/qrun/qctl/qbit/QbitCommand.java - Add subcommand

Implementation Tasks

  • Create PackageInfo DTO with name, version, description, tags
  • Create RegistryClient interface with search(query, tag, limit) method
  • Implement MockRegistryClient that reads from embedded JSON
  • Create SearchCommand with Picocli annotations
  • Add formatted table output with name, version, description columns
  • Register SearchCommand in QbitCommand subcommands
  • Add unit tests for search filtering logic
  • Add integration test for command execution

Acceptance Criteria

  • qbit search auth returns matching packages
  • --tag filters by package tags
  • --limit controls result count (default: 20)
  • No results shows helpful message
  • Exit code 0 on success, 5 (NOT_FOUND) on no results

Dependencies

  • None (foundational story)

Part of #11

## Overview Implement `qbit search <query>` command that searches the Voyage mock registry API for packages. ## User Story As a developer, I want to search for qbit packages by keyword so that I can discover available modules to add to my project. ## Design ### Command Interface ```bash qctl qbit search <query> [--tag <tag>] [--limit <n>] # Examples: qctl qbit search auth qctl qbit search --tag security qctl qbit search data --limit 5 ``` ### Output Format ``` @qrun/auth-sso 1.2.0 SSO authentication module @qrun/auth-jwt 2.0.1 JWT token authentication @qrun/auth-basic 1.0.0 Basic HTTP authentication ``` ### Voyage Mock API Until Voyage is ready, use embedded mock data or local JSON file: ``` GET /v1/qbits?q={query}&tag={tag}&limit={limit} ``` ### Files to Create/Modify - `qctl-qbit/src/main/java/io/qrun/qctl/qbit/SearchCommand.java` - New command - `qctl-qbit/src/main/java/io/qrun/qctl/qbit/registry/RegistryClient.java` - API client interface - `qctl-qbit/src/main/java/io/qrun/qctl/qbit/registry/MockRegistryClient.java` - Mock implementation - `qctl-qbit/src/main/java/io/qrun/qctl/qbit/model/PackageInfo.java` - Package metadata DTO - `qctl-qbit/src/main/resources/mock-registry.json` - Mock package data - `qctl-qbit/src/main/java/io/qrun/qctl/qbit/QbitCommand.java` - Add subcommand ## Implementation Tasks - [ ] Create `PackageInfo` DTO with name, version, description, tags - [ ] Create `RegistryClient` interface with `search(query, tag, limit)` method - [ ] Implement `MockRegistryClient` that reads from embedded JSON - [ ] Create `SearchCommand` with Picocli annotations - [ ] Add formatted table output with name, version, description columns - [ ] Register `SearchCommand` in `QbitCommand` subcommands - [ ] Add unit tests for search filtering logic - [ ] Add integration test for command execution ## Acceptance Criteria - [ ] `qbit search auth` returns matching packages - [ ] `--tag` filters by package tags - [ ] `--limit` controls result count (default: 20) - [ ] No results shows helpful message - [ ] Exit code 0 on success, 5 (NOT_FOUND) on no results ## Dependencies - None (foundational story) Part of #11
Sign in to join this conversation.