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:
Taylor Eernisse
2026-01-26 11:27:30 -05:00
parent e846a39ce6
commit e065862f81
4 changed files with 2892 additions and 0 deletions

60
Cargo.toml Normal file
View 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