@akredit/acik-mcp 0.1.0 → 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/README.md +94 -8
- package/dist/apps/acik-mcp/src/araclar.d.ts +2 -28
- package/dist/apps/acik-mcp/src/araclar.js +29 -114
- package/dist/apps/acik-mcp/src/bologna.d.ts +291 -0
- package/dist/apps/acik-mcp/src/bologna.js +1693 -0
- package/dist/apps/acik-mcp/src/genel-ayristir.d.ts +92 -0
- package/dist/apps/acik-mcp/src/genel-ayristir.js +489 -0
- package/dist/apps/acik-mcp/src/http.d.ts +31 -3
- package/dist/apps/acik-mcp/src/http.js +90 -17
- package/dist/apps/acik-mcp/src/index.d.ts +7 -0
- package/dist/apps/acik-mcp/src/index.js +7 -0
- package/dist/apps/acik-mcp/src/kaynak-dogrula.d.ts +94 -0
- package/dist/apps/acik-mcp/src/kaynak-dogrula.js +460 -0
- package/dist/apps/acik-mcp/src/kaynak.d.ts +72 -0
- package/dist/apps/acik-mcp/src/kaynak.js +155 -0
- package/dist/apps/acik-mcp/src/kisisel-veri.d.ts +16 -2
- package/dist/apps/acik-mcp/src/kisisel-veri.js +78 -15
- package/dist/apps/acik-mcp/src/not-tablosu.d.ts +39 -0
- package/dist/apps/acik-mcp/src/not-tablosu.js +268 -0
- package/dist/apps/acik-mcp/src/promptlar.d.ts +48 -0
- package/dist/apps/acik-mcp/src/promptlar.js +323 -0
- package/dist/apps/acik-mcp/src/sunucu.d.ts +12 -4
- package/dist/apps/acik-mcp/src/sunucu.js +108 -24
- package/dist/apps/acik-mcp/src/temel.d.ts +59 -0
- package/dist/apps/acik-mcp/src/temel.js +10 -0
- package/dist/apps/acik-mcp/src/yardim.d.ts +56 -0
- package/dist/apps/acik-mcp/src/yardim.js +381 -0
- package/dist/packages/baglayicilar/src/bologna-proliz/ayristir.d.ts +29 -0
- package/dist/packages/baglayicilar/src/bologna-proliz/ayristir.js +200 -0
- package/dist/packages/cekirdek/src/bologna/taslak.d.ts +19 -3
- package/dist/packages/cekirdek/src/bologna/taslak.js +70 -9
- package/dist/packages/cekirdek/src/turler.d.ts +8 -0
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -1,24 +1,110 @@
|
|
|
1
1
|
# @akredit/acik-mcp
|
|
2
2
|
|
|
3
|
-
Yükseköğretimde kalite güvencesi ve akreditasyon işleri için herkese açık MCP sunucusu. Kendi yapay zekâ aracınıza (Claude, Claude Code, Cursor, VS Code) bağlanır ve
|
|
3
|
+
Yükseköğretimde kalite güvencesi ve akreditasyon işleri için herkese açık, ücretsiz MCP sunucusu. Kendi yapay zekâ aracınıza (Claude, ChatGPT, Claude Code, Cursor, VS Code) bağlanır; hazır başlangıçlar (istemler) ve on sekiz araç verir.
|
|
4
|
+
|
|
5
|
+
İlke: süreci sıfır kullanıcı müdahalesiyle, hızlıca ama denetimli ve teyitli tamamlamak. Akredit özgür yazılımdır; halüsinasyona yer yoktur.
|
|
6
|
+
|
|
7
|
+
## İlk 2 dakika
|
|
8
|
+
|
|
9
|
+
1. Asistanınıza `https://akredit.org/mcp` adresini ekleyin (aşağıda "Bağlantı") ya da yerelde `npx -y @akredit/acik-mcp` çalıştırın.
|
|
10
|
+
2. Yeni sohbette `akredit` yazın ya da hazır başlangıçlardan `akredit` komutunu seçin. Claude'da "+" altında Akredit, Cursor ve Claude Code'da eğik çizgi (/) ile görünür. Görünmüyorsa "Akredit ile başlayalım" yazın.
|
|
11
|
+
3. Odağınızı seçin. Her menünün son satırı "4) Hepsini akıllıca doldur"dur: asistan her alanı kendisi doldurur, denetler, geçmeyeni düzeltir ve sonunda tek özet gösterir. Değiştirmek istediğiniz alanın numarasını yazarsınız; sonradan da kolayca güncellersiniz.
|
|
12
|
+
|
|
13
|
+
## Hiç bilmeyenler için
|
|
14
|
+
|
|
15
|
+
Yapay zekâyı ilk kez kullanıyorsanız bu adımları sırayla izleyin. Her adım tek iştir. Menü adları sürüme göre biraz farklı olabilir.
|
|
16
|
+
|
|
17
|
+
1. Claude'a Akredit'i ekleyin. claude.ai'de sol alttaki adınıza tıklayın, Settings (Ayarlar), sonra Connectors (Bağlayıcılar). Add custom connector düğmesine basın. Ad: Akredit. Adres: `https://akredit.org/mcp`. Add deyin. Listede Akredit görünür.
|
|
18
|
+
2. Yeni sohbet açın ve `akredit` yazın. Ekranda hangi aracı kullanmak istediğinizi soran bir menü görürsünüz. Bologna için 1 yazın.
|
|
19
|
+
3. OBS'nize kendiniz girin. Asistan OBS adresinizi sorar ve tarayıcı aracı varsa sayfayı kenarda açar. Kullanıcı adınızı ve parolanızı yalnız OBS'nin kendi giriş ekranına, kendiniz yazın. Asistana, sohbete ya da Akredit'e asla yazmayın. Doğrulama kodu ve "Ben robot değilim" kutusu da sizindir. Girince asistana yalnız "girdim" yazın.
|
|
20
|
+
4. Kenardaki tarayıcı. Claude in Chrome eklentisi, Claude masaüstü uygulamasının tarayıcı paneli ya da ChatGPT'nin ajan modu sayfayı okuyabilir. Asistan ders listenizi numaralı gösterir, siz dersin numarasını yazarsınız.
|
|
21
|
+
5. Seçin. Asistan eksik alanları listeler. 4 yazarsanız hepsini akıllıca doldurur ve tek özet gösterir; isterseniz alan alan seçenek de görebilirsiniz. Kaynakları size sormaz: ders içeriğine uygun eserleri kendi web aramasıyla bulur, Akredit'in kaynak doğrulayıcısından geçirir ve bağlantısıyla gösterir. Doğrulanamayan kaynak önerilmez.
|
|
22
|
+
6. OBS'ye yazma. Üç yol var: 1) asistan formu doldurur, Kaydet'e siz basarsınız 2) asistan doldurur ve sizin açık izninizle kaydeder (her sekmeden önce özet gösterip "evet" ister ya da bir kez "hepsini kaydet" izni alır) 3) alan alan kopyalarsınız. Tarayıcı aracı yoksa 3. yol kullanılır. Parolanız yine yalnız sizdedir.
|
|
23
|
+
7. Engel olursa. Tarayıcı aracı yoksa, site açılmıyorsa, CAPTCHA ya da oturum düşmesi olursa asistana ne olduğunu yazın; adım adım çözüm verir. Hiçbiri olmazsa yedek yol hep var: OBS'de ders sayfasında Ctrl+A, Ctrl+C, sohbete Ctrl+V.
|
|
24
|
+
|
|
25
|
+
## Hazır başlangıçlar (istemler)
|
|
26
|
+
|
|
27
|
+
| İstem | Ne yapar |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `akredit` | Araç menüsü: önce hangi aracı kullanacağınızı sorar (Bologna paketi, öğrenme çıktısı, ÇK/PÇ hesabı, ölçüt rehberi, dil denetimi ya da başka bir araç). |
|
|
30
|
+
| `bologna_doldur` | OBS'nize kendiniz girersiniz; asistan Bologna sayfanızı okur, eksikleri akıllıca tamamlayıp denetler, tek özet gösterir; formu doldurur ya da kopya metni verir. Kaydet'e siz basarsınız ya da açık izninizle asistan basar. |
|
|
31
|
+
| `cikti_yaz` | Ders öğrenme çıktılarını ölçülebilir fiillerle tek adımda yazar ya da iyileştirir, denetler, özet gösterir. |
|
|
32
|
+
| `ck_pc_hesabi` | Excel not tablonuzu yapıştırırsınız; öğrencilere takma ad verilir, ÇK ve PÇ sağlanma düzeyi hesaplanır. |
|
|
33
|
+
| `olcut_rehberi` | YÖKAK, MÜDEK, FEDEK, EPDAD ya da SABAK ölçütünü resmî metniyle bulur, kanıt listesi çıkarır. |
|
|
34
|
+
| `dil_denetimi` | Rapor metnini denetler, bulguları düzeltip yeniden denetler, tek özet gösterir. |
|
|
35
|
+
|
|
36
|
+
## Araçlar
|
|
4
37
|
|
|
5
38
|
| Araç | Ne yapar |
|
|
6
39
|
|---|---|
|
|
7
|
-
| `olcut_ara` | YÖKAK ya da program akreditasyonu (MÜDEK, FEDEK, SABAK, EPDAD) ölçütlerinde
|
|
8
|
-
| `olcut_getir` | Bir ölçütün resmî metnini
|
|
40
|
+
| `olcut_ara` | YÖKAK ya da program akreditasyonu (MÜDEK, FEDEK, SABAK, EPDAD) ölçütlerinde arar. |
|
|
41
|
+
| `olcut_getir` | Bir ölçütün resmî metnini kaynak sayfasıyla getirir. |
|
|
9
42
|
| `olgunluk_duzeyleri` | Alt ölçütün olgunluk düzeylerini ve örnek kanıtlarını getirir. |
|
|
10
|
-
| `oz_degerlendirme_iskeleti` | Öz değerlendirme raporu iskeletini çıkarır; her bölüm EKSİK işaretli
|
|
11
|
-
| `
|
|
43
|
+
| `oz_degerlendirme_iskeleti` | Öz değerlendirme raporu iskeletini çıkarır; her bölüm EKSİK işaretli gelir. |
|
|
44
|
+
| `bologna_ayristir` | Yapıştırılan ya da tarayıcıyla okunan Bologna sayfasını çözer. Önce Proliz, olmazsa her OBS için genel ayrıştırıcı (HTML ya da düz metin, Türkçe ya da İngilizce). Bulunan ve bulunamayan alanları ve güven düzeyini söyler. Adres çekmez. |
|
|
45
|
+
| `bologna_denetle` | Bologna ders paketini denetler; boş, zayıf ve tamam alanları numaralı verir. |
|
|
46
|
+
| `bologna_alan_rehberi` | Bir alanın doldurma kurallarını, sınırlarını, kalıplarını ve Bloom fiillerini verir. |
|
|
47
|
+
| `bologna_taslak_denetle` | Asistanın yazdığı 1-3 seçeneği kurallarla denetler: geçer ya da eksik nedenleri. Toplamları kendisi hesaplar. |
|
|
48
|
+
| `is_yuku_oner` | AKTS ve T+U+L'den toplamı hedefe tam eşit üç iş yükü dağılımı önerir. |
|
|
49
|
+
| `bologna_durum` | Seçilen alanların bütününe bakar: kaç alan kaldı, tamamlandı mı. |
|
|
50
|
+
| `bologna_kopya_metni` | Seçilen alanları OBS'ye alan alan kopyalanacak düz metin olarak verir. |
|
|
51
|
+
| `kaynak_bicimle` | Kitap ya da makale bilgisini APA 7'ye benzer künyeye çevirir; eksik bilgiyi [EKSİK] yazar, uydurmaz. |
|
|
52
|
+
| `kaynak_dogrula` | DOI, ISBN ya da başlık ile yazarı açık kataloglarda (Crossref, Open Library, Google Books) arar. Bulursa doğrulanmış künye ve bağlantı, bulamazsa "doğrulanamadı" döner; doğrulanamayan kaynak önerilmez. |
|
|
53
|
+
| `not_tablosu_ayristir` | Excel ya da CSV not tablosunu ÇK/PÇ hesabına hazırlar; ad ve numara sütunlarını atıp öğrencilere takma ad verir, başlıklardan soru ve çıktı eşlemesini sezer. |
|
|
12
54
|
| `ck_pc_hesapla` | Ders öğrenme çıktısı ve program çıktısı sağlanma düzeyini hesaplar. |
|
|
13
55
|
| `rapor_dil_denetle` | Rapor metninde kanıtsız üstünlük, belirsiz özne gibi dil sorunlarını işaretler. |
|
|
56
|
+
| `kurulum_yardimi` | Bağlayıcı ekleme ve OBS'ye tarayıcıyla giriş için istemciye göre adım adım rehber. |
|
|
57
|
+
| `engel_coz` | Tarayıcı aracı yok, site açılmıyor, CAPTCHA, çerçeve, oturum düşmesi gibi engeller için numaralı çözüm adımları. |
|
|
58
|
+
|
|
59
|
+
Sunucu model çağırmaz ve metin üretmez. Bologna seçeneklerini sizin asistanınız yazar; Akredit kural ve kalıp verir, yazılanı denetler, sayıları hesaplar. Kurallar Akredit'in iç kurallarıdır, resmî ölçüt değildir; kurumunuzun yönergesi önceliklidir.
|
|
60
|
+
|
|
61
|
+
## Örnek konuşma (kurgu ders)
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
Hoca: akredit
|
|
65
|
+
Asistan: Neye odaklanalım? 1) Bologna paketi 2) Öğrenme çıktısı 3) ÇK/PÇ 4) Ölçüt rehberi 5) Dil denetimi
|
|
66
|
+
Hoca: 1
|
|
67
|
+
Asistan: Önce bir kural: kullanıcı adınızı ve parolanızı yalnız OBS'nin kendi ekranına, kendiniz yazın.
|
|
68
|
+
Bana asla yazmayın. OBS adresiniz nedir?
|
|
69
|
+
Hoca: obs.kurgu.edu.tr
|
|
70
|
+
Asistan: OBS giriş ekranını kenarda açtım. Bilgilerinizi oraya yazın, bitince bana yalnız "girdim" yazın.
|
|
71
|
+
Hoca: girdim
|
|
72
|
+
Asistan: Dersleriniz: 1) KRG204 Kurgu Ölçme Yöntemleri 2) KRG305 Kurgu Veri Çözümlemesi. Hangisi?
|
|
73
|
+
Hoca: 1
|
|
74
|
+
Asistan: Sayfayı okudum. 9 alan eksik ya da zayıf:
|
|
75
|
+
1) Amaç (boş) 2) İçerik (8 kelime) 3) Çıktılar (2 var, 8-12 olmalı) 4) Haftalar (3 var) ...
|
|
76
|
+
1) Alan alan seçenek göstereyim 2) Yalnız boşlar 3) Kendim seçeyim 4) Hepsini akıllıca doldur (önerilen)
|
|
77
|
+
Hoca: 4
|
|
78
|
+
Asistan: Şu alanları şöyle doldurdum, hepsi denetimden geçti:
|
|
79
|
+
1) Amaç: "Bu ders, kurgu ölçme kavramlarını ..." (66 kelime)
|
|
80
|
+
2) İçerik: ... 3) Çıktılar: 8 çıktı ... 9) Kaynaklar: 2 eser, ikisi de katalogda doğrulandı:
|
|
81
|
+
Deneme, C. (2019). Kurgu istatistiği. Kurgu Akademi. https://books.google.com/books?id=...
|
|
82
|
+
Değiştirmek istediğiniz alanın numarasını yazın; yoksa devam diyebilirsiniz.
|
|
83
|
+
Bunları daha sonra da kolayca güncelleyebilirsiniz.
|
|
84
|
+
Hoca: devam
|
|
85
|
+
Asistan: OBS'ye nasıl yazalım? 1) Formu ben doldurayım, Kaydet'e siz basın
|
|
86
|
+
2) Formu ben doldurup kaydedeyim (her sekmeden önce evet isterim) 3) Alan alan kopyalayın
|
|
87
|
+
4) Hepsini akıllıca doldur ve kaydet (önerilen)
|
|
88
|
+
Hoca: 4
|
|
89
|
+
Asistan: Bütün sekmeleri doldurup kaydetmem için izin veriyor musunuz? hepsini kaydet / hayır
|
|
90
|
+
Hoca: hepsini kaydet
|
|
91
|
+
Asistan: Üç sekmeyi doldurdum ve kaydettim. Dersi Verenler satırına dokunmadım.
|
|
92
|
+
Asistan: Sayfayı yeniden okudum ve denetledim: Tamamlandı.
|
|
93
|
+
```
|
|
14
94
|
|
|
15
|
-
## Salt okuma
|
|
95
|
+
## Salt okuma ve güvenlik
|
|
16
96
|
|
|
17
97
|
- Bütün araçlar salt okumadır ve aynı girdiye aynı sonucu verir.
|
|
18
98
|
- Hesap ve anahtar gerekmez. Kurum verisine erişmez, hiçbir yere yazmaz, yapay zekâ modeli çağırmaz.
|
|
99
|
+
- Giriş bilgisi istenmez: parola, doğrulama kodu ya da oturum çerezi görülürse çağrı reddedilir, değer kaydedilmez ve yanıta yazılmaz. İstemler asistana hocadan giriş bilgisi istemeyi yasaklar. CAPTCHA'yı hoca çözer. OBS'de Kaydet'e hoca basar ya da hocanın açık izniyle asistan basar; onaya gönderimi hoca yapar.
|
|
19
100
|
- Ölçüt metinleri resmî belgeden alınmıştır. Her yanıt kaynağını (belge adresi, sayfa, SHA-256) taşır. Belgeden alınamayan metin DOĞRULANMADI olarak döner.
|
|
20
101
|
- Sayılar yalnız hesaptan gelir; araçlar metin uydurmaz.
|
|
21
|
-
-
|
|
102
|
+
- Bologna sayfasındaki Dersi Verenler, Dersin Yardımcıları ve Koordinatör satırları hocanın kendi sayfasında yayımlanmış görev bilgisidir: olduğu gibi okunur, korunur ve OBS'ye geri yazılırken değiştirilmez. Bologna araçlarında giriş bilgisi, T.C. kimlik numarası, öğrenci numarası ve IBAN reddedilir; yayımlanmış öğretim elemanı adları serbesttir.
|
|
103
|
+
- Öğrenci verisi sohbete yapıştırılmaz: tablo sohbete yapıştırıldığı anda yapay zekâ sağlayıcısına gitmiştir. `not_tablosu_ayristir` ad, soyad ya da numara sütunu ya da 9-11 haneli numara görürse tabloyu işlemez; hocadan bu sütunları Excel'de silmesini ya da verinin tarayıcıdan çıkmadığı https://akredit.org/deneyin hesaplayıcısını kullanmasını ister. Öbür araçlarda T.C. kimlik numarası, öğrenci numarası ve IBAN reddedilir.
|
|
104
|
+
- Sunucu istek içeriğini günlüğe yazmaz.
|
|
105
|
+
- Kaynakçadaki yazar adları yayımlanmış künyedir; kaynak alanlarında serbesttir. Kaynak uydurulmaz: asistan web aramasıyla aday bulur, her adayı `kaynak_dogrula` ile katalogda arar ve yalnız katalogda bulunanı bağlantısıyla öneri olarak gösterir; uygunluğa hoca karar verir. Katalogda olmayan eser yalnız hoca beyanıyla yazılır. Bologna araçları düz metin ya da imzasız kaynağı doğrulanmamış sayar ve OBS yazma paketine almaz.
|
|
106
|
+
- Sunucu kullanıcıdan adres almaz. Bologna sayfasını siz yapıştırırsınız ya da asistanınız kendi tarayıcı veya web aracıyla okur.
|
|
107
|
+
- Dış istek: `kaynak_dogrula` yalnız api.crossref.org, openlibrary.org ve www.googleapis.com (Books) adreslerine sorar; sunucuyu kendiniz barındırıyorsanız bu üç adrese HTTPS çıkışı açık olmalıdır. Bağladığınız yapay zekâ hizmeti girdiyi kendi koşullarıyla işler.
|
|
22
108
|
|
|
23
109
|
## Bağlantı
|
|
24
110
|
|
|
@@ -42,7 +128,7 @@ Uzak sunucu:
|
|
|
42
128
|
claude mcp add --transport http akredit https://akredit.org/mcp
|
|
43
129
|
```
|
|
44
130
|
|
|
45
|
-
Yerel sunucu (Node.js 22.18 ya da üstü):
|
|
131
|
+
Yerel sunucu (npm paketi `@akredit/acik-mcp`, Node.js 22.18 ya da üstü):
|
|
46
132
|
|
|
47
133
|
```bash
|
|
48
134
|
claude mcp add akredit -- npx -y @akredit/acik-mcp
|
|
@@ -1,31 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
3
|
-
/** Her yanıtta yer alan not. */
|
|
4
|
-
export declare const AKREDIT_NOTU = "Akredit ba\u011F\u0131ms\u0131z, a\u00E7\u0131k kaynak bir ara\u00E7t\u0131r; Y\u00D6KAK ile ba\u011F\u0131 yoktur. Sonu\u00E7lar resm\u00EE de\u011Ferlendirme yerine ge\u00E7mez; beyan ve karar kurumdad\u0131r.";
|
|
5
|
-
export interface Kaynak {
|
|
6
|
-
ad: string;
|
|
7
|
-
adres: string;
|
|
8
|
-
sayfa?: number | null;
|
|
9
|
-
sha256?: string | null;
|
|
10
|
-
erisimTarihi?: string;
|
|
11
|
-
}
|
|
12
|
-
export interface AracSonucu {
|
|
13
|
-
sonuc: unknown;
|
|
14
|
-
kaynak: Kaynak[];
|
|
15
|
-
}
|
|
16
|
-
export interface AracBaglami {
|
|
17
|
-
simdi: () => Date;
|
|
18
|
-
}
|
|
19
|
-
export interface AcikArac<S extends z.ZodObject = z.ZodObject> {
|
|
20
|
-
ad: string;
|
|
21
|
-
baslik: string;
|
|
22
|
-
aciklama: string;
|
|
23
|
-
girdi: S;
|
|
24
|
-
calistir: (girdi: z.infer<S>, b: AracBaglami) => AracSonucu;
|
|
25
|
-
}
|
|
26
|
-
/** Araç girdisi hatası: kullanıcıya gösterilecek Türkçe ileti. */
|
|
27
|
-
export declare class AracHatasi extends Error {
|
|
28
|
-
}
|
|
1
|
+
import { type AcikArac } from "./temel.ts";
|
|
2
|
+
export * from "./temel.ts";
|
|
29
3
|
/** Düzey tanımı belgeden ayrılamayan gösterge için dönen değer; tanım uydurulmaz. */
|
|
30
4
|
export declare const OKUNAMADI = "Belgeden okunamad\u0131";
|
|
31
5
|
export declare const ACIK_ARACLAR: readonly AcikArac[];
|
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
// durum yok. Ölçüt metni yalnız resmî belgeden çıkarılmış çerçeve verisinden gelir (ilke 6); belgeden
|
|
3
3
|
// alınamayan metin DOĞRULANMADI olarak döner. Sayılar yalnız @akredit/olcme hesabından gelir (ilke 2).
|
|
4
4
|
// Öz değerlendirme iskeleti metin yazmaz: her bölüm EKSİK işaretiyle ve gereken kanıt türleriyle döner (ilke 1).
|
|
5
|
-
import {
|
|
5
|
+
import { dilDenetle } from "../../../packages/cekirdek/src/index.js";
|
|
6
6
|
import { belgeAdi, DOGRULANMADI, EPDAD_DERECELENDIRME_ANAHTARI, olcutEkleri, ozguBagi, ozguBolumListesi, PROGRAM_BELGELERI, PROGRAM_CERCEVELERI, tumOlcutler, YOKAK_KIDR_3_2_1, YOKAK_KURUMSAL_3_3, } from "../../../packages/cerceveler/src/index.js";
|
|
7
7
|
import { dersiOlc, HESAP_SURUMU } from "../../../packages/olcme/src/index.js";
|
|
8
8
|
import { z } from "zod";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
9
|
+
import { BOLOGNA_ARACLARI, bolognaDenetleAraci } from "./bologna.js";
|
|
10
|
+
import { kaynakBicimleAraci } from "./kaynak.js";
|
|
11
|
+
import { kaynakDogrulaAraci } from "./kaynak-dogrula.js";
|
|
12
|
+
import { notTablosuAyristirAraci } from "./not-tablosu.js";
|
|
13
|
+
import { akreditBaslaAraci } from "./promptlar.js";
|
|
14
|
+
import { AracHatasi, arac, DEPO, KOD_KAYNAGI } from "./temel.js";
|
|
15
|
+
import { engelCozAraci, kurulumYardimiAraci } from "./yardim.js";
|
|
16
|
+
export * from "./temel.js";
|
|
16
17
|
// ---------------------------------------------------------------- Çerçeve yardımcıları
|
|
17
18
|
const BELGE_ADI = {
|
|
18
19
|
[YOKAK_KURUMSAL_3_3.kaynak?.dosya ?? ""]: "YÖKAK Değerlendirme Programları Kılavuzu 3.3, Ek-1 Dereceli Değerlendirme Anahtarı",
|
|
@@ -77,7 +78,6 @@ function belgeKaynagi(c, dosya, sayfa) {
|
|
|
77
78
|
};
|
|
78
79
|
}
|
|
79
80
|
const olcutKaynagi = (c, o) => belgeKaynagi(c, o.kaynakDosya, o.kaynakSayfa);
|
|
80
|
-
const KOD_KAYNAGI = (yol, ad) => ({ ad, adres: `${DEPO}/tree/main/${yol}` });
|
|
81
81
|
function olcutBul(c, kod) {
|
|
82
82
|
const k = kod.trim().toLocaleUpperCase("tr").replace(/\.$/u, "");
|
|
83
83
|
const o = tumOlcutler(c.olcutler).find((x) => x.kod === k);
|
|
@@ -91,7 +91,8 @@ const metinGoster = (o) => (o.metinDurumu === "dogrulanmadi" ? DOGRULANMADI : o.
|
|
|
91
91
|
const olcutAra = arac({
|
|
92
92
|
ad: "olcut_ara",
|
|
93
93
|
baslik: "Ölçüt ara (YÖKAK ve program akreditasyonu)",
|
|
94
|
-
aciklama: "YÖKAK
|
|
94
|
+
aciklama: "YÖKAK ya da program akreditasyonu (MÜDEK, FEDEK, SABAK, EPDAD) ölçütlerinde sözcük ya da kodla arar. Metinler resmî belgeden alınır; alınamayan metin DOĞRULANMADI döner.",
|
|
95
|
+
sonrakiAdim: "Hocaya en uygun 2-3 sonucu numaralı gösterin; seçtiği ölçütün tam metni için olcut_getir'i çağırın.",
|
|
95
96
|
girdi: z.object({
|
|
96
97
|
sorgu: z.string().trim().min(1).max(200).describe("Aranacak ifade ya da kod, ör. 'paydaş katılımı' ya da 'B.3'"),
|
|
97
98
|
cerceve: cerceveGirdisi,
|
|
@@ -171,7 +172,8 @@ const olcutAra = arac({
|
|
|
171
172
|
const olcutGetir = arac({
|
|
172
173
|
ad: "olcut_getir",
|
|
173
174
|
baslik: "Ölçütü getir (YÖKAK ve program akreditasyonu)",
|
|
174
|
-
aciklama: "Bir ölçütün resmî metnini
|
|
175
|
+
aciklama: "Bir ölçütün resmî metnini kaynak belge, sayfa ve dosya özetiyle getirir; üst ve alt ölçütler, EPDAD göstergeleri, MÜDEK ve FEDEK programa özgü bölümleri de gelir. Metin tahminle doldurulmaz.",
|
|
176
|
+
sonrakiAdim: "Alt ölçütse olgunluk_duzeyleri ile düzeyleri ve örnek kanıtları gösterin. Hocaya sorun: 1) örnek kanıtlar 2) başka ölçüt 3) öz değerlendirme iskeleti.",
|
|
175
177
|
girdi: z.object({
|
|
176
178
|
kod: z
|
|
177
179
|
.string()
|
|
@@ -235,7 +237,8 @@ const olcutGetir = arac({
|
|
|
235
237
|
const olgunlukDuzeyleri = arac({
|
|
236
238
|
ad: "olgunluk_duzeyleri",
|
|
237
239
|
baslik: "Alt ölçüt olgunluk düzeyleri ve örnek kanıtlar",
|
|
238
|
-
aciklama: "Bir alt
|
|
240
|
+
aciklama: "Bir YÖKAK alt ölçütünün (ör. B.1.2) 1-5 olgunluk düzeyi metinlerini ve örnek kanıtlarını getirir. Düzey önermez; düzeye kurum kanıtla karar verir.",
|
|
241
|
+
sonrakiAdim: "Örnek kanıtları hocanın elindekilerle eşleştirin: her kanıt için 1) var 2) yok 3) emin değilim diye sorun. Yok olanlar EKSİK kalır.",
|
|
239
242
|
girdi: z.object({ kod: z.string().trim().min(1).max(20).describe("Alt ölçüt kodu, ör. 'B.1.2'") }),
|
|
240
243
|
calistir: ({ kod }) => {
|
|
241
244
|
const CERCEVE = YOKAK_KURUMSAL_3_3;
|
|
@@ -265,7 +268,8 @@ const olgunlukDuzeyleri = arac({
|
|
|
265
268
|
const ozDegerlendirmeIskeleti = arac({
|
|
266
269
|
ad: "oz_degerlendirme_iskeleti",
|
|
267
270
|
baslik: "Öz değerlendirme raporu iskeleti",
|
|
268
|
-
aciklama: "KİDR 3.2.1
|
|
271
|
+
aciklama: "Öz değerlendirme raporunun (KİDR 3.2.1) bölümlerini, alt ölçütlerini ve gereken örnek kanıtları verir. Metin yazmaz; her bölüm EKSİK gelir.",
|
|
272
|
+
sonrakiAdim: "Hocanın yazdığı bölüm metnini rapor_dil_denetle ile denetleyin. Kanıtı olmayan cümle EKSİK kalır.",
|
|
269
273
|
girdi: z.object({
|
|
270
274
|
bolum: z
|
|
271
275
|
.enum(["A", "B", "C", "D"])
|
|
@@ -308,112 +312,15 @@ const ozDegerlendirmeIskeleti = arac({
|
|
|
308
312
|
};
|
|
309
313
|
},
|
|
310
314
|
});
|
|
311
|
-
// ---------------------------------------------------------------- Bologna denetimi
|
|
312
|
-
const sayiYaDaBos = z.number().nullable().default(null);
|
|
313
|
-
const BolognaDersGirdisi = z.object({
|
|
314
|
-
kod: z.string().trim().min(1).max(30),
|
|
315
|
-
ad: z.string().max(200).optional(),
|
|
316
|
-
zorunlu: z.boolean().default(true),
|
|
317
|
-
yariyil: z.number().int().min(1).max(16).nullable().default(null),
|
|
318
|
-
tul: z.string().max(20).optional().describe("Teori+Uygulama+Laboratuvar, ör. '2+1+0'"),
|
|
319
|
-
kredi: sayiYaDaBos,
|
|
320
|
-
akts: sayiYaDaBos,
|
|
321
|
-
guncelleme: z.string().max(20).optional().describe("Son güncelleme tarihi, GG.AA.YYYY"),
|
|
322
|
-
ciktilar: z
|
|
323
|
-
.array(z.object({ kod: z.string().max(20), metin: z.string().max(1000) }))
|
|
324
|
-
.max(40)
|
|
325
|
-
.default([]),
|
|
326
|
-
degerlendirme: z
|
|
327
|
-
.array(z.object({ ad: z.string().max(200), sayi: sayiYaDaBos, katki: sayiYaDaBos }))
|
|
328
|
-
.max(40)
|
|
329
|
-
.default([]),
|
|
330
|
-
isyuku: z
|
|
331
|
-
.array(z.object({ ad: z.string().max(200), sayi: sayiYaDaBos, sure: sayiYaDaBos, toplam: sayiYaDaBos }))
|
|
332
|
-
.max(40)
|
|
333
|
-
.default([]),
|
|
334
|
-
dersYapisi: z
|
|
335
|
-
.array(z.object({ alan: z.string().max(200), yuzde: sayiYaDaBos }))
|
|
336
|
-
.max(20)
|
|
337
|
-
.default([]),
|
|
338
|
-
haftalar: z.number().int().min(0).max(30).default(0).describe("Haftalık konu satırı sayısı"),
|
|
339
|
-
katki: z
|
|
340
|
-
.record(z.string().max(20), z.record(z.string().max(20), z.string().max(5)))
|
|
341
|
-
.default({})
|
|
342
|
-
.describe("Ders çıktısı ya da 'Tüm' satırı → program çıktısı kodu → katkı değeri ('1'-'5', '' ya da '-')"),
|
|
343
|
-
});
|
|
344
|
-
const bolognaDenetleAraci = arac({
|
|
345
|
-
ad: "bologna_denetle",
|
|
346
|
-
baslik: "Bologna ders bilgisini denetle",
|
|
347
|
-
aciklama: "Yapıştırdığınız ders bilgi paketi verisini (AKTS, iş yükü, değerlendirme, öğrenme çıktıları, katkı tablosu) Akredit'in Bologna kurallarıyla denetler: AKTS-iş yükü uyumu, değerlendirme toplamı, eksik çıktı, güncellik, matris tutarlılığı. Kurallar resmî ölçüt değildir; tutarsızlığı işaretler, kararı komisyon verir.",
|
|
348
|
-
girdi: z.object({
|
|
349
|
-
ders: BolognaDersGirdisi,
|
|
350
|
-
programCiktilari: z
|
|
351
|
-
.array(z.object({ kod: z.string().max(20), metin: z.string().max(1000) }))
|
|
352
|
-
.max(40)
|
|
353
|
-
.optional()
|
|
354
|
-
.describe("Program çıktıları; verilirse program düzeyindeki kurallar da çalışır"),
|
|
355
|
-
matrisSatiri: z
|
|
356
|
-
.record(z.string().max(20), z.string().max(5))
|
|
357
|
-
.optional()
|
|
358
|
-
.describe("Program matrisinde bu dersin satırı: program çıktısı kodu → değer"),
|
|
359
|
-
aktsSaat: z
|
|
360
|
-
.tuple([z.number().min(1), z.number().max(60)])
|
|
361
|
-
.optional()
|
|
362
|
-
.describe("AKTS başına saat aralığı; varsayılan [25, 30]"),
|
|
363
|
-
}),
|
|
364
|
-
calistir: ({ ders, programCiktilari, matrisSatiri, aktsSaat }, b) => {
|
|
365
|
-
const sayfa = {
|
|
366
|
-
...ders,
|
|
367
|
-
ad: ders.ad ?? ders.kod,
|
|
368
|
-
bilgiler: {},
|
|
369
|
-
};
|
|
370
|
-
const pkodlar = Object.keys(matrisSatiri ?? {});
|
|
371
|
-
const veri = {
|
|
372
|
-
adres: "kullanici-girdisi",
|
|
373
|
-
okundu: b.simdi().toISOString(),
|
|
374
|
-
programCiktilari: programCiktilari ?? [],
|
|
375
|
-
matris: {
|
|
376
|
-
pkodlar,
|
|
377
|
-
dersler: matrisSatiri
|
|
378
|
-
? [
|
|
379
|
-
{
|
|
380
|
-
kod: ders.kod,
|
|
381
|
-
ad: ders.ad ?? ders.kod,
|
|
382
|
-
zorunlu: ders.zorunlu,
|
|
383
|
-
grup: null,
|
|
384
|
-
yariyil: ders.yariyil,
|
|
385
|
-
grupBasligi: false,
|
|
386
|
-
degerler: matrisSatiri,
|
|
387
|
-
},
|
|
388
|
-
]
|
|
389
|
-
: [],
|
|
390
|
-
},
|
|
391
|
-
tyycIsaret: null,
|
|
392
|
-
dersler: [{ ...sayfa, zorunlu: ders.zorunlu, bos: false, kaynak: "kullanici-girdisi" }],
|
|
393
|
-
};
|
|
394
|
-
let bulgular = bolognaDenetle(veri, { simdi: b.simdi().getTime(), ...(aktsSaat ? { aktsSaat } : {}) });
|
|
395
|
-
// Program düzeyi kuralları yalnız program çıktıları verildiyse anlamlıdır.
|
|
396
|
-
if (!programCiktilari)
|
|
397
|
-
bulgular = bulgular.filter((x) => x.konu !== "-");
|
|
398
|
-
return {
|
|
399
|
-
sonuc: {
|
|
400
|
-
ders: ders.kod,
|
|
401
|
-
hataSayisi: bulgular.filter((x) => x.duzey === "hata").length,
|
|
402
|
-
uyariSayisi: bulgular.filter((x) => x.duzey === "uyari").length,
|
|
403
|
-
bulgular,
|
|
404
|
-
not: "Kurallar Akredit'in iç kurallarıdır, resmî ölçüt değildir. Düzeltme kararını ders sorumlusu ve komisyon verir.",
|
|
405
|
-
},
|
|
406
|
-
kaynak: [KOD_KAYNAGI("packages/cekirdek/src/bologna/denetim.ts", "Akredit Bologna denetim kuralları")],
|
|
407
|
-
};
|
|
408
|
-
},
|
|
409
|
-
});
|
|
410
315
|
// ---------------------------------------------------------------- ÇK/PÇ sağlanma hesabı
|
|
411
316
|
const kimlik = z.string().trim().min(1).max(30);
|
|
412
317
|
const ANONIM = /^(?![0-9]{7,}$)[\p{L}\p{N}_.-]{1,24}$/u;
|
|
413
318
|
const ckPcHesapla = arac({
|
|
414
319
|
ad: "ck_pc_hesapla",
|
|
320
|
+
kisiselVeriKapsami: "tam",
|
|
415
321
|
baslik: "ÇK ve PÇ sağlanma düzeyi hesabı",
|
|
416
|
-
aciklama: "
|
|
322
|
+
aciklama: "Takma adlı puan tablosundan ders öğrenme çıktısı (ÇK) başarısını ve program çıktısı (PÇ) sağlanma düzeyini hesaplar. Öğrenci adı ve numarası kabul edilmez; yalnız toplu sonuç döner.",
|
|
323
|
+
sonrakiAdim: "Sonucu tablo olarak gösterin, sayıları yalnız bu yanıttan alın. Eşiğin altında kalan çıktılar için hocaya sorun: 1) iyileştirme notu yaz 2) başka eşikle yeniden hesapla 3) bitir.",
|
|
417
324
|
girdi: z.object({
|
|
418
325
|
dersKodu: kimlik,
|
|
419
326
|
donem: z.string().trim().min(1).max(40).describe("ör. '2025-2026 Güz'"),
|
|
@@ -511,7 +418,8 @@ const ckPcHesapla = arac({
|
|
|
511
418
|
const raporDilDenetle = arac({
|
|
512
419
|
ad: "rapor_dil_denetle",
|
|
513
420
|
baslik: "Rapor dil denetimi",
|
|
514
|
-
aciklama: "
|
|
421
|
+
aciklama: "Rapor metnindeki dil sorunlarını işaretler: kanıtsız üstünlük, ölçüsüz nicelik, öznesiz eylem, dönem ve tarih tutarsızlığı. Metni değiştirmez.",
|
|
422
|
+
sonrakiAdim: "Her bulgu için 2-3 numaralı düzeltme seçeneği sunun (uydurma sayı ya da kanıt eklemeden); hoca seçince düzeltilmiş metni yeniden denetleyin.",
|
|
515
423
|
girdi: z.object({
|
|
516
424
|
metin: z.string().min(1).max(60_000),
|
|
517
425
|
donem: z
|
|
@@ -538,11 +446,18 @@ const raporDilDenetle = arac({
|
|
|
538
446
|
},
|
|
539
447
|
});
|
|
540
448
|
export const ACIK_ARACLAR = [
|
|
449
|
+
akreditBaslaAraci,
|
|
541
450
|
olcutAra,
|
|
542
451
|
olcutGetir,
|
|
543
452
|
olgunlukDuzeyleri,
|
|
544
453
|
ozDegerlendirmeIskeleti,
|
|
545
454
|
bolognaDenetleAraci,
|
|
455
|
+
...BOLOGNA_ARACLARI,
|
|
456
|
+
kaynakBicimleAraci,
|
|
457
|
+
kaynakDogrulaAraci,
|
|
458
|
+
notTablosuAyristirAraci,
|
|
546
459
|
ckPcHesapla,
|
|
547
460
|
raporDilDenetle,
|
|
461
|
+
kurulumYardimiAraci,
|
|
462
|
+
engelCozAraci,
|
|
548
463
|
];
|