feat: Initialize Rust project with dependencies and tooling
Set up the GitLab Inbox (gi) CLI tool as a Rust 2024 edition project. Dependencies organized by purpose: - Database: rusqlite (bundled SQLite), sqlite-vec for vector search - Serialization: serde/serde_json for GitLab API responses - CLI: clap for argument parsing, dialoguer for interactive prompts, comfy-table for formatted output, indicatif for progress bars - HTTP: reqwest with tokio async runtime for GitLab API calls - Async: async-stream and futures for paginated API iteration - Utilities: thiserror for error types, chrono for timestamps, flate2 for payload compression, sha2 for content hashing - Logging: tracing with env-filter for structured debug output Release profile optimized for small binary size (LTO, strip symbols). Project structure follows standard Rust conventions with src/lib.rs exposing modules and src/main.rs as CLI entry point. Added .gitignore for Rust/Cargo artifacts and local database files. Added AGENTS.md with TDD workflow guidance and beads issue tracking integration instructions for AI-assisted development. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
46
.gitignore
vendored
Normal file
46
.gitignore
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Dependencies
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Build output
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# Test coverage
|
||||||
|
coverage/
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# OS files
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Local config files
|
||||||
|
gi.config.json
|
||||||
|
|
||||||
|
# beads
|
||||||
|
.bv/
|
||||||
|
|
||||||
|
# SQLite databases (local development)
|
||||||
|
*.db
|
||||||
|
*.db-wal
|
||||||
|
*.db-shm
|
||||||
|
|
||||||
|
|
||||||
|
# Added by cargo
|
||||||
|
|
||||||
|
/target
|
||||||
166
AGENTS.md
Normal file
166
AGENTS.md
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
# AGENTS.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## TDD Requirements
|
||||||
|
|
||||||
|
Test-first development is mandatory:
|
||||||
|
1. **RED** - Write failing test first
|
||||||
|
2. **GREEN** - Minimal implementation to pass
|
||||||
|
3. **REFACTOR** - Clean up while green
|
||||||
|
|
||||||
|
## Key Patterns
|
||||||
|
|
||||||
|
Find the simplest solution that meets all acceptance criteria.
|
||||||
|
Use third party libraries whenever there's a well-maintained, active, and widely adopted solution (for example, date-fns for TS date math)
|
||||||
|
Build extensible pieces of logic that can easily be integrated with other pieces.
|
||||||
|
DRY principles should be loosely held.
|
||||||
|
Architecture MUST be clear and well thought-out. Ask the user for clarification whenever ambiguity is discovered around architecture, or you think a better approach than planned exists.
|
||||||
|
|
||||||
|
## Beads Rust Workflow Integration
|
||||||
|
|
||||||
|
This project uses [beads_viewer](https://github.com/Dicklesworthstone/beads_viewer) for issue tracking. Issues are stored in `.beads/` and tracked in git.
|
||||||
|
|
||||||
|
### Essential Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# View issues (launches TUI - NOT FOR AGENT USE, human only)
|
||||||
|
bv
|
||||||
|
|
||||||
|
# CLI commands for agents (use --json for machine-readable output)
|
||||||
|
br ready --json # Show issues ready to work (no blockers)
|
||||||
|
br list --status=open --json # All open issues
|
||||||
|
br show <id> --json # Full issue details with dependencies
|
||||||
|
br create --title="..." --type=task --priority=2
|
||||||
|
br update <id> --status=in_progress
|
||||||
|
br close <id> --reason="Completed"
|
||||||
|
br close <id1> <id2> # Close multiple issues at once
|
||||||
|
br sync # Commit and push changes
|
||||||
|
```
|
||||||
|
|
||||||
|
### Robot Mode (Agent-Optimized bv Commands)
|
||||||
|
|
||||||
|
Use `bv --robot-*` flags for structured JSON output optimized for AI agents:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Essential robot commands
|
||||||
|
bv --robot-triage # THE MEGA-COMMAND: unified analysis, recommendations, health
|
||||||
|
bv --robot-next # Single top recommendation (minimal output)
|
||||||
|
bv --robot-plan # Dependency-respecting execution plan
|
||||||
|
bv --robot-priority # Priority recommendations with reasoning
|
||||||
|
bv --robot-insights # Deep graph analysis (PageRank, bottlenecks, etc.)
|
||||||
|
|
||||||
|
# File impact analysis (check before editing)
|
||||||
|
bv --robot-impact <file> # Risk assessment for modifying files
|
||||||
|
bv --robot-file-beads <path> # What beads have touched this file?
|
||||||
|
bv --robot-file-hotspots # High-churn files (conflict zones)
|
||||||
|
bv --robot-related <bead-id> # Find related beads
|
||||||
|
|
||||||
|
# Filtering options (work with most robot commands)
|
||||||
|
bv --robot-triage --robot-by-label=backend
|
||||||
|
bv --robot-priority --robot-min-confidence=0.7
|
||||||
|
bv --robot-insights --label=api # Scope to label subgraph
|
||||||
|
```
|
||||||
|
|
||||||
|
Run `bv -robot-help` for complete robot mode documentation.
|
||||||
|
|
||||||
|
### Workflow Pattern
|
||||||
|
|
||||||
|
1. **Start**: Run `br ready` to find actionable work
|
||||||
|
2. **Claim**: Use `br update <id> --status=in_progress`
|
||||||
|
3. **Work**: Implement the task
|
||||||
|
4. **Complete**: Use `br close <id>`
|
||||||
|
5. **Sync**: Always run `br sync` at session end
|
||||||
|
|
||||||
|
### Key Concepts
|
||||||
|
|
||||||
|
- **Dependencies**: Issues can block other issues. `br ready` shows only unblocked work.
|
||||||
|
- **Priority**: P0=critical, P1=high, P2=medium, P3=low, P4=backlog (use numbers, not words)
|
||||||
|
- **Types**: task, bug, feature, epic, question, docs
|
||||||
|
- **Blocking**: `br dep add <issue> <depends-on>` to add dependencies
|
||||||
|
|
||||||
|
### Session Protocol
|
||||||
|
|
||||||
|
**Before ending any session, run this checklist:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git status # Check what changed
|
||||||
|
git add <files> # Stage code changes
|
||||||
|
br sync # Commit beads changes
|
||||||
|
git commit -m "..." # Commit code
|
||||||
|
br sync # Commit any new beads changes
|
||||||
|
git push # Push to remote
|
||||||
|
```
|
||||||
|
|
||||||
|
### Best Practices
|
||||||
|
|
||||||
|
- Check `br ready` at session start to find available work
|
||||||
|
- Update status as you work (in_progress → closed)
|
||||||
|
- Create new issues with `br create` when you discover tasks
|
||||||
|
- Use descriptive titles and set appropriate priority/type
|
||||||
|
- Always `br sync` before ending session
|
||||||
|
|
||||||
|
<!-- end-br-agent-instructions -->
|
||||||
|
|
||||||
|
<!-- bv-agent-instructions-v1 -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beads Workflow Integration
|
||||||
|
|
||||||
|
This project uses [beads_viewer](https://github.com/Dicklesworthstone/beads_viewer) for issue tracking. Issues are stored in `.beads/` and tracked in git.
|
||||||
|
|
||||||
|
### Essential Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# View issues (launches TUI - avoid in automated sessions)
|
||||||
|
bv
|
||||||
|
|
||||||
|
# CLI commands for agents (use these instead)
|
||||||
|
bd ready # Show issues ready to work (no blockers)
|
||||||
|
bd list --status=open # All open issues
|
||||||
|
bd show <id> # Full issue details with dependencies
|
||||||
|
bd create --title="..." --type=task --priority=2
|
||||||
|
bd update <id> --status=in_progress
|
||||||
|
bd close <id> --reason="Completed"
|
||||||
|
bd close <id1> <id2> # Close multiple issues at once
|
||||||
|
bd sync # Commit and push changes
|
||||||
|
```
|
||||||
|
|
||||||
|
### Workflow Pattern
|
||||||
|
|
||||||
|
1. **Start**: Run `bd ready` to find actionable work
|
||||||
|
2. **Claim**: Use `bd update <id> --status=in_progress`
|
||||||
|
3. **Work**: Implement the task
|
||||||
|
4. **Complete**: Use `bd close <id>`
|
||||||
|
5. **Sync**: Always run `bd sync` at session end
|
||||||
|
|
||||||
|
### Key Concepts
|
||||||
|
|
||||||
|
- **Dependencies**: Issues can block other issues. `bd ready` shows only unblocked work.
|
||||||
|
- **Priority**: P0=critical, P1=high, P2=medium, P3=low, P4=backlog (use numbers, not words)
|
||||||
|
- **Types**: task, bug, feature, epic, question, docs
|
||||||
|
- **Blocking**: `bd dep add <issue> <depends-on>` to add dependencies
|
||||||
|
|
||||||
|
### Session Protocol
|
||||||
|
|
||||||
|
**Before ending any session, run this checklist:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git status # Check what changed
|
||||||
|
git add <files> # Stage code changes
|
||||||
|
bd sync # Commit beads changes
|
||||||
|
git commit -m "..." # Commit code
|
||||||
|
bd sync # Commit any new beads changes
|
||||||
|
git push # Push to remote
|
||||||
|
```
|
||||||
|
|
||||||
|
### Best Practices
|
||||||
|
|
||||||
|
- Check `bd ready` at session start to find available work
|
||||||
|
- Update status as you work (in_progress → closed)
|
||||||
|
- Create new issues with `bd create` when you discover tasks
|
||||||
|
- Use descriptive titles and set appropriate priority/type
|
||||||
|
- Always `bd sync` before ending session
|
||||||
|
|
||||||
|
<!-- end-bv-agent-instructions -->
|
||||||
2620
Cargo.lock
generated
Normal file
2620
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
60
Cargo.toml
Normal file
60
Cargo.toml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
[package]
|
||||||
|
name = "gi"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
description = "GitLab Knowledge Engine - semantic search for GitLab issues, MRs, and discussions"
|
||||||
|
authors = ["Taylor Eernisse"]
|
||||||
|
license = "MIT"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "gi"
|
||||||
|
path = "src/main.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
# Database
|
||||||
|
rusqlite = { version = "0.38", features = ["bundled"] }
|
||||||
|
sqlite-vec = "0.1"
|
||||||
|
|
||||||
|
# Serialization
|
||||||
|
serde = { version = "1", features = ["derive"] }
|
||||||
|
serde_json = "1"
|
||||||
|
|
||||||
|
# CLI
|
||||||
|
clap = { version = "4", features = ["derive"] }
|
||||||
|
dialoguer = "0.12"
|
||||||
|
console = "0.16"
|
||||||
|
indicatif = "0.18"
|
||||||
|
comfy-table = "7"
|
||||||
|
open = "5"
|
||||||
|
|
||||||
|
# HTTP
|
||||||
|
reqwest = { version = "0.12", features = ["json"] }
|
||||||
|
tokio = { version = "1", features = ["rt-multi-thread", "macros", "time"] }
|
||||||
|
|
||||||
|
# Async streaming for pagination
|
||||||
|
async-stream = "0.3"
|
||||||
|
futures = { version = "0.3", default-features = false, features = ["alloc"] }
|
||||||
|
|
||||||
|
# Utilities
|
||||||
|
thiserror = "2"
|
||||||
|
dirs = "6"
|
||||||
|
url = "2"
|
||||||
|
urlencoding = "2"
|
||||||
|
sha2 = "0.10"
|
||||||
|
flate2 = "1"
|
||||||
|
chrono = { version = "0.4", features = ["serde"] }
|
||||||
|
uuid = { version = "1", features = ["v4"] }
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
tracing = "0.1"
|
||||||
|
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||||||
|
tracing-indicatif = "0.3"
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
tempfile = "3"
|
||||||
|
wiremock = "0.6"
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
lto = true
|
||||||
|
codegen-units = 1
|
||||||
|
strip = true
|
||||||
Reference in New Issue
Block a user