2026-07-16 07:42:03 +07:00
|
|
|
# Dependencies
|
|
|
|
|
|
2026-07-20 13:59:37 +07:00
|
|
|
Semua dependency dideklarasikan di `[workspace.dependencies]` dalam `Cargo.toml` root, lalu di-*inherit* oleh setiap crate anggota.
|
2026-07-16 07:42:03 +07:00
|
|
|
|
2026-07-20 13:59:37 +07:00
|
|
|
## Crate per Layer
|
2026-07-16 07:42:03 +07:00
|
|
|
|
2026-07-20 13:59:37 +07:00
|
|
|
### 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) |
|
2026-07-16 07:42:03 +07:00
|
|
|
| `rmcp` | 2.2 | MCP client (child-process, streamable HTTP) |
|
2026-07-20 13:59:37 +07:00
|
|
|
| `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) |
|
2026-07-16 07:42:03 +07:00
|
|
|
| `url` | 2 | URL parsing |
|
|
|
|
|
| `percent-encoding` | 2 | URL encoding |
|
|
|
|
|
| `dom_smoothie` | 0.18.0 | HTML DOM manipulation |
|
2026-07-20 13:59:37 +07:00
|
|
|
| `fast_html2md` | 0.0.62 | HTML → Markdown |
|
|
|
|
|
| `scraper` | 0.27.0 | HTML parsing + CSS selector |
|
|
|
|
|
| `pulldown-cmark` | 0.13 | Markdown parsing |
|
2026-07-16 07:42:03 +07:00
|
|
|
| `lsp-types` | 0.97 | LSP protocol types |
|
|
|
|
|
| `futures-util` | 0.3 | Async stream combinators |
|
2026-07-20 13:59:37 +07:00
|
|
|
| `libc` | 0.2 | Raw C FFI (Unix process groups) |
|
2026-07-16 07:42:03 +07:00
|
|
|
|
2026-07-20 13:59:37 +07:00
|
|
|
### TUI (`apps/interfaces/tui`)
|
2026-07-16 07:42:03 +07:00
|
|
|
|
2026-07-20 13:59:37 +07:00
|
|
|
| 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 |
|
2026-07-16 07:42:03 +07:00
|
|
|
| **GitHub** | Release artifacts via semantic-release CI |
|
|
|
|
|
|
2026-07-20 13:59:37 +07:00
|
|
|
## Build & CI
|
2026-07-16 07:42:03 +07:00
|
|
|
|
2026-07-20 13:59:37 +07:00
|
|
|
### 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 }
|
|
|
|
|
```
|
2026-07-16 07:42:03 +07:00
|
|
|
|
|
|
|
|
### Release Profile
|
2026-07-20 13:59:37 +07:00
|
|
|
|
|
|
|
|
```toml
|
|
|
|
|
[profile.release]
|
|
|
|
|
opt-level = 3
|
|
|
|
|
lto = "fat"
|
|
|
|
|
codegen-units = 1
|
|
|
|
|
panic = "abort"
|
|
|
|
|
strip = "symbols"
|
|
|
|
|
overflow-checks = true
|
|
|
|
|
```
|
2026-07-16 07:42:03 +07:00
|
|
|
|
|
|
|
|
### CI/CD
|
2026-07-20 13:59:37 +07:00
|
|
|
|
|
|
|
|
- **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 |
|