@takimcizgisi/ajan 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +227 -0
- package/README.md +324 -0
- package/config/models.json +50 -0
- package/out/ajan-engine.js +8306 -0
- package/package.json +84 -0
- package/src/client/client.ts +289 -0
- package/src/config/configManager.ts +300 -0
- package/src/config/types.ts +139 -0
- package/src/core/agent.ts +379 -0
- package/src/daemon/gpu.ts +54 -0
- package/src/daemon/main.ts +87 -0
- package/src/daemon/runner.ts +261 -0
- package/src/daemon/server.ts +231 -0
- package/src/engine/llama.ts +329 -0
- package/src/engine/modelManager.ts +84 -0
- package/src/index.ts +63 -0
- package/src/protocol/channel.ts +151 -0
- package/src/protocol/messages.ts +138 -0
- package/src/service.ts +410 -0
- package/src/tools/data.ts +101 -0
- package/src/tools/edit.ts +54 -0
- package/src/tools/file.ts +261 -0
- package/src/tools/filesys.ts +70 -0
- package/src/tools/memory.ts +76 -0
- package/src/tools/patch.ts +138 -0
- package/src/tools/playground.ts +130 -0
- package/src/tools/registry.ts +79 -0
- package/src/tools/taskComplete.ts +34 -0
- package/src/tools/terminal.ts +138 -0
- package/src/tools/utils.ts +63 -0
- package/src/tools/web.ts +204 -0
- package/src/utils/paths.ts +80 -0
- package/src/utils/projectContext.ts +23 -0
- package/src/utils/sessions.ts +91 -0
- package/src/version.ts +4 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
License-Identifier: LicenseRef-TakimCizgisi-LSH-1.0
|
|
2
|
+
|
|
3
|
+
▀█▀ ▄▀█ █▄▀ █ █▀▄▀█ █▀▀ █ ▀█ █▀▀ █ █▀ █
|
|
4
|
+
░█░ █▀█ █░█ █ █░▀░█ █▄▄ █ █▄ █▄█ █ ▄█ █
|
|
5
|
+
Limited Source Human License (LSH-1)
|
|
6
|
+
|
|
7
|
+
Sürüm: 1.0
|
|
8
|
+
Yayın Tarihi: 2026
|
|
9
|
+
Lisans Türü: Kaynak Erişimli Topluluk Lisansı
|
|
10
|
+
|
|
11
|
+
Hazırlayan:
|
|
12
|
+
TakımÇizgisi Yazılım Geliştirme Grubu ve Topluluğu
|
|
13
|
+
|
|
14
|
+
Telif Sahibi:
|
|
15
|
+
TakımÇizgisi Yazılım Geliştirme Grubu ve Topluluğu
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
======================================================================
|
|
19
|
+
TELİF VE LİSANS BİLDİRİMİ
|
|
20
|
+
======================================================================
|
|
21
|
+
|
|
22
|
+
Copyright (c) 2026 TakımÇizgisi Yazılım Geliştirme Grubu ve Topluluğu
|
|
23
|
+
|
|
24
|
+
Bu yazılım, kaynak kodları, belgeleri, yapılandırma dosyaları,
|
|
25
|
+
görsel içerikleri, yardımcı araçları ve ilişkili tüm bileşenleri
|
|
26
|
+
TakımÇizgisi LSH-1 Lisansı kapsamında korunmaktadır.
|
|
27
|
+
|
|
28
|
+
Bu yazılımın kullanılması, kopyalanması, incelenmesi,
|
|
29
|
+
değiştirilmesi veya dağıtılması yalnızca bu lisans şartlarının
|
|
30
|
+
kabul edilmesi ve uygulanması koşuluyla mümkündür.
|
|
31
|
+
|
|
32
|
+
Bu lisans kapsamında açıkça izin verilmeyen tüm haklar
|
|
33
|
+
TakımÇizgisi Yazılım Geliştirme Grubu ve Topluluğu tarafından
|
|
34
|
+
saklı tutulmaktadır.
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
======================================================================
|
|
38
|
+
TAKIMÇİZGİSİ HAKKINDA
|
|
39
|
+
======================================================================
|
|
40
|
+
|
|
41
|
+
TakımÇizgisi Yazılım Geliştirme Grubu ve Topluluğu;
|
|
42
|
+
|
|
43
|
+
açık kaynak yazılım geliştirme, teknoloji üretimi,
|
|
44
|
+
topluluk tabanlı yazılım geliştirme ve geliştirici
|
|
45
|
+
iş birlikleri üzerine çalışan bağımsız bir teknoloji
|
|
46
|
+
topluluğudur.
|
|
47
|
+
|
|
48
|
+
TakımÇizgisi'nin amacı:
|
|
49
|
+
|
|
50
|
+
- Açık kaynak projeler geliştirmek,
|
|
51
|
+
- Yazılım bilgisini paylaşmak,
|
|
52
|
+
- Geliştiricilerin birlikte üretmesini sağlamak,
|
|
53
|
+
- Eğitim ve araştırmayı desteklemek,
|
|
54
|
+
- Topluluk odaklı yazılım kültürünü geliştirmektir.
|
|
55
|
+
|
|
56
|
+
Resmi Web:
|
|
57
|
+
https://takimcizgisi.rf.gd/
|
|
58
|
+
|
|
59
|
+
GitHub:
|
|
60
|
+
https://github.com/TakimCizgisi
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
======================================================================
|
|
64
|
+
1. LİSANSIN AMACI
|
|
65
|
+
======================================================================
|
|
66
|
+
|
|
67
|
+
TakımÇizgisi Limited Source Human License (LSH-1), TakımÇizgisi
|
|
68
|
+
tarafından geliştirilen yazılımların kaynak kod erişimini sağlamak,
|
|
69
|
+
bireysel kullanım ve eğitim faaliyetlerini desteklemek,
|
|
70
|
+
topluluk katkılarını teşvik etmek ve yazılım projelerinin
|
|
71
|
+
izinsiz ticari kullanımını sınırlandırmak amacıyla hazırlanmıştır.
|
|
72
|
+
|
|
73
|
+
LSH-1 aşağıdaki ilkeleri temel alır:
|
|
74
|
+
|
|
75
|
+
- Kaynak kod şeffaflığı.
|
|
76
|
+
- Bireysel kullanım özgürlüğü.
|
|
77
|
+
- Eğitim ve araştırma desteği.
|
|
78
|
+
- Topluluk geliştirmesi.
|
|
79
|
+
- Geliştirici emeğinin korunması.
|
|
80
|
+
- Ticari kullanım kontrolü.
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
======================================================================
|
|
84
|
+
2. LİSANS KULLANIM ALANI
|
|
85
|
+
======================================================================
|
|
86
|
+
|
|
87
|
+
LSH-1 yalnızca aşağıdaki projelerde kullanılabilir:
|
|
88
|
+
|
|
89
|
+
- TakımÇizgisi tarafından geliştirilen projeler,
|
|
90
|
+
- TakımÇizgisi üyeleri tarafından geliştirilen projeler,
|
|
91
|
+
- TakımÇizgisi topluluğu içerisinde geliştirilen projeler,
|
|
92
|
+
- TakımÇizgisi tarafından açıkça LSH-1 ile yayımlanan yazılımlar.
|
|
93
|
+
|
|
94
|
+
LSH-1 lisansı, TakımÇizgisi'nin yazılı izni olmadan başka
|
|
95
|
+
kişi veya kuruluşlar tarafından yeni projelerde kullanılamaz.
|
|
96
|
+
|
|
97
|
+
Bu lisans:
|
|
98
|
+
|
|
99
|
+
- başka bir lisans olarak yeniden yayımlanamaz,
|
|
100
|
+
- adı değiştirilemez,
|
|
101
|
+
- TakımÇizgisi dışında sahiplenilemez.
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
======================================================================
|
|
105
|
+
3. KULLANICI HAKLARI
|
|
106
|
+
======================================================================
|
|
107
|
+
|
|
108
|
+
Bu lisans şartlarını kabul eden kullanıcı:
|
|
109
|
+
|
|
110
|
+
- Kaynak kodu inceleyebilir.
|
|
111
|
+
- Yazılımı öğrenme amacıyla analiz edebilir.
|
|
112
|
+
- Kişisel cihazlarında kullanabilir.
|
|
113
|
+
- Kişisel projelerinde çalıştırabilir.
|
|
114
|
+
- Hata düzeltmeleri ve geliştirmeler yapabilir.
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
======================================================================
|
|
118
|
+
4. TİCARİ KULLANIM SINIRLAMALARI
|
|
119
|
+
======================================================================
|
|
120
|
+
|
|
121
|
+
TakımÇizgisi'nin yazılı izni olmadan:
|
|
122
|
+
|
|
123
|
+
- Yazılım satılamaz.
|
|
124
|
+
- Ücretli paket olarak sunulamaz.
|
|
125
|
+
- Ticari SaaS hizmetlerinde kullanılamaz.
|
|
126
|
+
- Ücretli API hizmetlerine dahil edilemez.
|
|
127
|
+
- Kapalı kaynak ticari ürünlere eklenemez.
|
|
128
|
+
- Gelir sağlayan hizmetlerde kullanılamaz.
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
======================================================================
|
|
132
|
+
5. ATIF ZORUNLULUĞU
|
|
133
|
+
======================================================================
|
|
134
|
+
|
|
135
|
+
Dağıtılan yazılımlarda aşağıdaki ifade korunmalıdır:
|
|
136
|
+
|
|
137
|
+
"Bu yazılım TakımÇizgisi Yazılım Geliştirme Grubu ve Topluluğu
|
|
138
|
+
tarafından geliştirilmiş veya temel alınmıştır."
|
|
139
|
+
|
|
140
|
+
Bu bildirim:
|
|
141
|
+
|
|
142
|
+
- silinemez,
|
|
143
|
+
- değiştirilemez,
|
|
144
|
+
- gizlenemez.
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
======================================================================
|
|
148
|
+
6. MARKA VE TEMSİL
|
|
149
|
+
======================================================================
|
|
150
|
+
|
|
151
|
+
LSH-1 aşağıdaki hakları vermez:
|
|
152
|
+
|
|
153
|
+
- TakımÇizgisi adını kullanma,
|
|
154
|
+
- TakımÇizgisi logosunu kullanma,
|
|
155
|
+
- Resmi temsilci olma,
|
|
156
|
+
- Ortaklık açıklaması yapma.
|
|
157
|
+
|
|
158
|
+
Kullanıcı kendisini TakımÇizgisi adına yetkili olarak
|
|
159
|
+
gösteremez.
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
======================================================================
|
|
163
|
+
7. LİSANS İHLALİ
|
|
164
|
+
======================================================================
|
|
165
|
+
|
|
166
|
+
Aşağıdaki durumlar ihlal kabul edilir:
|
|
167
|
+
|
|
168
|
+
- İzinsiz ticari kullanım.
|
|
169
|
+
- Telif bilgilerinin kaldırılması.
|
|
170
|
+
- Lisans dosyasının değiştirilmesi.
|
|
171
|
+
- TakımÇizgisi kimliğinin gizlenmesi.
|
|
172
|
+
- LSH-1'in izinsiz kullanılması.
|
|
173
|
+
|
|
174
|
+
İhlal halinde verilen kullanım hakları sona erebilir.
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
======================================================================
|
|
178
|
+
8. GARANTİ REDDİ
|
|
179
|
+
======================================================================
|
|
180
|
+
|
|
181
|
+
Yazılım "OLDUĞU GİBİ" sunulmaktadır.
|
|
182
|
+
|
|
183
|
+
TakımÇizgisi:
|
|
184
|
+
|
|
185
|
+
- hatasız çalışma,
|
|
186
|
+
- kesintisiz hizmet,
|
|
187
|
+
- donanım uyumluluğu,
|
|
188
|
+
- güvenlik garantisi
|
|
189
|
+
|
|
190
|
+
vermez.
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
======================================================================
|
|
194
|
+
9. SON HÜKÜM
|
|
195
|
+
======================================================================
|
|
196
|
+
|
|
197
|
+
Yazılımı kullanan kişi:
|
|
198
|
+
|
|
199
|
+
- lisansı okuduğunu,
|
|
200
|
+
- şartlarını anladığını,
|
|
201
|
+
- kullanım koşullarını kabul ettiğini
|
|
202
|
+
|
|
203
|
+
beyan eder.
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
======================================================================
|
|
207
|
+
TAKIMÇİZGİSİ LSH-1
|
|
208
|
+
|
|
209
|
+
Limited Source Human License
|
|
210
|
+
|
|
211
|
+
Version 1.0 - 2026
|
|
212
|
+
|
|
213
|
+
Hazırlayan:
|
|
214
|
+
TakımÇizgisi Yazılım Geliştirme Grubu ve Topluluğu
|
|
215
|
+
|
|
216
|
+
Copyright (c) 2026
|
|
217
|
+
|
|
218
|
+
License Identifier:
|
|
219
|
+
LicenseRef-TakimCizgisi-LSH-1.0
|
|
220
|
+
|
|
221
|
+
Resmi Kaynak:
|
|
222
|
+
https://takimcizgisi.rf.gd/
|
|
223
|
+
|
|
224
|
+
GitHub:
|
|
225
|
+
https://github.com/TakimCizgisi
|
|
226
|
+
|
|
227
|
+
======================================================================
|
package/README.md
ADDED
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# AJAN AI
|
|
2
|
+
|
|
3
|
+
> **Otonom, yerel AI kodlama ajanı** — TakımÇizgisi LSH Yazılım Geliştirme Grubu ve Topluluğu
|
|
4
|
+
>
|
|
5
|
+
> Sürüm 0.5.0 — **Amber Apricot**
|
|
6
|
+
|
|
7
|
+
AJAN, görevleri bağımsız olarak **planlayan**, **kod yazan**, **test eden** ve **sonuçları doğrulayan** bir yapay zekâ ajanıdır. Tamamen yerel çalışır: model bilgisayarınızda koşar, dosyalar cihazınızdan çıkmaz.
|
|
8
|
+
|
|
9
|
+
AJAN bir **motordur** (daemon). Arayüz, panel veya eklenti yoktur. Motor bir IPC kanalı üzerinden dinler; onunla konuşan istemci ne olursa olsun sonucu kendi yüzeyinde gösterir. Yapay zekâ motoru **node-llama-cpp**'dir ve hedefi **CUDA**'dır.
|
|
10
|
+
|
|
11
|
+
> **Neden yerel?** Bulut ajanlarının aksine AJAN hiçbir koda, yapılandırmaya veya sohbete dışarıdan erişim vermez. Model indirilir ve tüm işlemler tamamen offline yürütülür.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## İçindekiler
|
|
16
|
+
|
|
17
|
+
- [Mimari](#mimari)
|
|
18
|
+
- [Kurulum](#kurulum)
|
|
19
|
+
- [Motoru çalıştırma](#motoru-çalıştırma)
|
|
20
|
+
- [İstemci kullanımı](#istemci-kullanımı)
|
|
21
|
+
- [IPC protokolü](#ipc-protokolü)
|
|
22
|
+
- [Özellikler](#özellikler)
|
|
23
|
+
- [Araçlar](#araçlar)
|
|
24
|
+
- [Modeller](#modeller)
|
|
25
|
+
- [GPU](#gpu)
|
|
26
|
+
- [Yapılandırma](#yapılandırma)
|
|
27
|
+
- [Veri dizini](#veri-dizini)
|
|
28
|
+
- [Geliştirme](#geliştirme)
|
|
29
|
+
- [Sorun giderme](#sorun-giderme)
|
|
30
|
+
- [Lisans](#lisans)
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Mimari
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
┌──────────────┐ ┌──────────────────────────────┐
|
|
38
|
+
│ istemci uyg │ ─IPC─▶ │ ajan-engine (daemon) │
|
|
39
|
+
│ (herhangi) │ ◀───── │ ├─ AjanService (tek örnek) │
|
|
40
|
+
└──────────────┘ olay │ ├─ AjanAgent (tek model) │
|
|
41
|
+
│ └─ LlamaEngine (CUDA) │
|
|
42
|
+
└──────────────────────────────┘
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- **Tek motor süreci.** Model belleği paylaşılan bir kaynaktır; her istemci aynı modeli kullanır, her sohbet motoru yeniden başlatmaz.
|
|
46
|
+
- **Tek çalışma kuyruğu.** Modele dokunan işlemler (sohbet, model kurma, config değişimi) sırayla yürütülür. Durum okuyan istekler kuyruğu atlar.
|
|
47
|
+
- **Olay akışı.** Sohbet çıktısı yalnızca soran istemciye gider; iki istemci birbirinin metnini görmez. Model yükleme ilerlemesi herkese açıktır.
|
|
48
|
+
|
|
49
|
+
## Kurulum
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm install -g @takimcizgisi/ajan
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Bu, `ajan-engine` motorunu kurar. Motor **yalnızca CUDA ve Vulkan** kullanır ve ikisini sırayla dener: önce CUDA, olmazsa Vulkan. İkisi de kullanılamıyorsa motor hata fırlatır — sessizce CPU'ya düşmez. Kurulumdan sonra hangisinin çalıştığını doğrulamak için:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npm run check:gpu
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Motor tek dosya olarak paketlenir (`out/ajan-engine.js`). İstemci olarak `AjanEngine` sınıfını içe aktarırsınız:
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
import { AjanEngine } from "@takimcizgisi/ajan/client";
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Motoru çalıştırma
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx ajan-engine
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Seçenekler:
|
|
74
|
+
|
|
75
|
+
| Seçenek | Açıklama |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `-C, --cwd <yol>` | Ajanın çalışma dizini (varsayılan: bulunulan dizin) |
|
|
78
|
+
| `--socket <yol>` | Dinlenecek socket (varsayılan: `\\.\pipe\ajan-engine`, POSIX'te `$XDG_RUNTIME_DIR/ajan-engine.sock`) |
|
|
79
|
+
| `--log-level <seviye>` | `debug` \| `info` \| `warn` \| `error` |
|
|
80
|
+
| `-h, --help` | Yardım |
|
|
81
|
+
|
|
82
|
+
Motor başladığında tek satır yazar ve dinlemeye başlar:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
AJAN motoru hazır ajan=0.5.0 socket=\\.\pipe\ajan-engine cwd=D:\proje
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
`Ctrl+C` motoru düzgünce kapatır. Uzun süre arka planda çalışacaksa `detached` olarak başlatıp logları `getLogDir()` altına yazdırın.
|
|
89
|
+
|
|
90
|
+
## İstemci kullanımı
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
import { AjanEngine } from "@takimcizgisi/ajan/client";
|
|
94
|
+
|
|
95
|
+
const engine = await AjanEngine.connect(); // özel yol: connect("\\.\pipe\ajan-engine")
|
|
96
|
+
|
|
97
|
+
// Tek seferlik soru — yanıt akış halinde gelir
|
|
98
|
+
const cevap = await engine.ask("bu klasördeki tüm testleri çalıştır", {
|
|
99
|
+
onText: (t) => process.stdout.write(t),
|
|
100
|
+
onThinking: (t) => process.stderr.write(t),
|
|
101
|
+
onToolCall: (name, args) => console.log("→", name, args),
|
|
102
|
+
onToolResult: (name, ok) => console.log(ok ? "✔" : "✖", name)
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// Durum
|
|
106
|
+
const s = await engine.status();
|
|
107
|
+
console.log(s.modelName, s.gpu.active, `${s.gpu.layers} katman`, `${s.gpu.vramMb} MB`);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Öne çıkan metotlar:
|
|
111
|
+
|
|
112
|
+
| Metot | Açıklama |
|
|
113
|
+
|---|---|
|
|
114
|
+
| `ping()` | Motor sürümü ve protokol uyumu (`PROTOCOL_VERSION`) |
|
|
115
|
+
| `status()` | Model, GPU, bağlam, istemci sayısı, uptime |
|
|
116
|
+
| `getGpu()` | Yalnız GPU raporu |
|
|
117
|
+
| `ask(text, opts)` | Sohbet; akış + araç olayları, döner: tam yanıt |
|
|
118
|
+
| `abort()`` | Devam eden görevi iptal et |
|
|
119
|
+
| `newChat()` | Konuşma geçmişini temizle (model yüklü kalır) |
|
|
120
|
+
| `listModels()` / `installModel(id)` / `removeModel(id)` / `useModel(id)` | Model yönetimi |
|
|
121
|
+
| `refreshModels()` | Kataloğu uzak kaynaktan yenile |
|
|
122
|
+
| `getHistory()` / `listSessions()` / `loadSession(id)` / `saveSession(s)` / `deleteSession(id)` | Oturum yönetimi |
|
|
123
|
+
| `shutdown()` | Motoru kapat |
|
|
124
|
+
|
|
125
|
+
Olaylara abone olmak için `engine.on(...)` ve `engine.onClose(...)` kullanılabilir.
|
|
126
|
+
|
|
127
|
+
Motor çalışmıyorsa `AjanEngine.connect` anlaşılır bir hata verir (`socket yok` / `yanıt vermiyor`); `start` komutuyla başlatın.
|
|
128
|
+
|
|
129
|
+
## IPC protokolü
|
|
130
|
+
|
|
131
|
+
- Taşıma: Windows'ta **named pipe** (`\\.\pipe\ajan-engine`), POSIX'te **Unix domain socket**.
|
|
132
|
+
- Çerçeveleme: **newline-delimited JSON** — her mesaj tek satır. Uzun yazılar (diff, patch) satır sınırlarından bağımsız birleştirilir.
|
|
133
|
+
- Sürüm: `PROTOCOL_VERSION` (şu an `1`). Uyumsuzlukta `AjanEngine.assertCompatible()` hata verir; motoru yeniden başlatın.
|
|
134
|
+
|
|
135
|
+
Bir istek `{ id, req }`, bir yanıt `{ id, ok, result }` veya `{ id, ok:false, error }` şeklindedir. Olaylar `{ event, ... }` taşır ve `id` içermez.
|
|
136
|
+
|
|
137
|
+
İstekler: `ping`, `status`, `set-config`, `list-models`, `install-model`, `remove-model`, `use-model`, `refresh-models`, `chat`, `abort`, `new-chat`, `get-history`, `list-sessions`, `load-session`, `save-session`, `delete-session`, `shutdown`.
|
|
138
|
+
|
|
139
|
+
Olaylar: `text-chunk`, `thinking-chunk`, `tool-call`, `tool-result`, `step-start`, `step-end`, `load-progress`, `load-complete`, `error`, `complete`.
|
|
140
|
+
|
|
141
|
+
## Özellikler
|
|
142
|
+
|
|
143
|
+
- **Otonom görev döngüsü.** Model araç çağrısı yapar, sonuçları okur, adımları kendi ilerletir; `task_complete` ile turu kapatır.
|
|
144
|
+
- **Gerçek akıl yürütme akışı.** Gemma modellerinde `reasoning: true` ile düşünme segmentleri `thinking-chunk` olarak yayınlanır; Qwen'de `thoughts` modu `reasoning` ayarına göre `discourage`/`auto` seçilir.
|
|
145
|
+
- **Araçlar.** Dosya sistemi, kabuk, arama, veri okuma, diff/patch uygulama, `fetch_url`, oyun alanı (playground) ve oturum araçları.
|
|
146
|
+
- **Patch desteği.** Birleşik diff ayrıştırılır ve dosyaya güvenli biçimde uygulanır.
|
|
147
|
+
- **Güvenlik sınırları.** `cwd` dışına yazma engellenir; silme işlemleri izlenebilir loglanır.
|
|
148
|
+
- **Oturumlar.** Sohbet geçmişi diske yazılır, listelenir, geri yüklenir.
|
|
149
|
+
- **Model kataloğu.** Uzak kaynaktan (`config/models.json` gösterge dosyasından) yenilenebilir.
|
|
150
|
+
|
|
151
|
+
## Araçlar
|
|
152
|
+
|
|
153
|
+
| Araç | İşlev |
|
|
154
|
+
|---|---|
|
|
155
|
+
| `read_file`, `write_file`, `edit_file`, `delete_file` | Dosya okuma/yazma/düzenleme/silme |
|
|
156
|
+
| `list_files`, `search_files`, `read_data` | Dizin tarama, içerik arama, JSON/YAML okuma |
|
|
157
|
+
| `run_command` | Kabuk komutu |
|
|
158
|
+
| `apply_patch` | Birleşik diff uygulama |
|
|
159
|
+
| `unzip_file` | Arşiv açma |
|
|
160
|
+
| `fetch_url` | URL içeriği çekme |
|
|
161
|
+
| `open_playground`, `task_complete` | Etkileşimli oyun alanı ve tur kapanışı |
|
|
162
|
+
|
|
163
|
+
## Modeller
|
|
164
|
+
|
|
165
|
+
Katalog `config/models.json` içinde tanımlıdır; her model `contextSize: "auto"` ve `gpuLayers: "auto"` taşır, yani motor config'deki değerleri kullanır.
|
|
166
|
+
|
|
167
|
+
| id | Ad | Not |
|
|
168
|
+
|---|---|---|
|
|
169
|
+
| `gemma-4-e2b-q4-k-m` | Gemma 4 E2B (Q4_K_M) | Varsayılan, düşünme açık |
|
|
170
|
+
| `gemma-4-e2b-q8` | Gemma 4 E2B (Q8_0) | Daha yüksek kalite, daha çok RAM |
|
|
171
|
+
| `gemma-3-4b-it-q4-k-m` | Gemma 3 4B Instruct (Q4_K_M) | Alternatif |
|
|
172
|
+
| `qwen-3-4b-instruct-q4-k-m` | Qwen3 4B Instruct (Q4_K_M) | Güçlü tool calling |
|
|
173
|
+
|
|
174
|
+
Model kurma:
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
await engine.installModel("gemma-4-e2b-q4-k-m");
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Kurulum `getModelsDir()` altına indirir ve ilerleme `load-progress` olayıyla bildirilir. Kurulu model `active` olarak işaretlenmeden sohbet başlatmak "Model tanımlı değil" hatası verir.
|
|
181
|
+
|
|
182
|
+
## GPU
|
|
183
|
+
|
|
184
|
+
Motor **yalnızca CUDA ve Vulkan** kullanır. Bu ikisi dışında bir arka uç yoktur (Metal, WebGPU ve saf CPU seçeneği kaldırılmıştır).
|
|
185
|
+
|
|
186
|
+
### Arka uç zinciri
|
|
187
|
+
|
|
188
|
+
Motor sırayla dener ve **ilk çalışanı** kullanır:
|
|
189
|
+
|
|
190
|
+
| `config.gpu` | Denenen sıra |
|
|
191
|
+
|---|---|
|
|
192
|
+
| `auto` (varsayılan) | `auto` → node-llama-cpp kendi çözümlemesi (önce CUDA, olmazsa Vulkan) |
|
|
193
|
+
| `cuda` | `cuda` → `vulkan` → `auto` |
|
|
194
|
+
| `vulkan` | `vulkan` → `auto` |
|
|
195
|
+
|
|
196
|
+
- Her başarısız deneme gerekçesiyle loglanır.
|
|
197
|
+
- Zincirin tamamı tutarsa **hata fırlatılır**; motor sessizce CPU'ya düşmez. Sessiz yavaşlama, ilk sürümdeki en büyük sorundu.
|
|
198
|
+
- `gpuLayers` varsayılanı `max` — tüm katmanlar GPU'ya gider.
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
npm run check:gpu
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Bu komut `config.gpu`'yu gösterir, sürücü desteğini listeler ve CUDA ile Vulkan'ı **gerçekten yükleyerek** hangisinin çalıştığını raporlar. Model yüklenmeden katman aktarımı açılıp açılmadığı görülür.
|
|
205
|
+
|
|
206
|
+
### Raporlanan alanlar
|
|
207
|
+
|
|
208
|
+
| Alan | Anlam |
|
|
209
|
+
|---|---|
|
|
210
|
+
| `gpu.active` | Gerçekte yüklenen arka uç (`cuda` \| `vulkan`) veya `"yüklenmedi"` |
|
|
211
|
+
| `gpu.offload` | Katman aktarımı açık mı |
|
|
212
|
+
| `gpu.layers` | GPU'ya yüklenen katman sayısı (0 = henüz yüklenmedi) |
|
|
213
|
+
| `gpu.vramMb` | Kullanılabilen GPU belleği |
|
|
214
|
+
| `gpu.supported` | Bu makinede sürücüsü bulunan arka uçlar |
|
|
215
|
+
| `gpu.preferred` | `config.gpu` değeri |
|
|
216
|
+
| `gpu.fallback` | İstenen arka uç kullanılamayıp diğerine düşüldü mü |
|
|
217
|
+
|
|
218
|
+
> **Önemli ayrım:** "makine CUDA'yı destekliyor" ile "motor CUDA'da çalışıyor" aynı şey değildir. `nvidia-smi` CUDA sürücüsünü gösterebilir ama node-llama-cpp'nin prebuilt CUDA ikilisi uyumsuz olabilir; bu durumda `getLlama({gpu:"cuda"})` hata fırlatır ve motor bir sonraki adaya geçer. `gpu.active` yalnızca `Llama.gpu`'dan okunur, `supported` listesinden değil.
|
|
219
|
+
|
|
220
|
+
### Bu makinedeki durum (RTX 5070 Laptop)
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
sürücü destekli : vulkan
|
|
224
|
+
uyumlu olabilir : cuda, vulkan
|
|
225
|
+
|
|
226
|
+
cuda -> KULLANILAMIYOR (No prebuilt binaries found)
|
|
227
|
+
vulkan -> vulkan katman aktarimi: acik
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
CUDA sürücüsü kurulu (`nvidia-smi` CUDA 13.4 gösteriyor) ancak node-llama-cpp 3.21.1'in prebuilt CUDA ikilisi bu sistemde `testBindingBinary` aşamasında eleniyor. İki olası sebep: RTX 5070'in Blackwell mimarisi (sm_120) sürümdeki CUDA ikilisinde bulunmuyor ya da sistemde çakışan bir CUDA kurulumu var. Motor bu yüzden **Vulkan** ile çalışır — aynı GPU, aynı VRAM, aynı katman aktarımı; yalnızca CUDA'ya göre biraz daha yavaş.
|
|
231
|
+
|
|
232
|
+
CUDA'nın açılması için node-llama-cpp'nin bu kartı kapsayan bir sürümüne yükseltilmesi gerekir. Bunu doğrulamak için:
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
npm run check:gpu
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Yapılandırma
|
|
239
|
+
|
|
240
|
+
`getConfigPath()` altındaki `config.json`:
|
|
241
|
+
|
|
242
|
+
```jsonc
|
|
243
|
+
{
|
|
244
|
+
"modelId": "gemma-4-e2b-q4-k-m",
|
|
245
|
+
"contextSize": 8192, // 128K yerine; KV cache belleği tüketip ilk tokeni geciktiriyor
|
|
246
|
+
"gpuLayers": "max", // "max" = tüm katmanlar; sayı = o kadar katman
|
|
247
|
+
"gpu": "auto", // auto | cuda | vulkan
|
|
248
|
+
"session": { "temperature": 0.6, "topK": 64, "topP": 0.9, "maxTokens": 2048 }
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
`gpu` yalnız `auto`, `cuda` veya `vulkan` olabilir. Ayrıntı için [GPU](#gpu) bölümü.
|
|
253
|
+
|
|
254
|
+
Çalışma zamanında değiştirmek için `set-config` isteği gönderilir (`patch` nesnesi mevcut config ile birleştirilir). `modelOverrides` ile model bazında `temperature`, `maxTokens` gibi değerler geçilebilir.
|
|
255
|
+
|
|
256
|
+
## Veri dizini
|
|
257
|
+
|
|
258
|
+
`getDataDir()` (varsayılan `~/.ajan`):
|
|
259
|
+
|
|
260
|
+
| Yol | İçerik |
|
|
261
|
+
|---|---|
|
|
262
|
+
| `models/` | İndirilen GGUF dosyaları |
|
|
263
|
+
| `config.json` | Ayarlar |
|
|
264
|
+
| `sessions/` | Kayıtlı oturumlar |
|
|
265
|
+
| `logs/` | `engine.log`, `engine.err.log` |
|
|
266
|
+
|
|
267
|
+
## Geliştirme
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
npm install
|
|
271
|
+
npm run typecheck # tsc --noEmit
|
|
272
|
+
npm run build # out/ajan-engine.js
|
|
273
|
+
npm run watch # yeniden derleme
|
|
274
|
+
npm run clean
|
|
275
|
+
npm run test:tools # araç testleri
|
|
276
|
+
npm run test:new # yeni araç testleri
|
|
277
|
+
npm run test:ipc # IPC uçtan uca testi
|
|
278
|
+
npm run check:gpu # CUDA/Vulkan yükleme denemesi
|
|
279
|
+
npm run daemon # derlenmiş motoru çalıştır
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Kaynak düzeni:
|
|
283
|
+
|
|
284
|
+
| Yol | İşlev |
|
|
285
|
+
|---|---|
|
|
286
|
+
| `src/daemon/` | Motor: `main`, `server`, `runner`, `gpu` |
|
|
287
|
+
| `src/protocol/` | Sözleşme ve kanal (`messages.ts`, `channel.ts`) |
|
|
288
|
+
| `src/client/` | `AjanEngine` istemcisi |
|
|
289
|
+
| `src/service.ts` | UI'dan bağımsız servis katmanı |
|
|
290
|
+
| `src/core/agent.ts` | Ajan döngüsü, araç kullanımı, olaylar |
|
|
291
|
+
| `src/engine/` | `LlamaEngine` ve model yöneticisi |
|
|
292
|
+
| `src/tools/` | Araç kayıt defteri ve uygulamaları |
|
|
293
|
+
| `src/config/` | Config yöneticisi ve tipler |
|
|
294
|
+
|
|
295
|
+
## Sorun giderme
|
|
296
|
+
|
|
297
|
+
**"AJAN motoru çalışmıyor (socket yok)"**
|
|
298
|
+
Motor ayakta değil. `npx ajan-engine` ile başlatın.
|
|
299
|
+
|
|
300
|
+
**EADDRINUSE / "motor zaten çalışıyor"**
|
|
301
|
+
Önceki motor süreci hâlâ dinliyor. `shutdown` isteği gönderin veya süreci sonlandırıp tekrar başlatın.
|
|
302
|
+
|
|
303
|
+
**`gpu.preferred = "cuda"` ama `gpu.active = "cpu"`**
|
|
304
|
+
Sürücü yok ya da CUDA native paketi kurulu değil. Sürücüyü kurup paketin doğru platform ikilisini içerdiğini doğrulayın.
|
|
305
|
+
|
|
306
|
+
**"Model tanımlı değil: <id>"**
|
|
307
|
+
Model kurulmamış. `installModel(id)` çağırın veya `listModels()` ile katalogdaki id'yi kontrol edin.
|
|
308
|
+
|
|
309
|
+
**Bağlantı açılıp kapanıyor (POSIX)**
|
|
310
|
+
Sahipsiz socket dosyası kalmış olabilir. Motor başlarken temizler; çalışan başka motor varsa dokunmaz.
|
|
311
|
+
|
|
312
|
+
**Protokol uyuşmazlığı**
|
|
313
|
+
`ajan` ve motor farklı sürümde. Motoru yeniden başlatın.
|
|
314
|
+
|
|
315
|
+
**Uzun süren ilk yanıt**
|
|
316
|
+
Model yükleme ve VRAM taşıma süresidir; `load-progress` olaylarıyla ilerleme raporlanır. `contextSize` çok büyükse bellek baskısı token üretimini yavaşlatır.
|
|
317
|
+
|
|
318
|
+
## Lisans
|
|
319
|
+
|
|
320
|
+
**Limited Source Human License (LSH-1)** — Sürüm 1.0
|
|
321
|
+
SPDX tanımlayıcısı: `LicenseRef-TakimCizgisi-LSH-1.0`
|
|
322
|
+
|
|
323
|
+
Telif sahibi: TakımÇizgisi Yazılım Geliştirme Grubu ve Topluluğu (2026).
|
|
324
|
+
Ayrıntılar için [LICENSE](LICENSE).
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://takimcizgisi.dev/schemas/ajan-models.json",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"source": "https://raw.githubusercontent.com/takimcizgisi/ajan/Project/config/models.json",
|
|
5
|
+
"models": [
|
|
6
|
+
{
|
|
7
|
+
"id": "gemma-4-e2b-q4-k-m",
|
|
8
|
+
"name": "Gemma 4 E2B (Q4_K_M)",
|
|
9
|
+
"description": "Ana model: 4-bit sıkıştırılmış, ~3-4GB RAM, uzun bağlam (panelden ayarlanır)",
|
|
10
|
+
"uri": "hf:unsloth/gemma-4-E2B-it-GGUF/gemma-4-E2B-it-Q4_K_M.gguf",
|
|
11
|
+
"fileName": "gemma-4-E2B-it-Q4_K_M.gguf",
|
|
12
|
+
"contextSize": "auto",
|
|
13
|
+
"gpuLayers": "auto",
|
|
14
|
+
"chatWrapper": "gemma4",
|
|
15
|
+
"reasoning": true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "gemma-4-e2b-q8",
|
|
19
|
+
"name": "Gemma 4 E2B (Q8_0)",
|
|
20
|
+
"description": "Daha yüksek kalite, daha fazla RAM (~5-8GB)",
|
|
21
|
+
"uri": "hf:unsloth/gemma-4-E2B-it-GGUF/gemma-4-E2B-it-Q8_0.gguf",
|
|
22
|
+
"fileName": "gemma-4-E2B-it-Q8_0.gguf",
|
|
23
|
+
"contextSize": "auto",
|
|
24
|
+
"gpuLayers": "auto",
|
|
25
|
+
"chatWrapper": "gemma4",
|
|
26
|
+
"reasoning": true
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "gemma-3-4b-it-q4-k-m",
|
|
30
|
+
"name": "Gemma 3 4B Instruct (Q4_K_M)",
|
|
31
|
+
"description": "Alternatif: çoklu mod destekli, orta boy",
|
|
32
|
+
"uri": "hf:unsloth/gemma-3-4b-it-GGUF:Q4_K_M",
|
|
33
|
+
"fileName": "gemma-3-4b-it-Q4_K_M.gguf",
|
|
34
|
+
"contextSize": "auto",
|
|
35
|
+
"gpuLayers": "auto",
|
|
36
|
+
"chatWrapper": "gemma"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "qwen-3-4b-instruct-q4-k-m",
|
|
40
|
+
"name": "Qwen3 4B Instruct (Q4_K_M)",
|
|
41
|
+
"description": "Alternatif: güçlü tool calling desteği",
|
|
42
|
+
"uri": "hf:unsloth/Qwen3-4B-GGUF/Qwen3-4B-Q4_K_M.gguf",
|
|
43
|
+
"fileName": "Qwen3-4B-Q4_K_M.gguf",
|
|
44
|
+
"contextSize": "auto",
|
|
45
|
+
"gpuLayers": "auto",
|
|
46
|
+
"chatWrapper": "qwen3",
|
|
47
|
+
"reasoning": false
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
}
|