@akredit/acik-mcp 0.5.0 → 0.6.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/dist/apps/acik-mcp/src/araclar.js +5 -5
- package/dist/apps/acik-mcp/src/bologna.js +6 -6
- package/dist/apps/acik-mcp/src/not-tablosu.js +3 -3
- package/dist/apps/acik-mcp/src/promptlar.d.ts +22 -1
- package/dist/apps/acik-mcp/src/promptlar.js +67 -50
- package/dist/apps/acik-mcp/src/sunucu.d.ts +3 -1
- package/dist/apps/acik-mcp/src/sunucu.js +10 -3
- package/package.json +3 -3
|
@@ -92,7 +92,7 @@ const olcutAra = arac({
|
|
|
92
92
|
ad: "olcut_ara",
|
|
93
93
|
baslik: "Ölçüt ara (YÖKAK ve program akreditasyonu)",
|
|
94
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
|
|
95
|
+
sonrakiAdim: "Hocaya hangi ölçütü getireceğinizi sormayın: en uygun 1-2 sonuç için hemen olcut_getir'i (YÖKAK alt ölçütüyse olgunluk_duzeyleri'ni de) çağırıp yanıtı tek seferde hazırlayın. Diğer adayları sonda tek satırda anın.",
|
|
96
96
|
girdi: z.object({
|
|
97
97
|
sorgu: z.string().trim().min(1).max(200).describe("Aranacak ifade ya da kod, ör. 'paydaş katılımı' ya da 'B.3'"),
|
|
98
98
|
cerceve: cerceveGirdisi,
|
|
@@ -173,7 +173,7 @@ const olcutGetir = arac({
|
|
|
173
173
|
ad: "olcut_getir",
|
|
174
174
|
baslik: "Ölçütü getir (YÖKAK ve program akreditasyonu)",
|
|
175
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
|
|
176
|
+
sonrakiAdim: "Alt ölçütse sormadan olgunluk_duzeyleri'ni çağırın. Resmî metni, düzeyleri ve kanıt kontrol listesini tek mesajda gösterin; sonda kısa bir satırla başka ölçüt ya da öz değerlendirme iskeleti önerin.",
|
|
177
177
|
girdi: z.object({
|
|
178
178
|
kod: z
|
|
179
179
|
.string()
|
|
@@ -238,7 +238,7 @@ const olgunlukDuzeyleri = arac({
|
|
|
238
238
|
ad: "olgunluk_duzeyleri",
|
|
239
239
|
baslik: "Alt ölçüt olgunluk düzeyleri ve örnek kanıtlar",
|
|
240
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: "
|
|
241
|
+
sonrakiAdim: "Kanıtları hocaya tek tek sormayın. Resmî metni, 1-5 düzeylerini ve '[ ] kanıt (durum: hocaya sorulacak)' biçiminde kopyalanabilir kontrol listesini tek mesajda gösterin. Kurumda olup olmadığını tahmin etmeyin.",
|
|
242
242
|
girdi: z.object({ kod: z.string().trim().min(1).max(20).describe("Alt ölçüt kodu, ör. 'B.1.2'") }),
|
|
243
243
|
calistir: ({ kod }) => {
|
|
244
244
|
const CERCEVE = YOKAK_KURUMSAL_3_3;
|
|
@@ -320,7 +320,7 @@ const ckPcHesapla = arac({
|
|
|
320
320
|
kisiselVeriKapsami: "tam",
|
|
321
321
|
baslik: "ÇK ve PÇ sağlanma düzeyi hesabı",
|
|
322
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
|
|
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 aynı mesajda kısa iyileştirme notu taslağı verin (sayı uydurmadan); ayrıca soru sormayın.",
|
|
324
324
|
girdi: z.object({
|
|
325
325
|
dersKodu: kimlik,
|
|
326
326
|
donem: z.string().trim().min(1).max(40).describe("ör. '2025-2026 Güz'"),
|
|
@@ -419,7 +419,7 @@ const raporDilDenetle = arac({
|
|
|
419
419
|
ad: "rapor_dil_denetle",
|
|
420
420
|
baslik: "Rapor dil denetimi",
|
|
421
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: "
|
|
422
|
+
sonrakiAdim: "Bulguları hocaya tek tek sormayın. Hepsini kendiniz düzeltin (kanıt ya da sayı gereken yere uydurmadan [EKSİK: ...] yazın), düzeltilmiş metni yeniden rapor_dil_denetle ile denetleyin ve tek mesajda numaralı eski → yeni tablosunu ve düzeltilmiş tam metni verin.",
|
|
423
423
|
girdi: z.object({
|
|
424
424
|
metin: z.string().min(1).max(60_000),
|
|
425
425
|
donem: z
|
|
@@ -738,7 +738,7 @@ export const bolognaDenetleAraci = arac({
|
|
|
738
738
|
ad: "bologna_denetle",
|
|
739
739
|
baslik: "Bologna ders paketini denetle",
|
|
740
740
|
aciklama: "Bir dersin Bologna bilgi paketini denetler: hangi alan boş, hangisi zayıf, neden. AKTS ve iş yükü uyumu, değerlendirme toplamı, öğrenme çıktıları, haftalar ve katkı tablosu. Kurallar Akredit'in iç kurallarıdır, karar komisyonundur.",
|
|
741
|
-
sonrakiAdim: "
|
|
741
|
+
sonrakiAdim: "Nasıl doldurulacağını hocaya sormayın; doğrudan akıllı doldurun. Sayfada değerlendirme yüzdeleri ya da kaynaklar yoksa yalnız bunları TEK mesajda sorun (yüzdeyi tahmin etmeyin). Gerisini sormadan bologna_alan_rehberi(alan='hepsi'), is_yuku_oner ve bologna_taslak_denetle ile doldurup denetleyin; sonunda bologna_kopya_metni özetini tek seferde gösterin.",
|
|
742
742
|
kisiselVeriKapsami: BOLOGNA_KAPSAMI,
|
|
743
743
|
kunyeAlanlari: BOLOGNA_KUNYE_ALANLARI,
|
|
744
744
|
girdi: z.object({
|
|
@@ -837,7 +837,7 @@ const alanRehberi = arac({
|
|
|
837
837
|
ad: "bologna_alan_rehberi",
|
|
838
838
|
baslik: "Bologna alanı nasıl doldurulur",
|
|
839
839
|
aciklama: "Bir Bologna alanının (amaç, içerik, çıktılar, iş yükü, haftalar...) doldurma kurallarını, sınırlarını, örnek kalıplarını ve Bloom fiillerini verir. AKTS ve T+U+L verilirse iş yükü hedefini hesaplar. Metin üretmez.",
|
|
840
|
-
sonrakiAdim: "
|
|
840
|
+
sonrakiAdim: "Doldurulacak bütün alanların taslağını bu kurallarla tek seferde yazın ve bologna_taslak_denetle ile denetleyin. Ara adımda hocaya alan alan A/B/C sormayın; en iyi seçeneği kendiniz seçin.",
|
|
841
841
|
girdi: z.object({
|
|
842
842
|
alan: z.enum([...ALAN_KODLARI, "hepsi"]).describe("Alan kodu ya da 'hepsi'"),
|
|
843
843
|
akts: z.number().min(0).max(60).optional(),
|
|
@@ -899,7 +899,7 @@ const taslakDenetleAraci = arac({
|
|
|
899
899
|
ad: "bologna_taslak_denetle",
|
|
900
900
|
baslik: "Bologna taslağını denetle",
|
|
901
901
|
aciklama: "Asistanın yazdığı 1-3 seçeneği (A, B, C) Akredit kurallarıyla BİÇİM yönünden denetler (sayılar, uzunluklar, fiil, toplamlar, kaynak doğrulaması). İçeriğin doğruluğunu bilemez: içerik teyidi hocadadır. Her seçenek için biçim sonucu ve eksik nedenlerini döndürür; her kuralın türü (resmî, kurum, Akredit önerisi) ve dayanağı vardır. İş yükü toplamını ve yüzde toplamlarını kendisi hesaplar.",
|
|
902
|
-
sonrakiAdim: "
|
|
902
|
+
sonrakiAdim: "Geçmeyen alanı düzeltip yeniden denetleyin; hocaya göstermeyin. Hepsi geçince bologna_durum ve bologna_kopya_metni'ni çağırıp bütün alanları TEK özet tablosunda ('öneri' etiketiyle) gösterin; alan alan soru sormayın.",
|
|
903
903
|
kisiselVeriKapsami: BOLOGNA_KAPSAMI,
|
|
904
904
|
kunyeAlanlari: BOLOGNA_KUNYE_ALANLARI,
|
|
905
905
|
girdi: z.object({
|
|
@@ -1052,7 +1052,7 @@ const ayristirAraci = arac({
|
|
|
1052
1052
|
ad: "bologna_ayristir",
|
|
1053
1053
|
baslik: "Bologna sayfasını ayrıştır",
|
|
1054
1054
|
aciklama: "Yapıştırılan Bologna ders sayfasını ya da program çıktıları sayfasını çözer. Önce Proliz biçimini dener, olmazsa her OBS için genel ayrıştırıcı çalışır (HTML ya da düz metin, Türkçe ya da İngilizce etiketler). Bulunan ve bulunamayan alanları, güven düzeyini söyler. Adres çekmez.",
|
|
1055
|
-
sonrakiAdim: "Çıkan ders verisini bologna_denetle'ye verin (girdi hazır: bolognaDenetleGirdisi). Sonraki çağrılarda ingilizce değerini aynen verin.
|
|
1055
|
+
sonrakiAdim: "Çıkan ders verisini bologna_denetle'ye verin (girdi hazır: bolognaDenetleGirdisi). Sonraki çağrılarda ingilizce değerini aynen verin. Sayfada değerlendirme yüzdeleri ya da kaynaklar yoksa yalnız bunları hocaya TEK mesajda sorun; yüzdeyi tahmin etmeyin. Uygulama/lab T+U+L'den okunur (U+L > 0 ise var), sorulmaz. Amaç ve içerik sayfada yoksa önden sorulmaz; 'öneri' olarak yazılıp son özette teyide sunulur.",
|
|
1056
1056
|
kisiselVeriKapsami: BOLOGNA_KAPSAMI,
|
|
1057
1057
|
kunyeAlanlari: BOLOGNA_KUNYE_ALANLARI,
|
|
1058
1058
|
onAyikla: ayristirOnAyikla,
|
|
@@ -1236,7 +1236,7 @@ const durumAraci = arac({
|
|
|
1236
1236
|
kaynak: [KAYNAK_KURALLAR],
|
|
1237
1237
|
...(tamamlandi
|
|
1238
1238
|
? {
|
|
1239
|
-
sonrakiAdim: "bologna_kopya_metni ile yazma paketini alın (sayfadaki önceki değerleri oncekiDegerler olarak verin).
|
|
1239
|
+
sonrakiAdim: "Hocaya ara özet gösterip 'devam' beklemeyin; hemen bologna_kopya_metni ile yazma paketini alın (sayfadaki önceki değerleri oncekiDegerler olarak verin). Tek mesajda önceki → yeni tablosunu gösterip sorun: 1) OBS'ye yaz ve kaydet (bu seçim 'kaydet' onayıdır) 2) formu doldur, Kaydet'e ben basayım 3) alan alan kopya metni ver. Değiştirmek istenen alan varsa numarası yazılır.",
|
|
1240
1240
|
}
|
|
1241
1241
|
: {}),
|
|
1242
1242
|
};
|
|
@@ -1369,7 +1369,7 @@ const isYukuOnerAraci = arac({
|
|
|
1369
1369
|
ad: "is_yuku_oner",
|
|
1370
1370
|
baslik: "AKTS iş yükü önerisi",
|
|
1371
1371
|
aciklama: "AKTS, T+U+L ve sayfadaki değerlendirme kalemlerinden iş yükü dağılımı ÖNERİR. Yalnız derste olan etkinliklere satır açar (ödev yoksa ödev satırı yok); her satırda kaynak ve varsayım yazar. Sayfadan okunan iş yükü verilirse ayrı gösterir, öneriyle karıştırmaz. Hesap deterministiktir; AKTS'yi değiştirmez.",
|
|
1372
|
-
sonrakiAdim: "
|
|
1372
|
+
sonrakiAdim: "Sayfadaki iş yükü AKTS hedef aralığındaysa onu koruyun. Değilse ilk öneriyi ('öneri' etiketiyle) doğrudan taslağa alıp bologna_taslak_denetle ile denetleyin; hocaya ayrı mesajda iş yükü seçeneği sormayın, son özette varsayımıyla gösterin. Değerlendirme kalemleri bilinmiyorsa uydurmayın.",
|
|
1373
1373
|
kisiselVeriKapsami: BOLOGNA_KAPSAMI,
|
|
1374
1374
|
girdi: z.object({
|
|
1375
1375
|
akts: z.number().min(1).max(60),
|
|
@@ -146,7 +146,7 @@ export const notTablosuAyristirAraci = arac({
|
|
|
146
146
|
ad: "not_tablosu_ayristir",
|
|
147
147
|
baslik: "Not tablosunu ayrıştır",
|
|
148
148
|
aciklama: "Excel ya da CSV'den yapıştırılan not tablosunu ÇK/PÇ hesabına hazırlar. Tabloda yalnız not sütunları olmalı: ad, soyad ya da numara sütunu ya da 9-11 haneli numara görülürse tablo işlenmez. Öğrencilere o1, o2 takma adı verir. Başlıklardan sınav, soru, tam puan ve ders çıktısı eşlemesini sezer; eksikleri listeler.",
|
|
149
|
-
sonrakiAdim: "
|
|
149
|
+
sonrakiAdim: "Eksik yoksa hocaya soru sormadan ckPcHesaplaTaslagi'ni hemen ck_pc_hesapla'ya verin. Eksik varsa (tam puan, soru-çıktı eşlemesi, sınav ağırlığı) hepsini TEK mesajda, numaralı sorun; tahmin etmeyin, sütun sütun ayrı mesaj açmayın.",
|
|
150
150
|
kisiselVeriIpucu: NOT_TABLOSU_KISISEL_ILETI,
|
|
151
151
|
kisiselVeriKapsami: "tam",
|
|
152
152
|
onDenetim: (g) => {
|
|
@@ -253,14 +253,14 @@ export const notTablosuAyristirAraci = arac({
|
|
|
253
253
|
ciktilar: ciktilar.map((kod) => ({ kod })),
|
|
254
254
|
araclar,
|
|
255
255
|
puanlar,
|
|
256
|
-
not: "dersKodu ve donem
|
|
256
|
+
not: "dersKodu ve donem biliniyorsa ekleyin; bilinmiyorsa bunun için hocayı durdurmayın, çıktıda EKSİK yazın. Eksik kalmayınca ck_pc_hesapla'ya verin.",
|
|
257
257
|
},
|
|
258
258
|
sutunEslemeRehberi: SUTUN_ESLEME_REHBERI,
|
|
259
259
|
},
|
|
260
260
|
kaynak: [KOD_KAYNAGI("apps/acik-mcp/src/not-tablosu.ts", "Akredit not tablosu ayrıştırıcısı")],
|
|
261
261
|
...(eksikler.length
|
|
262
262
|
? {
|
|
263
|
-
sonrakiAdim: "
|
|
263
|
+
sonrakiAdim: "Bütün eksikleri TEK mesajda, numaralı sorun (tahmin etmeyin); yanıtları tamPuanlar, eslemeler ve agirliklar olarak verip aracı yeniden çağırın. Tabloyu yeniden yapıştırtmayın, aynı tabloyu kullanın.",
|
|
264
264
|
}
|
|
265
265
|
: {}),
|
|
266
266
|
};
|
|
@@ -43,6 +43,27 @@ export declare function baslangic(): {
|
|
|
43
43
|
};
|
|
44
44
|
ortakKurallar: string;
|
|
45
45
|
};
|
|
46
|
-
|
|
46
|
+
/** Kullanıcı niyetini zaten yazdıysa menü atlanır; yalnız o odağın akışı ve kurallar döner. */
|
|
47
|
+
export declare function odakBaslangici(no: string): {
|
|
48
|
+
hocayaGoster: string;
|
|
49
|
+
odak: {
|
|
50
|
+
no: "1" | "2" | "3" | "4" | "5";
|
|
51
|
+
ad: "Bologna ders paketini denetle ve boş alanları doldur" | "Ders öğrenme çıktısı yaz ya da iyileştir" | "ÇK ve PÇ sağlanma düzeyini hesapla" | "YÖKAK, MÜDEK, FEDEK, EPDAD ya da SABAK ölçüt ve kanıt rehberi" | "Öz değerlendirme metninin dil denetimi";
|
|
52
|
+
istem: "bologna_doldur" | "cikti_yaz" | "ck_pc_hesabi" | "olcut_rehberi" | "dil_denetimi";
|
|
53
|
+
} | null;
|
|
54
|
+
kisaKurallar: string[];
|
|
55
|
+
akis: string;
|
|
56
|
+
ortakKurallar: string;
|
|
57
|
+
};
|
|
58
|
+
export declare const akreditBaslaAraci: import("./temel.ts").AcikArac<z.ZodObject<{
|
|
59
|
+
odak: z.ZodDefault<z.ZodEnum<{
|
|
60
|
+
1: "1";
|
|
61
|
+
2: "2";
|
|
62
|
+
3: "3";
|
|
63
|
+
4: "4";
|
|
64
|
+
5: "5";
|
|
65
|
+
menu: "menu";
|
|
66
|
+
}>>;
|
|
67
|
+
}, z.core.$strip>>;
|
|
47
68
|
/** SDK için bağımsız değişken şeması: hepsi isteğe bağlı, kısa metin. */
|
|
48
69
|
export declare const istemSemasi: (i: AcikIstem) => Record<string, z.ZodOptional<z.ZodString>>;
|
|
@@ -32,15 +32,13 @@ export const AKILLI_DOLDURMA_SECENEGI = "4) Hepsini akıllıca doldur (önerilen
|
|
|
32
32
|
export const TEYIT_SORULARI = [
|
|
33
33
|
"Teyit gerektiren bilgiler (asla tahmin etme):",
|
|
34
34
|
"- Değerlendirme yöntemleri ve yüzdeleri (vize, final, ödev, proje...).",
|
|
35
|
-
"- Dersin uygulama ya da laboratuvar içerip içermediği.",
|
|
36
35
|
"- Derste gerçekten kullanılan kaynaklar ve ders notları.",
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
' "
|
|
40
|
-
" 1) Değerlendirme
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"Hocanın seçtiği varsayılan da hoca teyidi sayılır (degerlendirmeDayanagi: 'hoca'). Yanıt gelmeden değerlendirme yüzdesi yazma paketine girmez.",
|
|
36
|
+
"Bunları önce sayfadan oku; sayfada doluysa SORMA. Uygulama/lab sorulmaz: T+U+L'den okunur (U+L > 0 ise var). Amaç ve içerik sayfada yoksa önden sorulmaz; 'öneri' olarak yazılıp son özette teyide sunulur.",
|
|
37
|
+
"Sayfada olmayan değerlendirme ve kaynakları hocaya TEK mesajda sor. Değerlendirme yüzdesine varsayılan uydurma; hoca yazar. Örnek:",
|
|
38
|
+
' "İki bilgiyi yalnız siz bilebilirsiniz:',
|
|
39
|
+
" 1) Değerlendirme yöntemleri ve yüzdeleri: yazın (ör. Vize 40, Final 60)",
|
|
40
|
+
' 2) Kaynaklar: a) katalogdan doğrulayıp önereyim (önerilen) b) şunları kullanıyorum: yazın"',
|
|
41
|
+
"Yanıt gelmeden değerlendirme yüzdesi yazma paketine girmez (degerlendirmeDayanagi: 'hoca').",
|
|
44
42
|
].join("\n");
|
|
45
43
|
export const AKILLI_DOLDURMA = [
|
|
46
44
|
"Hepsini akıllıca doldur (seçenek 4):",
|
|
@@ -51,7 +49,8 @@ export const AKILLI_DOLDURMA = [
|
|
|
51
49
|
"- Uydurma yok: hocanın vermediği ve doğrulayamadığın bilgi (kişi, kitap, tarih, sayı, toplantı) EKSİK kalır. Kaynaklar yalnız kaynak_dogrula'dan 'dogrulandi' dönenlerdir.",
|
|
52
50
|
"- Araç sonucunu 'geçer' diye sunma: 'biçim denetiminden geçti; içerik teyidi: hoca' de.",
|
|
53
51
|
"- Bitince tek bir özet göster: numara, alan, ne yazdığın (ilk cümle ya da kısa özet), kaynağı (sayfa, hoca ya da öneri), biçim denetimi sonucu. Altına şunu yaz:",
|
|
54
|
-
|
|
52
|
+
"- Ara özet gösterip 'devam' bekleme: OBS'ye yazılacaksa özet, yazma onayıyla aynı mesajdadır (OBS'ye yazma adımı). Özetin altına yaz:",
|
|
53
|
+
" \"Öneri yazanlar benim önerimdir, içeriği siz teyit edersiniz. 1) OBS'ye yaz ve kaydet 2) formu doldur, Kaydet'e ben basayım 3) kopya metni ver. Değiştirmek istediğiniz alan varsa numarasını yazın.\"",
|
|
55
54
|
"",
|
|
56
55
|
TEYIT_SORULARI,
|
|
57
56
|
].join("\n");
|
|
@@ -97,14 +96,18 @@ const obsGirisi = () => [
|
|
|
97
96
|
"Adım 0. OBS'ye giriş (tarayıcı).",
|
|
98
97
|
` Hocaya önce şunu aynen söyle: "${GIRIS_KURALI_HOCAYA}"`,
|
|
99
98
|
" Tarayıcı aracın varsa (Claude in Chrome, Claude masaüstü tarayıcı paneli, ChatGPT ajan modu gibi):",
|
|
100
|
-
" a)
|
|
99
|
+
" a) İLK İŞ: tarayıcıda açık sekmelere bak. Açık bir OBS ya da Bologna sayfası varsa adres ve giriş sorma, doğrudan d) adımına geç. Yoksa hocaya yalnız şunu sor: \"OBS'nizin adresini yazın (bilmiyorsanız üniversitenizin adını yazın).\" Ders adını ya da paketi sorma; onları OBS'den okuyacaksın. Adres gelince hemen tarayıcıda aç. Üniversite adı gelirse kurumun OBS ya da Bologna sayfasını web aramasıyla bul ve aç.",
|
|
101
100
|
' b) Giriş ekranı gelince dur ve şunu yaz: "Kullanıcı adınızı ve parolanızı şimdi açılan OBS ekranına kendiniz yazın. Bitince bana yalnız girdim yazın."',
|
|
102
101
|
" c) CAPTCHA ya da doğrulama kodu gelirse hocanın kendisinin girmesini bekle; sen girme.",
|
|
103
|
-
" d) Hoca girdim deyince
|
|
102
|
+
" d) Hoca girdim deyince hangi dersi incelemek istediğini SORMA. Önce kendin tara: listedeki her dersin Bologna sayfasını sırayla aç, bologna_ayristir ve bologna_durum ile eksik ve kurala uymayan alanları say (en çok 15 ders; fazlası varsa ilk 15'i tara ve kaç ders kaldığını söyle).",
|
|
103
|
+
" Sonra tek mesajda kısa bir özet ver: her ders için bir satır, eksik alan sayısı (en eksikten en tamama). Aynı mesajda, eksik derslerin sayfasında olmayan değerlendirme yüzdelerini ve kaynakları da sor (Adım 3; ayrı tur açma). Altına numaralı seçenekler koy:",
|
|
104
|
+
" 1) Eksikleri en çok olandan başlayarak hepsini sırayla kapatalım (önerilen)",
|
|
105
|
+
" 2) Yalnız en eksik dersi tamamlayalım",
|
|
106
|
+
" 3) Dersi ben seçeyim",
|
|
107
|
+
" Hiç eksik yoksa bunu söyle ve dil ile kaynak denetimini öner. Hoca yalnız numara yazar.",
|
|
104
108
|
" e) Dersin Bologna (ders bilgi paketi) sayfasını oku. Okuduğun metni ya da HTML'i bologna_ayristir'e ver.",
|
|
105
|
-
|
|
106
|
-
" 1
|
|
107
|
-
' 2 seçilirse şunu yaz: "OBS\'de dersinizin Bologna sayfasını açın. Sayfada Ctrl+A ile hepsini seçin, Ctrl+C ile kopyalayın, buraya Ctrl+V ile yapıştırın."',
|
|
109
|
+
' Tarayıcı aracın yoksa sormadan şunu yaz: "OBS\'de dersinizin Bologna sayfasını açın, Ctrl+A ile seçip Ctrl+C ile kopyalayın ve buraya yapıştırın. Tarayıcı kurulumunu birlikte yapmak isterseniz 1 yazın." 1 gelirse aşağıdaki kurulum adımını izle.',
|
|
110
|
+
" 1 gelirse kurulum_yardimi'nı hocanın asistanıyla (istemci) çağır, adımları tek tek göster.",
|
|
108
111
|
" Herhangi bir engelde engel_coz'u ilgili engel türüyle çağır.",
|
|
109
112
|
].join("\n");
|
|
110
113
|
/** Kaynak: önce sayfadaki ve hocanın kullandığı; öneri yalnız katalogda bulunan, "öneri" etiketiyle. */
|
|
@@ -118,13 +121,14 @@ const KAYNAK_ADIMI = [
|
|
|
118
121
|
const OBS_YAZMA = [
|
|
119
122
|
"6. OBS'ye yazma.",
|
|
120
123
|
" Önce bologna_kopya_metni'ni çağır (OBS'deki şimdiki değerleri oncekiDegerler olarak ver). Yazma paketine alınmayanları (doğrulanmamış kaynak, teyitsiz değerlendirme yüzdesi) hocaya söyle; onları yazma.",
|
|
121
|
-
"
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
|
|
124
|
+
" Ara özet gösterip 'devam' bekleme. TEK mesajda degisiklikOzeti'ni göster (numara, sekme, alan, önceki değer, yeni değer, kaynağı: sayfa, hoca ya da öneri; toplu modda bütün dersler tek tabloda) ve altına sor:",
|
|
125
|
+
" 1) OBS'ye yaz ve kaydet (bu seçim, yukarıdaki özete 'kaydet' onayıdır)",
|
|
126
|
+
" 2) Formu doldur, Kaydet'e ben basayım",
|
|
127
|
+
" 3) Alan alan kopya metni ver",
|
|
128
|
+
" Değiştirmek istediğiniz alan varsa numarasını yazın.",
|
|
129
|
+
" Tarayıcı aracın yoksa yalnız 3'ü sun.",
|
|
130
|
+
" 1: Yalnız hoca 1 ya da 'kaydet' yazdıysa, yalnız özetteki alanları yaz ve kaydet. Her sekmeden önce ders kodunu ve dönemi sayfada denetle; beklenenden farklıysa yazmayı durdur ve hocaya söyle.",
|
|
131
|
+
" 2: OBS düzenleme ekranında sekme sekme ilgili kutulara yaz. Her sekmeden sonra dur ve hocadan gözle denetleyip Kaydet'e basmasını iste.",
|
|
128
132
|
" 3: bologna_kopya_metni metnini her alan ayrı kod bloğunda ver, hangi sekmedeki hangi kutuya yapıştırılacağını yaz.",
|
|
129
133
|
" Kayıttan sonra (1 ve 2): sayfayı geri oku, obs_karsilastir'e obsKarsilastirGirdisi'ni ve okuduğun metni ver. dur true ise yazmayı bırak, nedenini söyle. Farklı alanları hocaya göster.",
|
|
130
134
|
" Her durumda: Dersin Yetkilileri satırlarına dokunma, OBS'deki hâliyle kalsın. Parolayı asla isteme; o yalnız hocadadır. Onaya gönderme (Gönder) düğmesine sen basma.",
|
|
@@ -137,21 +141,20 @@ const bolognaAkisi = (dersKodu) => [
|
|
|
137
141
|
"1. Ayrıştır. bologna_ayristir önce Proliz biçimini, olmazsa genel ayrıştırıcıyı dener (sekmeli düz metin de olur). Bulunamayan alanları ve ingilizce değerini not al; sonraki araçlara ingilizce değerini aynen ver.",
|
|
138
142
|
" Dersi Verenler, Yardımcılar ve Koordinatör satırları yetkililer alanında olduğu gibi gelir; onları değiştirme, sonraki çağrılarda aynen geri ver.",
|
|
139
143
|
" Program çıktıları sayfası da varsa onu da ayrıştır ve P kodlarını sakla; P kodlarını asla ezberden yazma.",
|
|
140
|
-
"2. Denetle. bologna_denetle'yi çağır.
|
|
141
|
-
|
|
142
|
-
"3. Teyit. Değerlendirme yöntemi ve yüzdeleri, uygulama/lab, kullanılan kaynaklar ve (sayfada yoksa) amaç ve içerik yalnız hocanın bilebileceği bilgilerdir. Sayfada olmayanları hocaya TEK mesajda, numaralı ve varsayılan seçenekli sor (akıllı doldurmada da). Uydurma.",
|
|
144
|
+
"2. Denetle. bologna_denetle'yi çağır. Nasıl doldurulacağını SORMA: varsayılan her zaman akıllı doldurmadır.",
|
|
145
|
+
"3. Teyit. Yalnız sayfada olmayan değerlendirme yüzdeleri ve kaynaklar için hocaya TEK mesaj (toplu modda bütün dersler için tek mesaj). Uygulama/lab T+U+L'den okunur. Uydurma.",
|
|
143
146
|
" Amaç ve içerik için hocanın verdiği kısa odak yoksa ders adından ve program çıktılarından 'öneri' yaz ve öneri olduğunu söyle.",
|
|
144
|
-
"4.
|
|
147
|
+
"4. bologna_alan_rehberi'ni alan='hepsi' ile bir kez çağır, bütün alanları tek seferde yaz.",
|
|
145
148
|
" Seçenekleri bologna_taslak_denetle ile denetle; biçim denetiminden geçmeyeni düzelt ve yeniden denetle. Uzun metinlerde ilk cümleyi ve kelime sayısını göster. Sonucu 'biçim denetiminden geçti; içerik teyidi: hoca' diye sun.",
|
|
146
149
|
" Akıllı doldurmada (4) en iyi seçeneği kendin seç ve hocaya alan alan sorma; sonunda tek özet göster.",
|
|
147
150
|
" Haftalık konular: 14 hafta, ara sınav ve yarıyıl sonu haftası görünür. Değerlendirme: yalnız sayfadan ya da hocadan; degerlendirmeDayanagi'ni ('sayfa' ya da 'hoca') ver.",
|
|
148
151
|
" AKTS iş yükü: is_yuku_oner'i sayfadaki değerlendirme kalemleriyle çağır; derste olmayan etkinliğe satır açılmaz. Sayfadan okunan iş yüküyle öneriyi ayrı göster. AKTS'yi değiştirme.",
|
|
149
152
|
" Öğrenme çıktısı ile program çıktısı katkı tablosu: yalnız ayrıştırılan P kodlarıyla öner.",
|
|
150
153
|
KAYNAK_ADIMI,
|
|
151
|
-
|
|
154
|
+
"5. Hepsini yazınca bologna_durum'u çağır; geçmeyeni düzelt. Ara adımda hocaya rapor verme.",
|
|
152
155
|
OBS_YAZMA,
|
|
153
156
|
'7. Doğrulama. Kayıttan sonra sayfayı yeniden oku (tarayıcı varsa) ya da yeniden yapıştırmasını iste; obs_karsilastir ve bologna_denetle ile denetle. Fark yoksa "Kaydedildi ve geri okunarak doğrulandı; içerik teyidi sizde" de.',
|
|
154
|
-
"
|
|
157
|
+
" Toplu modda sormadan sıradaki derse geç. Tek derste kısa bir sonuç cümlesiyle bitir.",
|
|
155
158
|
].join("\n");
|
|
156
159
|
const ciktiAkisi = (dersKodu) => [
|
|
157
160
|
`Odak: ders öğrenme çıktısı yaz ya da iyileştir.${dersKodu ? ` Ders: ${dersKodu}.` : ""}`,
|
|
@@ -159,12 +162,10 @@ const ciktiAkisi = (dersKodu) => [
|
|
|
159
162
|
"Akış:",
|
|
160
163
|
"1. Sor: 1) OBS'deki mevcut çıktılarımı okuyalım (tarayıcı aracın varsa OBS girişi için Bologna akışındaki Adım 0'ı izle) 2) çıktılarımı yapıştırayım 3) sıfırdan yaz: ders adı, AKTS, T+U+L ve kısa içerik vereyim.",
|
|
161
164
|
"2. bologna_alan_rehberi'ni alan=ciktilar ile çağır: kurallar, Bloom fiilleri, 4-10 sınırı (5-8 önerilir).",
|
|
162
|
-
|
|
163
|
-
" 1-3: her çıktı için 2-3 seçenek yaz (farklı Bloom düzeyi ya da ölçme biçimi), türünü (Bilgi, Beceri, Yetkinlik) yaz.",
|
|
164
|
-
" 4: her çıktı için en iyi ifadeyi kendin seç; hocaya ara soru sorma.",
|
|
165
|
+
"3. Nasıl yazılacağını SORMA: 5-8 ölçülebilir çıktıyı kendin yaz, türünü (Bilgi, Beceri, Yetkinlik) belirt; hocaya ara soru sorma.",
|
|
165
166
|
"4. Bütün listeyi bologna_taslak_denetle ile denetle (ciktilar alanı; İngilizce isteniyorsa en alanıyla). Geçmeyeni düzelt ve yeniden denetle.",
|
|
166
|
-
"5. Tek özet göster: numara, çıktı, tür, denetim sonucu. Değiştirmek
|
|
167
|
-
" Program çıktısı katkısı: P kodları ayrıştırıldıysa onlarla doldur;
|
|
167
|
+
"5. Tek özet göster: numara, çıktı, tür, denetim sonucu; kopya metni de aynı mesajda ver. Değiştirmek istenen numara yazılır.",
|
|
168
|
+
" Program çıktısı katkısı: P kodları ayrıştırıldıysa onlarla doldur; tarayıcın varsa program çıktıları sayfasını kendin oku. Yoksa P kodu uydurma; katkı tablosunu EKSİK bırak, akışı durdurma.",
|
|
168
169
|
"6. bologna_kopya_metni ile Öğrenme Çıktıları sekmesine kopyalanacak metni ver ya da Bologna akışındaki OBS'ye yazma adımını izle.",
|
|
169
170
|
].join("\n");
|
|
170
171
|
const ckPcAkisi = (dersKodu) => [
|
|
@@ -174,19 +175,17 @@ const ckPcAkisi = (dersKodu) => [
|
|
|
174
175
|
'1. Hocaya önce şunu söyle: "Kişisel veriyi yapay zekâ sohbetine yapıştırmayın: Excel\'de Ad, Soyad, Numara sütunlarını silip yalnız not sütunlarını yapıştırın ya da verinin tarayıcınızdan çıkmadığı hesaplayıcıyı kullanın: https://akredit.org/deneyin"',
|
|
175
176
|
" Sonra yalnız not sütunlarını yapıştırmasını iste. İlk satır başlık, her soru bir sütun; başlıkta sınav, soru, ÇK ve tam puan olursa iş biter (ör. Vize S1 (ÇK1) /20). Öğrenciler o1, o2 takma adı alır.",
|
|
176
177
|
"2. Tabloyu not_tablosu_ayristir'e ver.",
|
|
177
|
-
|
|
178
|
-
" 4: başlıktan okunan eşlemeyi ve varsayılanları kullan: eşik 60, sınav ağırlıkları tablodan. Başlıkta olmayan soru-çıktı eşlemesini ve tam puanı tahmin etme; bunları tek mesajda topluca sor.",
|
|
178
|
+
"3. Eşleme tamamsa SORMA, doğrudan hesapla (eşik 60). Başlıkta olmayan soru-çıktı eşlemesi, tam puan ya da sınav ağırlığı varsa tahmin etme; hepsini TEK mesajda sor.",
|
|
179
179
|
"4. Hazır olunca ck_pc_hesapla'yı çağır. Sonucu tablo olarak göster; sayıları yalnız yanıttan al.",
|
|
180
|
-
"5. Tek
|
|
181
|
-
"6. Sor: 1) eşiğin altındaki çıktılar için iyileştirme notu taslağı 2) farklı eşikle yeniden hesapla 3) bitir. Not taslağında sayı uydurma; sonucu kopyalanabilir tablo olarak ver.",
|
|
180
|
+
"5. Tek mesaj: kullanılan eşleme ve eşik, sonuç tablosu, eşiğin altındaki çıktılar için kısa iyileştirme notu taslağı (sayı uydurmadan). Ayrıca soru sorma.",
|
|
182
181
|
].join("\n");
|
|
183
182
|
const olcutAkisi = (cerceve) => [
|
|
184
183
|
`Odak: ölçüt ve kanıt rehberi.${cerceve ? ` Çerçeve: ${cerceve}.` : ""}`,
|
|
185
184
|
"",
|
|
186
185
|
"Akış:",
|
|
187
|
-
`1. ${cerceve ? "Çerçeve verildi, sorma." : "
|
|
188
|
-
|
|
189
|
-
"3. olcut_ara ile ara
|
|
186
|
+
`1. ${cerceve ? "Çerçeve verildi, sorma." : "Tek soru sor: hangi çerçeve ve konu? 1) YÖKAK 2) MÜDEK 3) FEDEK 4) EPDAD 5) SABAK; konu ya da ölçüt kodunu yanına yazabilirsiniz. Hoca çerçeve söylemezse YÖKAK ile başla."}`,
|
|
187
|
+
"2. Ne istendiğini ayrıca SORMA: her zaman hepsini hazırla (resmî metin, düzeyler, kanıt kontrol listesi).",
|
|
188
|
+
"3. olcut_ara ile ara; en uygun 1-2 ölçüt için hemen olcut_getir'i çağır. Resmî metni kaynağıyla göster.",
|
|
190
189
|
"4. YÖKAK alt ölçütüyse olgunluk_duzeyleri ile düzeyleri ve örnek kanıtları al. Kanıtın kurumda olup olmadığını tahmin etme: kontrol listesinde 'hocaya sorulacak' yaz; hoca isterse tek mesajda 'var olanların numaraları' diye sor.",
|
|
191
190
|
"5. Programın disiplinini ya da programa özgü bölümünü sen tahmin etme; bilmiyorsan tek soruyla sor.",
|
|
192
191
|
"6. Ölçüt metnini yalnız araç yanıtından alıntıla. DOĞRULANMADI işaretli metni tahminle doldurma.",
|
|
@@ -197,12 +196,11 @@ const dilAkisi = () => [
|
|
|
197
196
|
"",
|
|
198
197
|
"Akış:",
|
|
199
198
|
"1. Hocadan metni yapıştırmasını iste. Öğrenci adı ya da numarası varsa göndermeden önce o1, o2 gibi takma adla değiştir.",
|
|
200
|
-
"2. Rapor dönemini metinden çıkar; çıkaramazsan
|
|
199
|
+
"2. Rapor dönemini metinden çıkar; çıkaramazsan sorma, dönemsiz denetle.",
|
|
201
200
|
"3. rapor_dil_denetle'yi çağır.",
|
|
202
|
-
|
|
203
|
-
" 4: her bulgu için en iyi düzeltmeyi kendin seç. Kanıt ya da sayı gerektiren düzeltmede bilgi uydurma; o yere EKSİK yaz.",
|
|
201
|
+
"4. Nasıl düzeltileceğini SORMA: her bulguyu kendin düzelt. Kanıt ya da sayı gerektiren yerde bilgi uydurma; [EKSİK: ...] yaz.",
|
|
204
202
|
"5. Düzeltilmiş metni yeniden rapor_dil_denetle ile denetle; kalan bulguları düzelt.",
|
|
205
|
-
"6. Tek
|
|
203
|
+
"6. Tek mesaj: numaralı eski → yeni tablosu ve düzeltilmiş metnin tamamı (kopyalanabilir). Değiştirmek istenen numara yazılır.",
|
|
206
204
|
].join("\n");
|
|
207
205
|
const AKISLAR = {
|
|
208
206
|
bologna_doldur: (a) => bolognaAkisi(kisa(a.ders_kodu)),
|
|
@@ -280,7 +278,10 @@ export const ACIK_ISTEMLER = [
|
|
|
280
278
|
];
|
|
281
279
|
/** Kısa kurallar: akredit_basla yanıtında (istem desteklemeyen istemciler için) yer alır. */
|
|
282
280
|
export const KISA_KURALLAR = [
|
|
283
|
-
"Hoca
|
|
281
|
+
"Hoca yalnız 'akredit' yazdıysa menüyü aynen göster ve numara bekle. Niyetini yazdıysa menüyü atla, o akışa başla.",
|
|
282
|
+
"Her soruyu numaralı seçeneklerle sor; hoca yalnız numara yazarak ilerleyebilsin.",
|
|
283
|
+
"Bologna (1) seçilince tarayıcın varsa ilk iş OBS adresini isteyip açmak; ders adını sorma, OBS'den oku.",
|
|
284
|
+
"Hocaya 'hangisi?' diye sormadan önce kendin tara ve öner: bütün dersleri denetle, eksikleri say, 'önerilen' seçenekle gel.",
|
|
284
285
|
"Kısa, sade Türkçe yaz; araç adı, JSON ve teknik terim gösterme. Her mesajda tek iş iste.",
|
|
285
286
|
"Uydurma yok: kişi, kitap, ISBN, DOI, tarih, sayı uydurma. Bilinmeyen EKSİK kalır.",
|
|
286
287
|
"Değerlendirme yöntem ve yüzdeleri, uygulama/lab, kullanılan kaynaklar ve sayfada yoksa amaç/içerik sayfadan okunur; yoksa hocaya TEK mesajda, numaralı ve varsayılan seçenekli sorulur.",
|
|
@@ -295,7 +296,7 @@ export const KISA_KURALLAR = [
|
|
|
295
296
|
export function baslangic() {
|
|
296
297
|
return {
|
|
297
298
|
hocayaGoster: [
|
|
298
|
-
"Merhaba. Neye odaklanalım?
|
|
299
|
+
"Merhaba. Neye odaklanalım? Yalnız numarasını yazın.",
|
|
299
300
|
...ODAKLAR.map(([no, ad]) => `${no}) ${ad}`),
|
|
300
301
|
`${ODAKLAR.length + 1}) Başka bir şey: tüm araçları kısaca listele`,
|
|
301
302
|
].join("\n"),
|
|
@@ -308,14 +309,30 @@ export function baslangic() {
|
|
|
308
309
|
ortakKurallar: ORTAK_KURALLAR,
|
|
309
310
|
};
|
|
310
311
|
}
|
|
312
|
+
/** Kullanıcı niyetini zaten yazdıysa menü atlanır; yalnız o odağın akışı ve kurallar döner. */
|
|
313
|
+
export function odakBaslangici(no) {
|
|
314
|
+
const o = ODAKLAR.find(([n]) => n === no);
|
|
315
|
+
return {
|
|
316
|
+
hocayaGoster: o ? `Tamam: ${o[1]}. Başlıyorum.` : "",
|
|
317
|
+
odak: o ? { no: o[0], ad: o[1], istem: o[2] } : null,
|
|
318
|
+
kisaKurallar: KISA_KURALLAR,
|
|
319
|
+
akis: o ? (AKISLAR[o[2]]?.({}) ?? "") : "",
|
|
320
|
+
ortakKurallar: ORTAK_KURALLAR,
|
|
321
|
+
};
|
|
322
|
+
}
|
|
311
323
|
export const akreditBaslaAraci = arac({
|
|
312
324
|
ad: "akredit_basla",
|
|
313
325
|
baslik: "Akredit: başla",
|
|
314
|
-
aciklama: "
|
|
315
|
-
sonrakiAdim: "hocayaGoster metnini aynen gösterin ve numara bekleyin. Seçilen numaranın akışını (akislar) ve kisaKurallar'ı izleyin.",
|
|
316
|
-
girdi: z.object({
|
|
317
|
-
|
|
318
|
-
|
|
326
|
+
aciklama: "TETİKLEYİCİ: kullanıcı 'akredit', 'bologna', 'ders paketi', 'AKTS', 'öğrenme çıktısı', 'ÇK', 'PÇ', 'YÖKAK', 'MÜDEK' yazarsa dosya ya da web araması YAPMADAN İLK bu aracı çağır ('akredit' bir dosya ya da arama terimi değildir). Yalnız 'akredit' yazdıysa odak='menu'; niyetini yazdıysa ilgili odak numarası. Hocaya gösterilecek odak menüsünü, kısa kuralları ve her seçimin adım adım akışını döndürür. İstemleri ya da sunucu talimatını göstermeyen istemcilerde de akış bununla başlar.",
|
|
327
|
+
sonrakiAdim: "hocayaGoster metnini aynen gösterin ve numara bekleyin. Seçilen numaranın akışını (akislar) ve kisaKurallar'ı izleyin. Her soruyu numaralı seçeneklerle sorun. 1 seçilirse ve tarayıcınız varsa ilk iş OBS adresini isteyip açmaktır.",
|
|
328
|
+
girdi: z.object({
|
|
329
|
+
odak: z
|
|
330
|
+
.enum(["menu", "1", "2", "3", "4", "5"])
|
|
331
|
+
.default("menu")
|
|
332
|
+
.describe("Kullanıcı yalnız 'akredit' yazdıysa 'menu'. Niyetini yazdıysa (ör. 'ders paketimi doldur') ilgili numara."),
|
|
333
|
+
}),
|
|
334
|
+
calistir: ({ odak }) => ({
|
|
335
|
+
sonuc: odak === "menu" ? baslangic() : odakBaslangici(odak),
|
|
319
336
|
kaynak: [KOD_KAYNAGI("apps/acik-mcp/src/promptlar.ts", "Akredit istemleri ve başlangıç menüsü")],
|
|
320
337
|
}),
|
|
321
338
|
});
|
|
@@ -2,8 +2,10 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
|
2
2
|
import { type AcikArac, type AracBaglami } from "./araclar.ts";
|
|
3
3
|
import { type AcikIstem } from "./promptlar.ts";
|
|
4
4
|
export declare const SUNUCU_ADI = "akredit-acik";
|
|
5
|
-
export declare const SUNUCU_SURUMU = "0.
|
|
5
|
+
export declare const SUNUCU_SURUMU = "0.6.0";
|
|
6
6
|
export declare const SUNUCU_TALIMATI: string;
|
|
7
|
+
/** Her araç yanıtında yinelenen kısa kural: uzun sohbette son okunan metin de aynı şeyi söyler. */
|
|
8
|
+
export declare const ASISTAN_KURALI = "1) Ara ad\u0131mda hocaya A/B/C sorma; en iyi se\u00E7ene\u011Fi kendin se\u00E7, s\u0131radaki arac\u0131 \u00E7a\u011F\u0131r. 2) Zorunlu soruyu (sayfada olmayan de\u011Ferlendirme y\u00FCzdesi ve kaynak, OBS kay\u0131t onay\u0131) TEK mesajda ve numaral\u0131 sor. 3) Say\u0131, kaynak ve de\u011Ferlendirme y\u00FCzdesi uydurma. 4) Parola ve do\u011Frulama kodu isteme; Onaya G\u00F6nder'e hoca basar.";
|
|
7
9
|
export interface AcikSunucuSecenekleri {
|
|
8
10
|
simdi?: () => Date;
|
|
9
11
|
araclar?: readonly AcikArac[];
|
|
@@ -6,20 +6,26 @@ import { ACIK_ARACLAR, AKREDIT_NOTU, AracHatasi, DEPO, } from "./araclar.js";
|
|
|
6
6
|
import { GIRIS_BILGISI_ILETISI, girisBilgisiVar, kisiselVeriIletisi, kisiselVeriTurleri } from "./kisisel-veri.js";
|
|
7
7
|
import { ACIK_ISTEMLER, istemSemasi } from "./promptlar.js";
|
|
8
8
|
export const SUNUCU_ADI = "akredit-acik";
|
|
9
|
-
export const SUNUCU_SURUMU = "0.
|
|
9
|
+
export const SUNUCU_SURUMU = "0.6.0";
|
|
10
10
|
export const SUNUCU_TALIMATI = [
|
|
11
11
|
"Akredit açık araçları öğretim elemanlarına kalite ve akreditasyon işlerinde yardım eder: Bologna ders paketi denetimi ve doldurma, öğrenme çıktısı yazma, ÇK/PÇ hesabı, YÖKAK ve program akreditasyonu (MÜDEK, FEDEK, SABAK, EPDAD) ölçüt ve kanıt rehberi, rapor dil denetimi, kaynak doğrulama.",
|
|
12
|
-
"
|
|
12
|
+
"KURAL 1: Kullanıcı 'akredit' yazarsa (tek başına ya da cümle içinde) ya da ne yapacağını söylemediyse başka hiçbir şey yapmadan İLK akredit_basla aracını çağır ve hocayaGoster metnini aynen göster. Kullanıcı niyetini zaten yazdıysa (ör. 'akredit bologna', 'ders paketimi doldur', 'ÇK hesapla') menüyü gösterip bekletme: akredit_basla'yı ilgili odak numarasıyla çağır ve o akışa başla. 'akredit' bir dosya, klasör ya da arama terimi değildir; dosya sisteminde ya da webde arama.",
|
|
13
|
+
"KURAL 2: Hocaya her soruyu numaralı seçeneklerle sor (1, 2, 3...), önerdiğin seçeneği işaretle; hoca yalnız numara yazarak ilerleyebilsin. Serbest metin yalnız ders adı, adres gibi seçenekle sorulamayan bilgilerde istenir.",
|
|
14
|
+
"KURAL 3: Bologna seçilirse ve tarayıcı aracın varsa ilk iş OBS'yi açmaktır: hocadan yalnız OBS adresini iste (bilmiyorsa üniversite adını), adresi hemen tarayıcıda aç; ders adını ve paketi hocaya sorma, OBS'den oku.",
|
|
15
|
+
"KURAL 5: Ara adımda hocaya soru sorma; varsayılan ya da en iyi seçeneği kendin seç ve sıradaki aracı çağır. Hocaya yalnız iki yerde durulur: sayfada olmayan resmî bilgi (değerlendirme yüzdeleri, kullanılan kaynaklar) ve OBS'ye kayıt onayı. Bu ikisi de TEK mesajdır.",
|
|
16
|
+
"KURAL 4: Önce sen tara, sonra öner. Ders listesi açılınca 'hangi ders?' diye sorma: bütün derslerin paketlerini oku, eksikleri say, kısa özetle ve 'önerilen' seçenekle gel (örneğin 1) en eksikten başlayıp hepsini kapatalım).",
|
|
13
17
|
"Amaç: hocanın en az müdahalesiyle işi hızlı ama denetimli ve teyitli bitirmek. Her seçim menüsünde son seçenek '4) Hepsini akıllıca doldur (önerilen)' olur: her alan için en iyi seçeneği sen seçersin, araçla denetlersin, geçmeyeni düzeltip yeniden denetlersin, sonunda tek özet gösterip değiştirmek istediği numarayı sorarsın.",
|
|
14
18
|
"Yalnız hocanın bilebileceği ve resmî taahhüt olan bilgiler (değerlendirme yöntem ve yüzdeleri, uygulama/lab, kullanılan kaynaklar, sayfada yoksa amaç ve içerik) sayfadan okunur; yoksa hocaya TEK mesajda, numaralı ve varsayılan seçenekli sorulur, uydurulmaz. Ders adından üretilen her şey 'öneri' etiketiyle gösterilir. Araç sonucu 'biçim denetiminden geçti; içerik teyidi: hoca' diye sunulur.",
|
|
15
19
|
"Giriş bilgisi: hocadan kullanıcı adı, parola, doğrulama kodu ya da çerez asla isteme. Sunucu bunları istemez; görülürse çağrıyı reddeder ve kaydetmez. Hoca yazarsa kullanma, araçlara gönderme, silmesini ve parolasını değiştirmesini öner. Hoca giriş bilgisini yalnız OBS'nin kendi ekranına kendisi yazar. CAPTCHA'yı hoca çözer.",
|
|
16
|
-
"OBS'ye yazma: önce alan alan önceki ve yeni değer özetini göster, hoca bir kez 'kaydet'
|
|
20
|
+
"OBS'ye yazma: önce alan alan önceki ve yeni değer özetini göster, hoca bir kez 'kaydet' ya da özetin altındaki 1'i (OBS'ye yaz ve kaydet) yazar; ancak ondan sonra Kaydet'e basarsın. Kayıttan sonra sayfayı geri okuyup obs_karsilastir ile doğrula; ders kodu ya da dönem değişmişse yazmayı durdur. Doğrulanmamış kaynak ve teyitsiz değerlendirme yüzdesi yazılmaz. Onaya Gönder düğmesine hoca basar.",
|
|
17
21
|
"Tarayıcı aracın varsa OBS sayfasını okuyup formu doldurabilirsin; yoksa ya da engel çıkarsa engel_coz ve kurulum_yardimi araçlarının adımlarını hocaya sırayla, tek tek göster. Tarayıcı yoksa OBS'ye yazma alan alan kopyalamaya düşer.",
|
|
18
22
|
"Sunucu model çağırmaz ve metin üretmez: seçenekleri sen yazarsın, sunucu kural ve kalıp verir, denetler ve sayıları hesaplar. Sayıları yalnız araç sonucundan al.",
|
|
19
23
|
"Bologna sayfasındaki Dersi Verenler, Yardımcılar ve Koordinatör satırları yayımlanmış görev bilgisidir: olduğu gibi okunur, korunur, değiştirilmez. Öğrenci adı ve numarası sohbete yapıştırılmaz: not tablosunda yalnız not sütunları olur; kimlik sütunu görülürse tablo işlenmez. Sunucu istek içeriğini günlüğe yazmaz.",
|
|
20
24
|
"Kaynak: önce sayfadaki ve hocanın kullandığı kaynaklar. Öneri gerekirse kendi web arama aracınla aday bul, kaynak_dogrula ile sorgula, yalnız 'katalogda_bulundu' dönenleri künyesi ve bağlantısıyla 'öneri' olarak göster; uygunluğuna hoca karar verir. Katalogda bulunmayanı kendin önerme; hoca kullandığını söylerse 'hoca_beyani' olarak yaz. Ölçüt metnini yalnız olcut_getir sonucundan alıntılayın; DOĞRULANMADI ya da 'Belgeden okunamadı' işaretli metni tahminle doldurmayın. Programın disiplinini kurum seçer. Kanıtı olmayan cümle EKSİK kalır. Kitap, kişi, tarih uydurmayın.",
|
|
21
25
|
"Sunucu kullanıcıdan adres çekmez: Bologna sayfasını hoca yapıştırır ya da siz kendi web aracınızla okursunuz. Tek dış istek kaynak_dogrula'nın sabit katalog adresleridir (Crossref, Open Library, Google Books). Onay ve dış kuruma gönderim hocadadır. Akredit'in YÖKAK ile bağı yoktur.",
|
|
22
26
|
].join(" ");
|
|
27
|
+
/** Her araç yanıtında yinelenen kısa kural: uzun sohbette son okunan metin de aynı şeyi söyler. */
|
|
28
|
+
export const ASISTAN_KURALI = "1) Ara adımda hocaya A/B/C sorma; en iyi seçeneği kendin seç, sıradaki aracı çağır. 2) Zorunlu soruyu (sayfada olmayan değerlendirme yüzdesi ve kaynak, OBS kayıt onayı) TEK mesajda ve numaralı sor. 3) Sayı, kaynak ve değerlendirme yüzdesi uydurma. 4) Parola ve doğrulama kodu isteme; Onaya Gönder'e hoca basar.";
|
|
23
29
|
const metinSonuc = (veri, isError = false) => ({
|
|
24
30
|
content: [{ type: "text", text: JSON.stringify(veri, null, 2) }],
|
|
25
31
|
structuredContent: veri,
|
|
@@ -68,6 +74,7 @@ function basari(a, s, atilan, ileti) {
|
|
|
68
74
|
veri: {
|
|
69
75
|
sonuc: s.sonuc,
|
|
70
76
|
sonrakiAdim: s.sonrakiAdim ?? a.sonrakiAdim,
|
|
77
|
+
asistanKurali: ASISTAN_KURALI,
|
|
71
78
|
...(atilan.length
|
|
72
79
|
? { atilan: ileti ?? `Şu kısımlar okunmadan atıldı, hiçbir yere yazılmadı: ${atilan.join(", ")}.` }
|
|
73
80
|
: {}),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akredit/acik-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"description": "Herkese açık Akredit MCP sunucusu: hesapsız, salt okuma, deterministik araçlar (ölçüt, Bologna denetimi, ÇK/PÇ hesabı, rapor dil denetimi). Kurum verisine erişmez, model çağırmaz.",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"@akredit/baglayicilar": "0.1.0",
|
|
39
39
|
"@akredit/cekirdek": "0.1.0",
|
|
40
40
|
"@akredit/olcme": "0.1.0",
|
|
41
|
-
"@akredit/
|
|
42
|
-
"@akredit/
|
|
41
|
+
"@akredit/yz": "0.1.0",
|
|
42
|
+
"@akredit/cerceveler": "0.1.0"
|
|
43
43
|
},
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|