lastgen-cli
v1.2.3
Published
Lastgen — OpenAI uyumlu API'lere bağlanan interaktif terminal AI sohbet CLI'ı
Downloads
3,028
Readme
LASTGEN CLI
Lastgen Software CLI Project
OpenAI uyumlu (/v1/chat/completions, /v1/models) herhangi bir API'ye bağlanan
terminal yazılım geliştirme asistanı. Projenin kök dizininde açılır; sohbet ederek
kodu okur, değişikliği kendisi uygular ve derleyip test ederek doğrular.
Trello · Jira · GitHub entegrasyonları bunun üzerine gelen opsiyonel katmanlardır — asıl iş sohbetin içinde döner.
Kurumsal LiteLLM proxy, GLM z.ai, OpenAI, OpenRouter, Groq, Together, LM Studio, Ollama gibi tüm OpenAI uyumlu endpoint'lerle çalışır.
Kurulum
npm install
npm run build
npm link # global "lastgen" komutuKullanım
lastgenİlk çalıştırmada yapılandırma yoksa otomatik olarak /login akışı başlar.
Sohbetle Geliştirme (ana kullanım)
Projenin kökünde lastgen yazıp ne istediğini cümleyle söylersin:
› DriverRouteService'te sürücü listesi her istekte tekrar sorgulanıyor, önbelleğe alLastgen sırasıyla: ilgili dosyaları araçlarla okur (tahmin etmez) → değişikliği kendisi uygular → projenin gerçek test/derleme komutunu çalıştırıp doğrular (hata çıkarsa okur, düzeltir, tekrar dener — en fazla 3 kez) → ne yaptığını dosya dosya raporlar.
İki mod var (Shift+Tab veya /bypass ile geçilir):
| Mod | Davranış |
|-----|----------|
| ◆ ask before changes | Varsayılan. Her dosya yazma ve her komut, ±3 satır bağlamlı diff önizlemesiyle onayına sunulur. Onay beklerken süre sayacı durur |
| ⚡ bypass permissions on | Onay sorulmaz. Güvenlik katmanları (yol sınırı, komut whitelist'i, yedekleme) yine çalışır — yalnızca sorma kapanır |
Cevap akarak gelir: model metni ürettikçe satır satır ekrana düşer, tamamının
bitmesi beklenmez. Araç çalıştırmadan önce ▸ ile başlayan tek satırlık ilerleme
notları düşer; nihai cevap mavi bir nokta (●) ile başlar. (Headless -p modunda çıktı bilinçli olarak tek parçadır —
pipe ve CI kullanımıyla uyumlu kalsın diye.)
GitHub, Jira veya Trello'ya login olduysan sohbete doğrudan canlı veri sorabilirsin:
"açık PR'ları listele", "JIRA'da ödeme ile ilgili issue'ları bul", "şu repodaki son
issue'lar" dediğinde Lastgen gerçek API'den çekip listeler (salt-okuma). Yalnız token'ı
olan sağlayıcının araçları etkinleşir. Lastgen ayrıca kendi CLI yeteneklerinin
farkındadır — "PR'lara nasıl bakarım" gibi bir soruda uygun slash komutunu (/github)
önerir.
Web/HTML doğrulama (opsiyonel): Playwright kuruluysa Lastgen bir HTML/site
değişikliğinden sonra sayfayı gerçekten tarayıcıda açıp kontrol edebilir —
browser_navigate (URL veya proje-içi yerel dosya), browser_snapshot (içeriği okur),
browser_console (konsol/JS hatası), browser_click/browser_fill (form akışı),
browser_screenshot (.lastgen/screenshots/). Yan etkili işlemler onay akışından geçer;
salt-okuma yolları (-p, PR reviewer) tarayıcı araçlarını almaz. Etkinleştirmek için:
npm i -D playwright && npx playwright install chromium — kurulu değilse araçlar hiç
görünmez (lastgen kurulumu hafif kalır).
Kararı sana bırakır (ask_user): Belirsiz ya da geri dönüşü zor bir seçimde (bir alt
kümeye işlem uygulanacak ama hangi öğeler belirsizse, ya da ne oluşturulacağı/adı/adedi
belirtilmemişse) Lastgen kafasına göre seçmez — seçenekli bir soru açar. Tek seçimde
↵ ile seçersin; çok seçimde ↵ ile öğeleri işaretler, en alttaki belirgin "➤
Cevapları gönder" butonuyla yollarsın; ya da "Kendi cevabımı yazayım…" ile serbest
metin girersin. Cevabın ekrana ❯ Cevabın: … olarak yazılır ve ona göre devam eder. Bu,
⚡ bypass modunda da geçerlidir — bypass yalnız işlem onayını kaldırır, seçim sormayı
değil. Öneri/özet tabloları da terminalde hizalı, çerçeveli çizilir (Türkçe kaymaz).
/init ile bir kez proje bağlam belgesi (LASTGEN.md) üretirsen, sonraki her soruda
sistem promptuna eklenir ve model projeyi tanıyarak başlar. Zorunlu değildir.
Arayüz
╭──────────────────────────────────────╮
│ lastGen pixel logo │
│ LASTGEN CLI · Global / Kurumsal AI │
│ Lastgen Software CLI Project │
╰──────────────────────────────────────╯
◢ LASTGEN Merhaba! Bugün ne keşfediyoruz?
╭─────────────────────────────────╮
│ kullanıcı mesajı (beyaz balon) │
╰─────────────────────────────────╯
◢ LASTGEN · glm-5.2
Yanıt token token akar (daktilo efekti)...
↳ 312 tok · 4.1s
┄──────────────────────────────────
[1] kuyrukta bekleyen mesaj ← Ctrl+O ile genişlet/daralt
┄──────────────────────────────────
╭──────────────────────────────────────╮
│ › /trello-write-plan▌ │
╰─────────────────── total token: 1.2k╯TUI özellikleri:
| Özellik | Açıklama |
|---------|----------|
| Inline render | Alternate buffer YOK — biten çıktı terminalin kendi scrollback'ine yazılır, native fare seçimi/kopyalama/scroll çalışır. Canlı bölge (prompt kutusu) scroll-region ile alta sabitlenir; resize'da bozulmaz |
| Daktilo efekti | LASTGEN yanıtları token token yazılır (Markdown render) |
| Düşünme animasyonu | Türkçe cümleler glitch→decode efektiyle geçiş yapar |
| Scroll | Terminalin kendi scroll'u (fare tekerleği dahil) — uygulama içi tampon yok |
| Kuyruk (queue) | LASTGEN meşgulken mesajlar sıraya girer, ↑/↓ ile düzenle |
| Ctrl+O | Tool call stack'ini genişlet/daralt |
| Paste desteği | Bracketed paste — çok satırlı metin ⌗1 47 satır olarak gösterilir |
| Komut renklendirme | Bilinen komut sarı, bilinmeyen kırmızı (Enter'a basmadan yazım hatası görünür) |
| Syntax highlighting | Kod blokları VS Code Dark+ temasına yakın renklendirilir |
| Rich formatting | Dosya yolu (mavi), class (cyan), fonksiyon (yeşil), satır no (sarı) |
| Token göstergesi | Tek biçim çip (⬡ N TOKENS · ◷ süre): sohbet, write-plan ve execute-plan hem çalışırken hem tamamlandığında aynı çipi gösterir (canlı sayaç işledikçe güncellenir); sağ altta total token |
| Karşılama / veda | Açılışta logo decode animasyonu + Türkçe karşılama, CTRL+C'de veda mesajı |
| Lastgen logosu | Banner'da piksel bazlı LED dot-matrix, açılışta glitch→decode efekti |
| Ekstra bağlam | write-plan'da kart/issue seçildikten sonra "Seçilen Task" kutusu + opsiyonel ekstra bilgi girişi |
Klavye kısayolları
| Tuş | İşlev |
|-----|-------|
| Enter | Mesaj gönder |
| Ctrl+Enter | İmleç konumuna satır sonu ekle (göndermeden — çok satırlı giriş) |
| ↑ / ↓ | Girdi geçmişi · Kuyruk gezme (LASTGEN meşgulken) |
| Ctrl+← / Ctrl+→ | İmleci kelime kelime sola/sağa taşı |
| Ctrl+Delete | Sağdaki kelimeyi sil (satır sonundaysa son kelimeyi) |
| Home / End | Satır başı / sonu |
| Shift+Tab | Onay ↔ bypass modu arasında geçiş |
| Ctrl+O | Araç çağrı yığınını genişlet/daralt |
| Ctrl+C | Çalışan komutu/isteği/plan araştırmasını kes (oturum kapanmaz) · boşta ise veda + kayıt + çıkış |
Oturum Yönetimi
~/.lastgen/
├── config.json # API yapılandırması
├── current-session # Aktif oturum ID'si
└── sessions/
├── 20260618-153000-ab12.json
└── ...- Yeni oturum:
lastgenher açıldığında yeni oturum başlar - Geçiş:
/resumeile ok tuşlu seçici açılır - Silme: Session picker'da
Dtuşu
Komutlar
| Komut | Açıklama |
|-------|----------|
| /login | Endpoint türü seç (Kurumsal / Global), key gir, doğrula, kaydet |
| /models | Modelleri listele ve aktif modeli seç |
| /github · /jira · /trello | Tek sağlayıcı menüsü (argümansız çağır) — ortak kısayollar: W write-plan · X execute-plan · P planlar · L login · Ctrl+L çıkış · B gözat (github). Jira menüsünde ayrıca C — Backlog oluştur: serbest metinden house-style epic/story/subtask + link üretir, önizleme-onay sonrası Jira'ya yazar. GitHub'da PR/Branch listesinde Boşluk ile birden çok öğe işaretleyip R ile TOPLU code review (hepsini TEK BÜTÜN olarak inceler, birleşik raporu .lastgen/reviews/'a yazar). PR review artık PR açıklaması + tüm yorumları + satır-içi diff yorumlarını da değerlendirmeye katar (doğrular, körü körüne kabul etmez). Review bitince sonucu seçili tüm PR'lara aynı anda gönderebilirsin — Comment / Approve / Request changes. GitHub menüsünde Yerel Branch'ler: workspace'te repo repo gezip yerel branch değiştir (checkout) · pull · fetch · yeni branch (kirli ağaçta checkout engellenir — veri kaybı yok). Eski *-login/*-write-plan/*-execute-plan alt komutları menüye taşındı |
| /ship [ISSUE-KEY] | Uçtan uca otonom: Jira task seç → geliştir → kendi kendine code review → 🔴 Kritik / 🟡 Önemli bulgu kalırsa yeniden düzelt-review (en çok 3 tur) → temizlenince otomatik branch + commit + push + GitHub PR |
| /pulse [kaynaklar] | Bağlı entegrasyonlardan proje durumu HTML rapor deck'i üret (/pulse jira ile daralt) — .lastgen/reports/'a yazar |
| /export | Aktif oturumu .lastgen/exports/ altına Markdown olarak aktar |
| /prompt | Sistem prompt editörü |
| /config | Mevcut bağlantı ayarlarını göster |
| /clear | Ekranı temizle |
| /reset | Sohbet geçmişini sıfırla |
| /resume | Ok tuşlu seçiciyle kayıtlı oturumlar arasında geçiş yap |
| /session-delete | Eski oturumları sil |
| /help | Yardımı göster |
| /exit | Çıkış (Ctrl+C de çalışır) |
| /init | Projeyi araçlarla keşfet, LASTGEN.md bağlam belgesi üret (--force ile mevcut olanı iyileştir) |
| /agents · /agent <ad> <görev> | Alt-agent kütüphanesi ve manuel çalıştırma |
| /review | Lokal git diff'ine AI code review — klasör repo değilse alt klasördeki tüm repoları birlikte inceler |
| /undo | Son execute'un patch'lerini ters uygula |
| /compact | Uzun sohbeti LLM ile özetleyip bağlamı küçült |
| /search <kelime> | Tüm kayıtlı oturumlarda tam-içerik arama |
| /stats · /profile | Oturum/token istatistikleri · aktif config profili |
| /commands | Özel slash komutlarını listele (.lastgen/commands/*.md) |
Coding Agent Pipeline
/trello-write-plan
Trello kartını gerçek kaynak kodla analiz ederek atomik uygulama planı üretir.
1. Pano seçici (ok tuşlu) → Kart seçici (ok tuşlu)
2. Seçilen Task kutusu + ekstra bilgi promptu (opsiyonel)
3. AI araştırma: list_files + read_file ile proje incelenir
⚙ 34 araç çağrısı Ctrl+O genişlet
4. Araştırma özeti → bağlam sıkıştırma
5. JSON plan üretimi (temperature: 0.3, token limiti yok)
6. .trello_plans/{id}.json olarak kaydedilirPlan formatı (JSON):
{
"task_source": "Trello",
"task_id": "AbCdEfGh",
"title": "Görev başlığı",
"summary": "Teknik özet",
"affected_files": ["src/services/UserService.java"],
"steps": [
{
"step_number": 1,
"description": "UUID import ekle",
"target_file": "src/utils/UsernameGenerator.java",
"instructions": "generateUsername() metodunu güncelle..."
}
],
"verification_command": "mvn test"
}/trello-execute-plan
Kaydedilen planı seçip Coding Agent ile uygular.
1. Plan seçici (ok tuşlu)
2. Onay
3. Agent döngüsü:
- Her adım: read_file → apply_patch → run_command (test)
- Test başarısızsa: hata analiz → yeni patch → tekrar test
- Döngü sonu: verification_command otomatik çalıştırılır
4. Tüm çıktılar TUI transcript'e yazılırGüvenlik:
- Yalnızca proje dizini içindeki dosyalara erişim (path traversal, sürücü kaçışı ve symlink çıkışı reddedilir)
- İzinli komutlar ekosistemden bağımsız: Python, JS/TS (npm · yarn · pnpm · bun · deno), Go, Rust, JVM, .NET, Ruby, PHP, Elixir, Dart/Flutter, Swift, Zig, CMake, Haskell/Scala/Clojure ve genel koşucular (make · just · task).
npxvego runreddedilir;dotnet/dart/mvn/gradleyalnızca derleme-test hedefleriyle geçer; shell operatörleri (;|>`$() yasak — yalnızca&&zinciri - Sunucu/izleme (watch) modunda çalışan komutlar reddedilir — bitmezler ve arayüz donmuş görünür
- Her
apply_patch.{timestamp}.bakyedek oluşturur; yalnızca tek benzersiz eşleşme değiştirilir - Çalışan komut
Ctrl+Cile süreç ağacıyla birlikte kesilir; mutlak tavan 10 dk - Onay soracak arayüzü olmayan yollar (
lastgen -p, PR Reviewer) salt-okuma araç setiyle çalışır - Beklenmedik bir çökmede terminal eski hâline döndürülür, neden
~/.lastgen/crash.log'a yazılır
Headless Kullanım (script / CI)
TUI açılmadan çalışır; sonuç stdout'a, ilerleme stderr'e gider, çıkış kodu 0/1 döner.
lastgen -p "bu serviste hangi cache stratejisi var?" # tek soru — SALT-OKUMA
cat hata.log | lastgen -p "bu stack trace'i açıkla" # boru ile besleme
lastgen review owner/repo#77 --output review.md --post # GitHub PR incelemesi
lastgen review # lokal git diff incelemesi
lastgen commit-msg | git commit -F - # commit mesajı üret
lastgen doctor # config/LLM/GitHub/Jira/Trello teşhisi
-psalt-okumadır. Onay soracak bir arayüz olmadığı için dosya yazma (apply_patch/create_file) ve komut çalıştırma (run_command) araçları bu modda kapalıdır; model ne yapılması gerektiğini anlatır, uygulamaz. Aynı kural PR Reviewer için de geçerlidir.
Endpoint Türleri
| Tür | Açıklama |
|-----|----------|
| Kurumsal | Endpoint elle girilir, verifySsl/caBundlePath desteklenir |
| Global (GLM z.ai) | https://api.z.ai/api/coding/paas/v4 sabit, sadece API key istenir |
Yapılandırma
~/.lastgen/config.json:
{
"provider": "external",
"baseUrl": "https://api.z.ai/api/coding/paas/v4",
"apiKey": "<Z_AI_API_KEY>",
"model": "glm-5.2",
"maxContextTokens": 128000,
"trelloKey": "<TRELLO_APP_KEY>",
"trelloToken": "<TRELLO_USER_TOKEN>",
"trelloBoardId": "<BOARD_ID>",
"trelloBoardName": "My Board",
"jiraBaseUrl": "https://jira.sirket.com",
"jiraToken": "<JIRA_PAT>"
}maxContextTokens — modele gönderilecek bağlamın üst sınırı (token).
Belirtilmezse 128000. Geçmiş bu bütçeye göre kırpılır; en yeni mesajlar korunur.
Token ekonomisi (sohbet + write/execute-plan): Her model çağrısı, biriken TÜM bağlamı değil karakter-bütçeli kayan pencereyi gönderir (sohbet 64k, execute 24k, plan 40k) → karesel token büyümesi kırılır. Bir dosya düzenlenince o dosyanın önceki read_file çıktıları kısa bir stub'a indirilir (bayat koca içerik yeniden gönderilmez). Promptlar büyük dosyada tam okuma yerine grep → start_line/end_line bölge okumasını söyler. Uzun sohbet geçmişi bağlam bütçesinin %65'ini aşınca turdan önce otomatik yapılandırılmış özete indirilir.
Ortam Değişkenleri
| Değişken | Açıklama |
|----------|----------|
| LASTGEN_CONFIG_DIR | Yapılandırma dizini (varsayılan: ~/.lastgen) |
| LASTGEN_NO_TUI | 1 → TUI devre dışı, klasik readline modu |
| LASTGEN_KEYLOG | 1 → giriş tuşlarının ham baytlarını ~/.lastgen/keylog.txt'ye yazar (tuş dizisi tanısı; üretimde kapalı) |
Geliştirme
npm test # Vitest birim testleri + tsc --noEmit (786 test)
npm run lint # ESLint (flat config) — 0 error zorunlu
npm run eval # Prompt değerlendirme (gerçek modele gider, CI'da koşmaz)
# --tekrar 3 önerilir; tek koşu yanıltıcıdır
npm run typecheck # Yalnızca TypeScript tip kontrolü
npm run build # dist/ çıktısı (tsup, ESM)CI (.github/workflows/ci.yml) her push ve pull request'te Node 18 · 20 · 22
matrisinde npm ci → lint → build → test çalıştırır.
Minimum Node sürümü 18.17 (AbortSignal.any bu sürümde geldi).
Proje yapısı:
src/
├── index.ts # Giriş noktası, arg yönlendirme, temiz çıkış (drain)
├── repl.ts # Klasik readline modu (TUI açılamazsa)
├── tui.ts # Ana TUI — pinned scroll-region inline render
├── live-render.ts # Çerçeve üreticileri (saf): buildPinnedLiveFrame
├── terminal.ts # Terminal geri yükleme + çökme yakalayıcıları
├── tui-format.ts # tui.ts'ten ayrılan saf biçimlendirme
├── tui-status.ts # Durum satırı / kota göstergesi (saf)
├── diff-preview.ts # Onay kutusu diff önizlemesi (saf)
│
├── agent-loop.ts # Sohbet turu + execute döngüsü + callModel (streaming)
├── agent-plan.ts # Write-plan: araştırma, JSON plan üretimi
├── agent-tools.ts # list_files, read_file, apply_patch, run_command, güvenlik
├── agent-init.ts # /init — LASTGEN.md proje bağlamı üretimi
├── subagent.ts # İzole alt-agent döngüsü
├── agents.ts # Alt-agent tanımları (.md frontmatter)
├── todos.ts # Görev adımı paneli (saf)
│
├── chat-context.ts # Bağlam kurma + token bütçeli kırpma (saf)
├── tokens.ts # Token tahmini — tek kaynak
├── stack-detect.ts # Test komutu tespiti (16 ekosistem)
├── edit-journal.ts # Sohbet değişiklik defteri (/undo)
├── eval/ # Prompt değerlendirme senaryoları ve koşucusu
├── compaction.ts # /compact — geçmiş özetleme
├── command-registry.ts # Slash komut tanımları — tek kaynak
├── commands.ts # Komut dağıtımı + agent fonksiyonları
├── custom-commands.ts # Kullanıcı tanımlı slash komutları
│
├── api.ts # OpenAI uyumlu streaming + tool calling
├── http.ts # Ortak taşıma: retry, Retry-After, TLS
├── stream-accumulate.ts # SSE delta birleştirme (saf)
│
├── github.ts # GitHub REST (PR, branch, issue, review)
├── pr-review.ts # PR/branch code review motoru (salt-okuma)
├── git-local.ts # Lokal git diff, /review, /commit-msg
├── jira.ts # Jira REST + pano/issue seçici
├── trello.ts # Trello API + kart/pano seçici
│
├── headless.ts # -p / review / commit-msg / doctor
├── sessions.ts # Oturum kayıt/yükleme/arama
├── session-picker.ts # Ok tuşlu oturum seçici
├── config.ts # Yapılandırma + profiller
├── providers.ts # Endpoint preset sistemi
├── markdown.ts # Markdown→ANSI + syntax highlighting
├── rich-format.ts # Terminal rich formatting
├── ui.ts # Renkler, animasyon, banner, seçici
└── context.ts # Proje dosyası tarayıcı
scripts/
└── png-to-blocks.mjs # PNG → terminal half-block dönüştürücüLisans
MIT
