The instruction is added for Codex Desktop whenever this computer has an AITURK command that can send work (aiturk is); no separate switch, no bridge.json entry. The bridge fills in the chat id; the command runs in Codex's own folder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
103 lines
4.8 KiB
Python
103 lines
4.8 KiB
Python
"""Codex IDE'ye "is kucuk degilse AITURK yapacak" talimati (11 Ekim 2026).
|
||
|
||
Kullanici karari: Codex Baglama acikken talimat Codex IDE'nin (masaustu uygulamasi) gordugu sistem talimatinda durur;
|
||
Codex CLI talimati hic gormez, varligindan haberi olmaz. Karari secili model verir; kucuk modellerin yanilmasi kabul
|
||
edilir, ayri bir yazilimla onune gecilmez.
|
||
|
||
Bu yuzden talimat hicbir dosyaya yazilmaz (AGENTS.md'yi CLI da okur): kopru, yalniz masaustu uygulamasindan gelen
|
||
isteklere, istek gecerken ekler. Istemci `originator` basligindan ayirt edilir (olcum 11 Ekim 2026: masaustu
|
||
"Codex Desktop", etkilesimli CLI "codex-tui", `codex exec` "codex_exec").
|
||
|
||
Hat, Codex Baglama'nin parcasidir: ayri bir dugmesi yoktur, bu bilgisayarda isi gonderebilen bir AITURK komutu
|
||
(`aiturk is`) bulundugu surece aciktir. Komut yoksa talimat eklenmez: gonderme yolu olmayan bir "AITURK'e gonder"
|
||
talimati modeli yaniltir. Ayar (bridge.json, istege bagli): "aiturk_hat": {"enabled": false} kapatir;
|
||
{"komut": "..."} komutu elle verir; {"talimat": "..."} metni degistirir.
|
||
"""
|
||
import os
|
||
import shutil
|
||
import subprocess
|
||
|
||
MASAUSTU = {"codex desktop"}
|
||
ISARET = "[AITURK iş hattı]"
|
||
VARSAYILAN = (
|
||
ISARET + " Bu Codex, AITURK'e bağlı. Şu kurala göre çalış:\n"
|
||
"1. Basit soruyu, bilgi isteğini ya da tek küçük düzeltmeyi kendin yap.\n"
|
||
"2. Kullanıcı \"sen yap\" derse işi kendin yap.\n"
|
||
"3. İş küçük değilse (birden çok dosya, birkaç adım, yeni özellik, araştırma gerektiren iş) kendin yapma. "
|
||
"İşin tam metnini (kullanıcının isteği ve gereken bağlam) UTF-8 bir dosyaya yaz, işi şu komutla AITURK'e gönder, "
|
||
"bitmesini bekle ve sonucu kullanıcıya kısaca aktar:\n{komut}\n"
|
||
"Komut \"işi sen yap\" derse ya da hata verirse işi kendin yap. Emin değilsen işi küçük say ve kendin yap."
|
||
)
|
||
|
||
|
||
def masaustu_mu(originator):
|
||
return str(originator or "").strip().lower() in MASAUSTU
|
||
|
||
|
||
def adaylar(ortam=None):
|
||
"""Isi gonderebilecek AITURK komutu adaylari, oncelik sirasiyla (kurulu AITURK, PATH, hat deneme kurulumu)."""
|
||
ortam = os.environ if ortam is None else ortam
|
||
yerel = ortam.get("LOCALAPPDATA") or ""
|
||
liste = []
|
||
if yerel:
|
||
liste.append(os.path.join(yerel, "TurkServis", "AITURK", "program", "bin", "aiturk.cmd"))
|
||
bulunan = shutil.which("aiturk")
|
||
if bulunan:
|
||
liste.append(bulunan)
|
||
if yerel:
|
||
liste.append(os.path.join(yerel, "TurkServis", "AITURK-is-hatti", "Scripts", "aiturk.exe"))
|
||
return [y for i, y in enumerate(liste) if y and y not in liste[:i]]
|
||
|
||
|
||
def destekliyor(yol, calistir=subprocess.run):
|
||
"""Bu AITURK `is` komutunu taniyor mu? (Eski surumler tanimaz: "No such command 'is'.")"""
|
||
if not os.path.isfile(yol):
|
||
return False
|
||
try:
|
||
sonuc = calistir([yol, "is", "--help"], capture_output=True, timeout=40, cwd=os.path.dirname(yol),
|
||
creationflags=getattr(subprocess, "CREATE_NO_WINDOW", 0))
|
||
return sonuc.returncode == 0
|
||
except Exception:
|
||
return False
|
||
|
||
|
||
def komut_bul(ortam=None, destek=destekliyor):
|
||
"""Isi gonderebilen ilk AITURK komutunun yolu; yoksa None."""
|
||
for yol in adaylar(ortam):
|
||
if destek(yol):
|
||
return yol
|
||
return None
|
||
|
||
|
||
def komut_satiri(yol, sohbet=""):
|
||
"""Modelin calistiracagi hazir satir. Sohbet kimligi kopruden gelir (sohbetler karismasin); klasor verilmez:
|
||
komut Codex'in o anki klasorunde calisir, AITURK de isi ayni klasorde yapar."""
|
||
sohbet = "".join(c for c in str(sohbet or "") if c.isalnum() or c in "-_")
|
||
return f'"{yol}" is' + (f" --sohbet {sohbet}" if sohbet else "") + ' --dosya "<iş metnini yazdığın dosya>"'
|
||
|
||
|
||
def talimat(ayar, bulunan=None, sohbet=""):
|
||
"""Eklenecek metin; hat kapaliysa ya da gonderme komutu yoksa None.
|
||
bulunan: bu bilgisayarda bulunan AITURK komutunun yolu (komut_bul); ayardaki "komut" onun onune gecer."""
|
||
ayar = ayar if isinstance(ayar, dict) else {}
|
||
if ayar.get("enabled") is False:
|
||
return None
|
||
komut = str(ayar.get("komut") or "").strip() or (komut_satiri(bulunan, sohbet) if bulunan else "")
|
||
if not komut:
|
||
return None
|
||
return str(ayar.get("talimat") or VARSAYILAN).replace("{komut}", komut)
|
||
|
||
|
||
def ekle(req, metin):
|
||
"""Talimati istegin basina developer mesaji olarak koyar. True: eklendi (zaten varsa eklenmez)."""
|
||
girdi = req.get("input")
|
||
if not metin or not isinstance(girdi, list):
|
||
return False
|
||
for oge in girdi[:3]:
|
||
icerik = oge.get("content") if isinstance(oge, dict) else None
|
||
yazi = icerik if isinstance(icerik, str) else " ".join(str(p.get("text") or "") for p in icerik or [] if isinstance(p, dict))
|
||
if ISARET in yazi:
|
||
return False
|
||
girdi.insert(0, {"type": "message", "role": "developer", "content": [{"type": "input_text", "text": metin}]})
|
||
return True
|