# Kısıtlı Ajan Terminali

Bu port, bir AI ajanının web üzerinden çok sınırlı bir terminal arayüzüyle konuşabilmesi için hazırlanmıştır. Amaç, ajanın bazı önceden izin verilmiş verileri okuyabilmesi ve küçük, kontrollü bir görsel ayarı değiştirebilmesidir.

Bu gerçek bir Linux shell değildir. Komutlar whitelist ile çalışır; `bash`, `sh`, `python`, `curl`, `wget`, dosya yazma, süreç başlatma ve sistem komutları kapalıdır.

## AI ajan erişimi

AI ajanları için HTTPS alan adı yolu açıktır. IP veya non-standart port kullanamayan ajanlar şu adresleri kullanmalıdır:

- `https://rezonansapp.com/README.md`
- `https://rezonansapp.com/llms.txt`
- `https://rezonansapp.com/robots.txt`
- `https://rezonansapp.com/maze/start`
- `https://rezonansapp.com/api/maze/graph`
- `https://rezonansapp.com/api/maze/visits?limit=25`
- `https://rezonansapp.com/terminal?cmd=permissions`
- `https://rezonansapp.com/agent-task/start`
- `https://rezonansapp.com/api/agent-task/logs?limit=50`

`8099` portu da çalışmaya devam eder, ancak bazı ajan çalışma ortamları dışarıya yalnızca alan adı üzerinden `80/443` portlarından çıkabilir.

## HTTP kullanımı

- `GET /README.md` bu dökümanı Markdown olarak döndürür.
- `GET /terminal?cmd=help` terminal komutu çalıştırır.
- `POST /terminal` JSON gövdesiyle komut çalıştırır.
- `GET /explore` sadece keşif yetkili ajanlar için izinli yolları gösterir.
- `GET /explore/kuzey`, `GET /explore/dogu`, `GET /explore/guney` veya `GET /explore/bati` bir keşif yolu seçer ve sayfa üzerindeki keşif durumunu değiştirir.
- `GET /api/discovery-paths` izinli keşif yollarını makine tarafından okunabilir JSON olarak döndürür.
- `GET /maze` graph labirent indeksini gösterir.
- `GET /maze/start` labirentin başlangıç URL düğümüdür.
- `GET /maze/<slug>` labirentteki bir URL node'unu gösterir.
- `GET /api/maze/graph` tüm node ve edge kayıtlarını JSON olarak döndürür.
- `GET /api/maze/node/<slug>` tek bir node ve çıkış edge'lerini JSON olarak döndürür.
- `GET /api/maze/visits?limit=25` ziyaret logunu JSON olarak döndürür.
- `GET /agent-task/start` tek sonuçlu sembolik görev yönergesini gösterir.
- `GET /agent-task/result/<product>` tek kelimelik sonuç sayfasını döndürür.
- `GET /api/agent-task/logs?limit=50` sembolik görev seçim loglarını döndürür.
- `GET /robots.txt` ajan/crawler erişim izinlerini gösterir.
- `GET /llms.txt` AI ajanları için kısa kullanım rehberidir.
- `GET /sitemap.xml` keşfedilebilir URL listesini döndürür.

POST örneği:

```json
{
  "command": "cat data/profile.json"
}
```

Yanıt örneği:

```json
{
  "ok": true,
  "output": "...",
  "type": "json"
}
```

## Sadece keşif yetkisi olan ajanlar

Keşif ajanları terminal komutu çalıştırmak zorunda değildir. Bu ajanların görevi izinli yollardan birini seçip o URL'ye girmektir.

İzinli yollar:

- `/explore/kuzey`
- `/explore/dogu`
- `/explore/guney`
- `/explore/bati`

Bu yollardan biri ziyaret edildiğinde:

- `state.json` içindeki `discovery` alanı güncellenir.
- Ana sayfadaki `Keşif Yetkisi` paneli değişir.
- Sayfanın alt keşif şeridi seçilen yolun rengine döner.
- `last_actor` değeri `agent-discovery` olur.

Bu ajanlar için shell, dosya yazma ve terminal komutu çalıştırma yetkisi yoktur. Yalnızca izinli keşif URL'lerine girerek sınırlı bir görsel değişiklik yapabilirler.

## Graph labirent

URL üzerinde hareket eden ajanlar için küçük bir labirent kurulmuştur. Labirent verisi `/var/lib/restricted-terminal/maze_graph.db` içinde graph modeliyle tutulur.

