Files

141 lines
4.6 KiB
Markdown

# Dependencies
Semua dependency dideklarasikan di `[workspace.dependencies]` dalam `Cargo.toml` root, lalu di-*inherit* oleh setiap crate anggota.
## Crate per Layer
### Domain (`apps/domain`)
Hanya boleh pakai dependency yang tidak membawa I/O:
| Crate | Versi | Fungsi |
|-------|-------|--------|
| `serde` | 1 | Serialisasi (derive) |
| `serde_json` | 1 | JSON |
| `chrono` | 0.4 | Tanggal/waktu |
| `uuid` | 1 | UUID v4/v5 |
| `anyhow` | 1 | Error handling |
| `thiserror` | 1 | Derive error types |
### Infrastructure (`apps/infrastructure`)
Semua I/O, LLM, DB, tools:
| Crate | Versi | Fungsi |
|-------|-------|--------|
| `tokio` | 1 | Async runtime (rt-multi-thread, macros, sync, time, net, io-util, signal) |
| `reqwest` | 0.13 | HTTP client (json, stream, blocking, native-tls-vendored, form) |
| `rusqlite` | 0.40 | SQLite (bundled — tidak perlu install sistem) |
| `rmcp` | 2.2 | MCP client (child-process, streamable HTTP) |
| `tiktoken-rs` | 0.12 | Token counting (OpenAI cl100k) |
| `similar` | 3 | Diff computation |
| `syntect` | 5 | Syntax highlighting (default-fancy) |
| `ignore` | 0.4 | File walking dengan `.gitignore` support |
| `globset` | 0.4 | Glob pattern matching |
| `include_dir` | 0.7 | Embed direktori ke binary |
| `infer` | 0.19 | Deteksi tipe file dari byte signature |
| `regex` | 1 | Regular expressions |
| `nucleo-matcher` | 0.3 | Fuzzy matching (untuk `@mention` autocomplete) |
| `webbrowser` | 1 | Buka URL di browser (OAuth) |
| `url` | 2 | URL parsing |
| `percent-encoding` | 2 | URL encoding |
| `dom_smoothie` | 0.18.0 | HTML DOM manipulation |
| `fast_html2md` | 0.0.62 | HTML → Markdown |
| `scraper` | 0.27.0 | HTML parsing + CSS selector |
| `pulldown-cmark` | 0.13 | Markdown parsing |
| `lsp-types` | 0.97 | LSP protocol types |
| `futures-util` | 0.3 | Async stream combinators |
| `libc` | 0.2 | Raw C FFI (Unix process groups) |
### TUI (`apps/interfaces/tui`)
| Crate | Versi | Fungsi |
|-------|-------|--------|
| `ratatui` | 0.30.2 | TUI framework |
| `crossterm` | 0.29 | Terminal manipulation (raw mode, events, mouse) |
| `base64` | 0.22 | Base64 (OSC52 clipboard) |
| `sha2` | 0.11 | SHA-256 |
| `hex` | 0.4 | Hex encoding |
| `dirs` | 6 | Platform data directory |
### API (`apps/interfaces/api`)
| Crate | Versi | Fungsi |
|-------|-------|--------|
| `axum` | 0.8 | HTTP server framework (macros) |
| `tower` | 0.5 | Middleware layer |
| `tower-http` | 0.6 | CORS, body limit |
| `argon2` | 0.5 | Password hashing |
| `jsonwebtoken` | 9 | JWT (HS256) |
| `clap` | 4 | CLI argument parsing (derive) |
| `rand_core` | 0.6 | Secure random (getrandom) |
### Serialization (semua layer)
| Crate | Versi | Fungsi |
|-------|-------|--------|
| `serde` | 1 | Framework serialisasi |
| `serde_json` | 1 | JSON |
| `serde_yaml_ng` | 0.10 | YAML (frontmatter memory files) |
## Layanan Eksternal
| Layanan | Fungsi |
|---------|--------|
| **LLM Provider** | OpenAI/Anthropic-compatible API (default: OpenCode AI / DeepSeek) |
| **MCP Servers** | Tool servers eksternal via stdio atau HTTP |
| **LSP Servers** | `rust-analyzer`, `typescript-language-server`, `pyright`, `gopls`, dll |
| **GitHub** | Release artifacts via semantic-release CI |
## Build & CI
### Compiler Lints (`Cargo.toml` workspace)
```toml
[workspace.lints.rust]
unused = "deny"
dead_code = "deny"
unreachable_code = "deny"
unused_imports = "deny"
unused_variables = "deny"
unused_mut = "deny"
unused_must_use = "deny"
deprecated = "deny"
trivial_casts = "deny"
trivial_numeric_casts = "deny"
[workspace.lints.clippy]
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -2 }
```
### Release Profile
```toml
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
panic = "abort"
strip = "symbols"
overflow-checks = true
```
### CI/CD
- **CI**: `cargo build` + `cargo test` + `cargo clippy --all-targets` pada setiap push
- **Release**: semantic-release — auto changelog, Cargo.toml version bump, GitHub artifact upload
- **Versioning**: `v1.17.0` (saat ini) — mengikuti semver dari commit messages
## Feature Flags Penting
| Crate | Feature | Alasan |
|-------|---------|--------|
| `rusqlite` | `bundled` | SQLite statically linked — tidak perlu install sistem |
| `reqwest` | `blocking` | Sync HTTP untuk agent turn di blocking thread |
| `reqwest` | `native-tls-vendored` | TLS tanpa dependency sistem |
| `tokio` | `rt-multi-thread` | Async runtime multi-thread |
| `pulldown-cmark` | *(no default)* | Tidak include semua fitur berat |
| `syntect` | `default-fancy` | Syntax highlighting penuh |
| `rmcp` | `transport-child-process` + `transport-streamable-http-client-reqwest` | MCP via stdio dan HTTP |