dev-loop, yapay zeka destekli geliştirme döngüleri kurmak için tasarlanan bir TypeScript monorepo projesidir. Amaç, bir isteği veya feature tanımını alıp planlama, kodlama, doğrulama, öğrenme, bildirim ve gözlemlenebilirlik adımlarını tek bir otomasyon çatısı altında toplayabilmektir.
Bu depo şu anda bu hedefin temel altyapı katmanlarını sağlar:
- yapılandırma dosyası okuma/yazma ve doğrulama,
- SQLite tabanlı kalıcı kayıt ve migration altyapısı,
- typed event bus,
- domain tipleri,
- token sayımı yardımcıları,
- CLI paketi,
- minimal UI server paketi,
- test, lint, typecheck, build ve paketleme kalitesi için monorepo iskeleti.
Not: Proje erken aşamadadır. CLI şu anda temel komut yüzeyini sunar; tam otomatik "feature al, planla, kodla, doğrula, commit et" akışı henüz uçtan uca ürün komutu olarak tamamlanmış değildir. Core paketi bu akış için gerekli alt yapıyı hazırlamaktadır.
- Ne işe yarar?
- Şu an neler yapabiliyor?
- Paket yapısı
- Kurulum
- Temel komutlar
- CLI kullanımı
- Core API kullanımı
- Konfigürasyon
- Veritabanı kullanımı
- UI server kullanımı
- Build ve paketleme
- Kalite kontrolleri
- Geliştirici notları
dev-loop, geliştirme sürecindeki tekrar eden karar ve doğrulama döngülerini kayıt altına alıp otomasyona bağlamak için hazırlanır. Hedeflenen kullanım modeli şudur:
- Bir feature, bug veya geliştirme isteği tanımlanır.
- Planlama modeli işi parçalara ayırır.
- Kodlama modeli değişiklikleri üretir.
- Test, lint, typecheck ve kalite kapıları çalıştırılır.
- Hatalar öğrenme kayıtlarına dönüştürülür.
- Başarılı ve başarısız loop sonuçları SQLite veritabanına yazılır.
- Bildirim, UI ve raporlama katmanları bu kayıtları görünür kılar.
Mevcut repo, bu akışın temel kütüphane ve paketleme altyapısını sağlamaktadır.
Core paketi dev-loop.yaml dosyasını okuyabilir, varsayılanlarla merge edebilir, Zod şemalarıyla doğrulayabilir ve tekrar YAML olarak kaydedebilir.
Desteklenen yapılandırma alanlarından bazıları:
planningcodingverifierfallbacklooptest_runnerquality_gatemcpcontextlearningnotificationsintegrationsgitagentsuivoiceobservability
Yapılandırma içinde ${ENV_VAR} biçiminde ortam değişkeni interpolasyonu desteklenir. Ayrıca DEV_LOOP_* ortam değişkenleriyle override uygulanabilir.
Core paketi better-sqlite3 ile SQLite bağlantısı açabilir, migration çalıştırabilir ve loop geçmişi gibi kayıtları saklamak için tablo altyapısı sağlar.
Mevcut DB alanları şunları kapsar:
- loop geçmişi,
- loop turn kayıtları,
- hata ve başarı pattern kayıtları,
- model profilleri,
- MCP kullanım ve hata kayıtları,
- kalite sonuçları,
- bildirim logları,
- ticket kayıtları,
- benchmark sonuçları.
EventBus, TypeScript ile tiplenmiş olay isimleri ve payload eşleşmeleri sunar. Örneğin:
loop:startloop:endloop:errormodel:switchmcp:errorquality:gatenotification
Yanlış event payload'ları compile-time seviyesinde yakalanacak şekilde tasarlanmıştır.
Core paketi metin, chat mesajları ve dosya içerikleri için token tahmini yapabilir. OpenAI uyumlu model adlarında tiktoken kullanmayı dener; mümkün olmazsa güvenli heuristic sayaca düşer.
@dev-loop/cli, dev-loop komutunu üretir. Şu an temel Commander yüzeyi hazırdır:
node packages/cli/dist/main.js --helpÖrnek çıktı:
Usage: dev-loop [options]
AI-powered development loop automation
Options:
-V, --version output the version number
-h, --help display help for command
@dev-loop/ui, Fastify tabanlı minimal server factory sağlar. Şu an /health endpoint'i vardır.
import { createUiServer } from '@dev-loop/ui';
const app = createUiServer();
await app.listen({ port: 3747, host: 'localhost' });Health endpoint:
curl http://localhost:3747/healthBeklenen cevap:
{ "ok": true }.
├── packages
│ ├── cli
│ │ └── src
│ ├── core
│ │ └── src
│ └── ui
│ └── src
├── package.json
├── turbo.json
├── tsconfig.base.json
├── vitest.config.ts
└── eslint.config.js
Ana kütüphane paketidir. Şunları dışa aktarır:
- config loader API'leri,
- error class'ları,
- typed event bus,
- domain tipleri,
- token sayacı yardımcıları,
- DB bağlantı, migration ve query yardımcıları.
Komut satırı paketidir. dev-loop binary entrypoint'i dist/main.js üzerinden çalışır.
Fastify tabanlı UI/server paketidir. Şu an minimal sağlık kontrolü endpoint'i sağlar.
Gereksinimler:
- Node.js
>=20 - npm
>=10
Bağımlılıkları kurmak için:
npm installTestleri çalıştır:
npm testTypeScript typecheck:
npm run typecheckLint:
npm run lintTüm paketleri derle:
npm run buildCache'i bypass ederek deterministik build:
npm run build -- --forceCoverage:
npm run test:coverageFormat:
npm run formatÖnce build alın:
npm run build -- --forceCLI yardım ekranını açın:
node packages/cli/dist/main.js --helpPaket binary tanımı:
{
"bin": {
"dev-loop": "./dist/main.js"
}
}Geliştirme sırasında workspace paketi olarak kullanılabilir:
npm --workspace @dev-loop/cli run buildimport { loadConfig } from '@dev-loop/core';
const config = await loadConfig({
projectDir: process.cwd(),
});
console.log(config.loop.max_retry);Eğer dev-loop.yaml yoksa varsayılan yapılandırma döner.
import { createDefaultConfig } from '@dev-loop/core';
const configPath = await createDefaultConfig(process.cwd());
console.log(configPath);Bu komut mevcut dosyanın üzerine yazmaz; dosya yoksa dev-loop.yaml oluşturur.
import { saveConfig } from '@dev-loop/core';
await saveConfig(process.cwd(), {
loop: {
max_retry: 3,
},
});import { EventBus } from '@dev-loop/core';
const bus = new EventBus();
const unsubscribe = bus.on('loop:end', payload => {
console.log(payload.loopId, payload.success);
});
bus.emit('loop:end', {
loopId: 'loop-1',
success: true,
});
unsubscribe();import { countTokens, countChatTokens } from '@dev-loop/core';
const textCount = await countTokens('Merhaba dünya', {
model: 'gpt-4o',
});
const chatCount = countChatTokens([
{ role: 'system', content: 'Kısa cevap ver.' },
{ role: 'user', content: 'dev-loop nedir?' },
]);
console.log({ textCount, chatCount });Örnek minimal dev-loop.yaml:
version: "1"
coding:
primary:
provider: auto
model: auto
temperature: 0.2
max_tokens: 16384
loop:
max_retry: 5
retry_delay_seconds: 2
diff_aware: true
sandbox_mode: true
ui:
port: 3747
host: localhost
open_browser: trueOrtam değişkeni interpolasyonu:
planning:
primary:
provider: anthropic
model: claude-sonnet-4-6
api_key: ${ANTHROPIC_API_KEY}Ortam değişkeni override örneği:
DEV_LOOP_CODING_PRIMARY_MAX_TOKENS=4096DB subpath export'u @dev-loop/core/db üzerinden kullanılabilir.
import {
initDatabase,
closeDatabase,
createLoop,
updateLoop,
createLoopTurn,
} from '@dev-loop/core/db';
const db = initDatabase('./dev-loop.sqlite');
const loop = await createLoop('feature-001', {
primaryModel: 'gpt-4o',
verifierModel: 'claude-sonnet-4-6',
fallbackUsed: false,
});
await createLoopTurn({
loopId: loop.id,
turnNumber: 1,
agent: 'coding',
model: 'gpt-4o',
success: true,
});
await updateLoop(loop.id, {
success: true,
});
closeDatabase();initDatabase() çağrısı migration'ları otomatik çalıştırır.
import { createUiServer } from '@dev-loop/ui';
const app = createUiServer();
await app.listen({
host: 'localhost',
port: 3747,
});Health kontrolü:
curl http://localhost:3747/healthPaketler dist altına derlenir. Build scriptleri temiz build alır; stale tsconfig.tsbuildinfo veya eksik dist dosyaları nedeniyle yeşil ama bozuk build kalmaması hedeflenir.
Core paketi runtime build için ayrı config kullanır:
packages/core/tsconfig.build.json
Bu dosya testleri production emit'ten hariç tutar.
Paket dry-run kontrolü:
npm pack --workspace @dev-loop/core --dry-run --json
npm pack --workspace @dev-loop/cli --dry-run --json
npm pack --workspace @dev-loop/ui --dry-run --jsonBeklenen:
dist/index.jsvedist/index.d.tspakete girer.src/__tests__pakete girmez.dist/__tests__pakete girmez.
Bu repoda beklenen kalite kapısı:
npm test
npm run typecheck
npm run lint
npm run build -- --force
node packages/cli/dist/main.js --help
node -e "await import('./packages/core/dist/index.js'); await import('./packages/core/dist/db/index.js'); await import('./packages/cli/dist/index.js'); await import('./packages/ui/dist/index.js'); console.log('dist imports ok')"Son doğrulama durumunda:
- testler geçiyor,
- typecheck geçiyor,
- lint warning üretmeden geçiyor,
- force build geçiyor,
- built entrypoint import smoke test geçiyor,
- package dry-run kontrolleri dist odaklı ve testlerden arınmış çıktı üretiyor.
- Testler
packages/core/src/__tests__altında yoğunlaşmıştır. BUGS/klasörü yerel bug prompt kuyruğu için kullanılır ve.gitignorekapsamındadır.KNOWLEDBASE.md, yerel modelin sonraki işlerde kullanması için karar, hata ve çözüm kayıtlarını içerir.- Build çıktıları ve
tsconfig.tsbuildinfodosyaları takip edilmez. - Yeni public API eklerken
packages/core/src/index.tsveyapackages/core/src/db/index.tsüzerinden bilinçli export yapılmalıdır. - Production build'e test artifact'i sokmamak için core tarafında
tsconfig.build.jsonkullanılmalıdır.
MIT