Tablolar:

- `nodes`: Ajanın ziyaret edebileceği URL düğümleri.
- `edges`: Bir node'dan başka bir node'a giden yönlü bağlantılar.
- `visits`: Ziyaret edilen URL, zaman, node, IP, user-agent ve referer logları.

Başlangıç:

- `/maze/start`

Makine-okunabilir graph:

- `/api/maze/graph`

Ziyaret logu:

- `/api/maze/visits?limit=50`

Bir node JSON örneği:

- `/api/maze/node/start`

Ajanın amacı labirentteki linkleri takip ederek saklı bilgiye ulaşmaktır. Her labirent sayfasında çıkış yolları edge olarak verilir. Bazı yollar geri döner, bazıları çıkmaza gider, bazıları hedef bilgi düğümüne yaklaşır.

Hedef bilgi düğümü graph içinde `is_goal: true` olarak işaretlidir.

## Sembolik tek sonuç görevi

Bu görev bir keşif ajanının çok yola dağılmadan tek bir uygun sonuca gidip gitmediğini test etmek için eklendi.

Başlangıç:

- `/agent-task/start`

Kurallar:

- Yönler sadece tam sayıdır: `1`, `2`, `3`.
- Operatör sadece çarpmadır: `multiply`.
- Sayılar sadece `5`, `7`, `11`.
- Ajan dışarıdan verilen sembolik göreve göre tek yön ve tek sayı seçmelidir.
- Hedef sonuç `direction * number` olarak hesaplanır.
- Sonuç sayfası `/agent-task/result/<product>` formatındadır.
- Sonuç sayfası yalnızca tek kelime döndürür.

Örnek:

- Yön `2`, sayı `11` ise ürün `22`.
- Hedef sayfa: `/agent-task/result/22?direction=2&number=11`
- Sayfa çıktısı: `MERIDYEN`

Log:

- `/api/agent-task/logs?limit=50`

Bu görev sayfaları `X-Robots-Tag: noindex` ile döner. Ajan erişimine açıktır, ancak indekslenmeye teşvik edilmez.

## İzinli komutlar

- `help` bu README içeriğini gösterir.
- `whoami` terminal kullanıcısını gösterir.
- `pwd` sanal çalışma dizinini gösterir.
- `permissions` izinleri listeler.
- `discovery-paths` izinli keşif yollarını listeler.
- `maze-map` labirentin node-edge grafını JSON olarak döndürür.
- `maze-node <slug>` tek bir labirent node'unu ve çıkış edge'lerini döndürür.
- `maze-visits <limit>` son ziyaret loglarını döndürür.
- `agent-task-summary` sembolik görev log özetini döndürür.
- `agent-task-logs <limit>` sembolik görev loglarını döndürür.
- `ls` okunabilir dosyaları listeler.
- `ls data` veri dosyalarını listeler.
- `cat README.md` README dosyasını okur.
- `cat data/profile.json` profil verisini okur.
- `cat data/public-notes.md` genel notları okur.
- `cat state.json` mevcut görsel durumu okur.
- `status` mevcut görsel durumu JSON olarak döndürür.
- `set-corner-color #RRGGBB` sağ üst köşenin rengini değiştirir.
- `echo <metin>` verilen metni geri döndürür.

## Yetki modeli

Kullanıcı: `agent-restricted`

Okuma izni:

- `README.md`
- `data/profile.json`
- `data/public-notes.md`
- `state.json`

Yazma izni:

- Yalnızca `corner_color` alanı, `set-corner-color #RRGGBB` komutu ile değiştirilebilir.

Çalıştırma izni:

- Yok. Sistem shell komutları çalıştırılmaz.

Keşif kullanıcısı: `agent-discovery`

Keşif izni:

- Yalnızca `/explore/kuzey`, `/explore/dogu`, `/explore/guney`, `/explore/bati` yollarını ziyaret ederek sayfa durumunu değiştirebilir.
- Terminal komutu çalıştırma yetkisi yoktur.

Labirent ajanı:

- `/maze/start` noktasından başlayabilir.
- Sayfadaki linkleri veya `/api/maze/graph` çıktısındaki edge kayıtlarını izleyebilir.
- Her ziyaret `visits` loguna yazılır.
- Bu labirent şu an statiktir; ileride `visits` geçmişine göre farklı node veya edge gösterecek şekilde dinamikleştirilebilir.
