@akredit/acik-mcp 0.4.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/README.md +5 -5
- package/dist/apps/acik-mcp/src/araclar.js +7 -5
- package/dist/apps/acik-mcp/src/bologna.d.ts +91 -9
- package/dist/apps/acik-mcp/src/bologna.js +479 -107
- package/dist/apps/acik-mcp/src/genel-ayristir.d.ts +10 -1
- package/dist/apps/acik-mcp/src/genel-ayristir.js +85 -7
- package/dist/apps/acik-mcp/src/http.d.ts +31 -3
- package/dist/apps/acik-mcp/src/http.js +86 -15
- package/dist/apps/acik-mcp/src/index.d.ts +1 -0
- package/dist/apps/acik-mcp/src/index.js +1 -0
- package/dist/apps/acik-mcp/src/kaynak-dogrula.d.ts +51 -4
- package/dist/apps/acik-mcp/src/kaynak-dogrula.js +199 -58
- package/dist/apps/acik-mcp/src/kisisel-veri.d.ts +3 -1
- package/dist/apps/acik-mcp/src/kisisel-veri.js +24 -9
- package/dist/apps/acik-mcp/src/not-tablosu.d.ts +6 -0
- package/dist/apps/acik-mcp/src/not-tablosu.js +43 -18
- package/dist/apps/acik-mcp/src/promptlar.d.ts +44 -0
- package/dist/apps/acik-mcp/src/promptlar.js +144 -57
- package/dist/apps/acik-mcp/src/sunucu.d.ts +3 -1
- package/dist/apps/acik-mcp/src/sunucu.js +17 -5
- package/dist/apps/acik-mcp/src/temel.d.ts +5 -0
- package/dist/apps/acik-mcp/src/yardim.js +28 -18
- 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 +3 -3
package/README.md
CHANGED
|
@@ -62,7 +62,7 @@ Sunucu model çağırmaz ve metin üretmez. Bologna seçeneklerini sizin asistan
|
|
|
62
62
|
|
|
63
63
|
```
|
|
64
64
|
Hoca: akredit
|
|
65
|
-
Asistan:
|
|
65
|
+
Asistan: Neye odaklanalım? 1) Bologna paketi 2) Öğrenme çıktısı 3) ÇK/PÇ 4) Ölçüt rehberi 5) Dil denetimi
|
|
66
66
|
Hoca: 1
|
|
67
67
|
Asistan: Önce bir kural: kullanıcı adınızı ve parolanızı yalnız OBS'nin kendi ekranına, kendiniz yazın.
|
|
68
68
|
Bana asla yazmayın. OBS adresiniz nedir?
|
|
@@ -96,13 +96,13 @@ Asistan: Sayfayı yeniden okudum ve denetledim: Tamamlandı.
|
|
|
96
96
|
|
|
97
97
|
- Bütün araçlar salt okumadır ve aynı girdiye aynı sonucu verir.
|
|
98
98
|
- Hesap ve anahtar gerekmez. Kurum verisine erişmez, hiçbir yere yazmaz, yapay zekâ modeli çağırmaz.
|
|
99
|
-
- Giriş bilgisi
|
|
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.
|
|
100
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.
|
|
101
101
|
- Sayılar yalnız hesaptan gelir; araçlar metin uydurmaz.
|
|
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
|
|
103
|
-
- Öğrenci verisi
|
|
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
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
|
|
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
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
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.
|
|
108
108
|
|
|
@@ -10,6 +10,7 @@ import { BOLOGNA_ARACLARI, bolognaDenetleAraci } from "./bologna.js";
|
|
|
10
10
|
import { kaynakBicimleAraci } from "./kaynak.js";
|
|
11
11
|
import { kaynakDogrulaAraci } from "./kaynak-dogrula.js";
|
|
12
12
|
import { notTablosuAyristirAraci } from "./not-tablosu.js";
|
|
13
|
+
import { akreditBaslaAraci } from "./promptlar.js";
|
|
13
14
|
import { AracHatasi, arac, DEPO, KOD_KAYNAGI } from "./temel.js";
|
|
14
15
|
import { engelCozAraci, kurulumYardimiAraci } from "./yardim.js";
|
|
15
16
|
export * from "./temel.js";
|
|
@@ -91,7 +92,7 @@ const olcutAra = arac({
|
|
|
91
92
|
ad: "olcut_ara",
|
|
92
93
|
baslik: "Ölçüt ara (YÖKAK ve program akreditasyonu)",
|
|
93
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.",
|
|
94
|
-
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.",
|
|
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,
|
|
@@ -172,7 +173,7 @@ const olcutGetir = arac({
|
|
|
172
173
|
ad: "olcut_getir",
|
|
173
174
|
baslik: "Ölçütü getir (YÖKAK ve program akreditasyonu)",
|
|
174
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.",
|
|
175
|
-
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.",
|
|
176
177
|
girdi: z.object({
|
|
177
178
|
kod: z
|
|
178
179
|
.string()
|
|
@@ -237,7 +238,7 @@ const olgunlukDuzeyleri = arac({
|
|
|
237
238
|
ad: "olgunluk_duzeyleri",
|
|
238
239
|
baslik: "Alt ölçüt olgunluk düzeyleri ve örnek kanıtlar",
|
|
239
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.",
|
|
240
|
-
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.",
|
|
241
242
|
girdi: z.object({ kod: z.string().trim().min(1).max(20).describe("Alt ölçüt kodu, ör. 'B.1.2'") }),
|
|
242
243
|
calistir: ({ kod }) => {
|
|
243
244
|
const CERCEVE = YOKAK_KURUMSAL_3_3;
|
|
@@ -319,7 +320,7 @@ const ckPcHesapla = arac({
|
|
|
319
320
|
kisiselVeriKapsami: "tam",
|
|
320
321
|
baslik: "ÇK ve PÇ sağlanma düzeyi hesabı",
|
|
321
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.",
|
|
322
|
-
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.",
|
|
323
324
|
girdi: z.object({
|
|
324
325
|
dersKodu: kimlik,
|
|
325
326
|
donem: z.string().trim().min(1).max(40).describe("ör. '2025-2026 Güz'"),
|
|
@@ -418,7 +419,7 @@ const raporDilDenetle = arac({
|
|
|
418
419
|
ad: "rapor_dil_denetle",
|
|
419
420
|
baslik: "Rapor dil denetimi",
|
|
420
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.",
|
|
421
|
-
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.",
|
|
422
423
|
girdi: z.object({
|
|
423
424
|
metin: z.string().min(1).max(60_000),
|
|
424
425
|
donem: z
|
|
@@ -445,6 +446,7 @@ const raporDilDenetle = arac({
|
|
|
445
446
|
},
|
|
446
447
|
});
|
|
447
448
|
export const ACIK_ARACLAR = [
|
|
449
|
+
akreditBaslaAraci,
|
|
448
450
|
olcutAra,
|
|
449
451
|
olcutGetir,
|
|
450
452
|
olgunlukDuzeyleri,
|
|
@@ -23,6 +23,19 @@ export declare const BLOOM_FIILLERI: {
|
|
|
23
23
|
}[];
|
|
24
24
|
/** Bir taslak bulgusunun hangi alana ait olduğu. "genel" birden çok alana değen bulgudur. */
|
|
25
25
|
export declare function bulguAlani(b: Bulgu): AlanKodu | "temel" | "genel";
|
|
26
|
+
declare const KaynakOgesi: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
27
|
+
kunye: z.ZodString;
|
|
28
|
+
dogrulama: z.ZodUnion<readonly [z.ZodLiteral<"hoca_beyani">, z.ZodObject<{
|
|
29
|
+
durum: z.ZodString;
|
|
30
|
+
baglanti: z.ZodString;
|
|
31
|
+
imza: z.ZodOptional<z.ZodString>;
|
|
32
|
+
}, z.core.$strip>]>;
|
|
33
|
+
}, z.core.$strip>]>;
|
|
34
|
+
export type KaynakOgesiT = z.infer<typeof KaynakOgesi>;
|
|
35
|
+
export type KaynakDurumu = "katalogda_bulundu" | "hoca_beyani" | "dogrulanmamis";
|
|
36
|
+
/** Kaynağın doğrulama durumu. Düz metin ya da imzası bu sürece ait olmayan kayıt doğrulanmamıştır. */
|
|
37
|
+
export declare function kaynakDurumu(k: KaynakOgesiT): KaynakDurumu;
|
|
38
|
+
export declare const kunyeMetni: (k: KaynakOgesiT) => string;
|
|
26
39
|
declare const TaslakAlanlari: z.ZodObject<{
|
|
27
40
|
amac: z.ZodOptional<z.ZodObject<{
|
|
28
41
|
tr: z.ZodString;
|
|
@@ -76,7 +89,19 @@ declare const TaslakAlanlari: z.ZodObject<{
|
|
|
76
89
|
}, z.core.$strip>>>;
|
|
77
90
|
katki: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodNumber, z.ZodNull, z.ZodLiteral<"">]>>>>;
|
|
78
91
|
ska: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
79
|
-
|
|
92
|
+
degerlendirmeDayanagi: z.ZodOptional<z.ZodEnum<{
|
|
93
|
+
sayfa: "sayfa";
|
|
94
|
+
oneri: "oneri";
|
|
95
|
+
hoca: "hoca";
|
|
96
|
+
}>>;
|
|
97
|
+
kaynaklar: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
98
|
+
kunye: z.ZodString;
|
|
99
|
+
dogrulama: z.ZodUnion<readonly [z.ZodLiteral<"hoca_beyani">, z.ZodObject<{
|
|
100
|
+
durum: z.ZodString;
|
|
101
|
+
baglanti: z.ZodString;
|
|
102
|
+
imza: z.ZodOptional<z.ZodString>;
|
|
103
|
+
}, z.core.$strip>]>;
|
|
104
|
+
}, z.core.$strip>]>>>;
|
|
80
105
|
kaynakSayisi: z.ZodOptional<z.ZodNumber>;
|
|
81
106
|
}, z.core.$strip>;
|
|
82
107
|
type TaslakAlanlariT = z.infer<typeof TaslakAlanlari>;
|
|
@@ -91,7 +116,8 @@ declare const DersTemeli: z.ZodObject<{
|
|
|
91
116
|
ad: z.ZodOptional<z.ZodString>;
|
|
92
117
|
akts: z.ZodOptional<z.ZodNumber>;
|
|
93
118
|
tul: z.ZodOptional<z.ZodString>;
|
|
94
|
-
bolen: z.
|
|
119
|
+
bolen: z.ZodOptional<z.ZodNumber>;
|
|
120
|
+
donem: z.ZodOptional<z.ZodString>;
|
|
95
121
|
yetkililer: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
96
122
|
rol: z.ZodString;
|
|
97
123
|
deger: z.ZodString;
|
|
@@ -114,6 +140,8 @@ export declare function bolognaHesabi(ders: DersTemeliT, alanlar: TaslakAlanlari
|
|
|
114
140
|
}[];
|
|
115
141
|
toplam: number;
|
|
116
142
|
hedef: number | null;
|
|
143
|
+
hedefAraligi: [number, number] | null;
|
|
144
|
+
aralikta: boolean | null;
|
|
117
145
|
fark: number | null;
|
|
118
146
|
aktsBasinaSaat: number | null;
|
|
119
147
|
dersSuresiHaftalikBeklenen: number | null;
|
|
@@ -173,6 +201,7 @@ export declare const bolognaDenetleAraci: AcikArac<z.ZodObject<{
|
|
|
173
201
|
}, z.core.$strip>>>;
|
|
174
202
|
matrisSatiri: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
175
203
|
aktsSaat: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
204
|
+
kurumBoleni: z.ZodOptional<z.ZodNumber>;
|
|
176
205
|
}, z.core.$strip>>;
|
|
177
206
|
/** Proliz sayfası mı: üst bilgi tablosu ("Yarıyıl, Kodu") ya da program çıktıları tablosu. */
|
|
178
207
|
export declare function prolizMi(html: string): boolean;
|
|
@@ -191,19 +220,72 @@ export declare function ayristirOnAyikla(g: unknown): {
|
|
|
191
220
|
atilan: string[];
|
|
192
221
|
ileti?: string;
|
|
193
222
|
};
|
|
194
|
-
|
|
195
|
-
|
|
223
|
+
export interface DegerlendirmeKalemi {
|
|
224
|
+
ad: string;
|
|
225
|
+
sayi?: number | null | undefined;
|
|
226
|
+
katki?: number | null | undefined;
|
|
227
|
+
}
|
|
228
|
+
interface Etkinlik {
|
|
229
|
+
ad: string;
|
|
230
|
+
sayi: number;
|
|
231
|
+
agirlik: number;
|
|
232
|
+
kaynak: string;
|
|
233
|
+
}
|
|
234
|
+
/** Değerlendirme kalemlerini iş yükü etkinliklerine çevirir. Eşleşmeyen kalem satır üretmez. */
|
|
235
|
+
export declare function etkinliklereCevir(deg: readonly DegerlendirmeKalemi[]): Etkinlik[];
|
|
236
|
+
export interface IsYukuSatiri {
|
|
237
|
+
ad: string;
|
|
238
|
+
sayi: number;
|
|
239
|
+
sure: number;
|
|
240
|
+
/** Değerin nereden geldiği: "sayfa (T+U+L)", "Değerlendirme kalemi: ..." ya da "Akredit önerisi". */
|
|
241
|
+
kaynak: string;
|
|
242
|
+
/** Hesabın varsayımı; hoca teyit eder. */
|
|
243
|
+
varsayim: string;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* İş yükü dağılım önerileri (deterministik). Satırlar yalnız ders süresi, haftalık çalışma ve verilen değerlendirme
|
|
247
|
+
* kalemlerinden kurulur. Kurum değeri (bolen) verildiyse toplam tam AKTS × bolen olmaya çalışılır; verilmediyse
|
|
248
|
+
* AKTS × 30 hedeflenir ve AKTS başına 25-30 saat aralığı kabul edilir.
|
|
249
|
+
*/
|
|
250
|
+
export declare function isYukuDagilimlari(akts: number, tul: string, hafta?: number, bolen?: number, degerlendirme?: readonly DegerlendirmeKalemi[]): {
|
|
196
251
|
secenek: number;
|
|
197
252
|
ad: string;
|
|
198
253
|
aciklama: string;
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
sayi: number;
|
|
202
|
-
sure: number;
|
|
203
|
-
}[];
|
|
254
|
+
etiket: string;
|
|
255
|
+
isyuku: IsYukuSatiri[];
|
|
204
256
|
toplam: number;
|
|
205
257
|
hedef: number;
|
|
258
|
+
kabulAraligi: [number, number];
|
|
206
259
|
tamEsit: boolean;
|
|
260
|
+
aralikta: boolean;
|
|
207
261
|
}[];
|
|
262
|
+
/**
|
|
263
|
+
* OBS'ye yazılan alanları geri okunan sayfa metniyle karşılaştırır. Ders kodu ya da dönem farklıysa durur:
|
|
264
|
+
* yanlış derse yazılmış olabilir.
|
|
265
|
+
*/
|
|
266
|
+
export declare function obsKarsilastir(g: {
|
|
267
|
+
dersKodu: string;
|
|
268
|
+
donem?: string | undefined;
|
|
269
|
+
beklenen: {
|
|
270
|
+
alan: string;
|
|
271
|
+
deger: string;
|
|
272
|
+
}[];
|
|
273
|
+
geriOkunan: {
|
|
274
|
+
metin: string;
|
|
275
|
+
dersKodu?: string | undefined;
|
|
276
|
+
donem?: string | undefined;
|
|
277
|
+
};
|
|
278
|
+
}): {
|
|
279
|
+
dur: boolean;
|
|
280
|
+
nedenler: string[];
|
|
281
|
+
eslesen: number;
|
|
282
|
+
farkli: number;
|
|
283
|
+
alanlar: {
|
|
284
|
+
alan: string;
|
|
285
|
+
durum: "bos" | "farkli" | "eslesti";
|
|
286
|
+
eksikParcalar: string[];
|
|
287
|
+
eksikParcaSayisi: number;
|
|
288
|
+
}[];
|
|
289
|
+
};
|
|
208
290
|
export declare const BOLOGNA_ARACLARI: readonly AcikArac[];
|
|
209
291
|
export {};
|