KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ
Bramki uprawnień i modelu (bez prawdziwego modelu)
`kret ai ask` pokazuje bramki przed jakimkolwiek połączeniem: bez przyznanych `kretai.use`/`kretai.model.use` → `KCS-KAI-0302`; z przyznaniem, ale bez lokalnego serwera modeli → `KCS-KAI-0301`. Oba wyniki są odmową — żadne dane nie opuszczają komputera.
Witryna nie wykonuje kodu ani nie prowadzi walidacji SDK. Wyniki poniżej pochodzą z eksportu określonej wersji i przestają opisywać kod po jego zmianie.
Kanoniczne pliki projektu
kretai "1.0"
// Model lokalny: serwer modeli na tym komputerze (protokół chat/completions — llama.cpp server, Ollama, LM Studio).
// Polityka „local-only”: brama wymusza, żeby połączenie kończyło się na adresie pętli zwrotnej — dane nie opuszczają komputera.
model local.small {
provider "local"
name "qwen2.5:7b"
endpoint "http://127.0.0.1:11434"
dataPolicy "local-only"
maxOutputTokens 1024
timeout 2min
}
tool counter.read {
description "Odczytuje wartość licznika o podanej nazwie."
handler "Tools.readCounter"
parameter name String "Nazwa licznika, np. orders"
returns "Int64"
permissions {
kretdb.open
kretdb.read
}
sideEffects "none"
}
tool counter.add {
description "Zwiększa licznik o podaną wartość i zwraca nowy stan."
handler "Tools.addCounter"
parameter name String "Nazwa licznika"
parameter amount Int64 "O ile zwiększyć"
returns "Int64"
permissions {
kretdb.open
kretdb.read
kretdb.write
}
sideEffects "write"
requiresConfirmation true
}
// Agent tylko do odczytu.
agent reader {
model local.small
system "Odpowiadasz krótko i tylko na podstawie danych z narzędzi."
tools counter.read
permissions {
kretdb.open
kretdb.read
}
limits {
maxSteps 4
maxToolCalls 8
timeout 2min
}
}
// Agent, który może zmieniać dane — każde wywołanie narzędzia zapisującego wymaga potwierdzenia.
agent assistant {
model local.small
system "Pomagasz prowadzić liczniki. Zanim coś zmienisz, sprawdź obecny stan."
tools counter.read counter.add
delegates reader
permissions {
kretdb.open
kretdb.read
kretdb.write
}
limits {
maxSteps 8
maxToolCalls 16
timeout 5min
maxTokens 200000
}
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
kretai "1.0"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.Pusta linia oddziela fragmenty źródła.// Model lokalny: serwer modeli na tym komputerze (protokół chat/completions — llama.cpp server, Ollama, LM Studio).Komentarz autora; nie jest wykonywany.// Polityka „local-only”: brama wymusza, żeby połączenie kończyło się na adresie pętli zwrotnej — dane nie opuszczają komputera.Komentarz autora; nie jest wykonywany.model local.small {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.provider "local"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.name "qwen2.5:7b"Pole tożsamości lub wersji w otaczającym bloku; zachowaj jego kontekst.endpoint "http://127.0.0.1:11434"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.dataPolicy "local-only"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.maxOutputTokens 1024Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.timeout 2minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.tool counter.read {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.description "Odczytuje wartość licznika o podanej nazwie."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.handler "Tools.readCounter"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.parameter name String "Nazwa licznika, np. orders"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.returns "Int64"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.sideEffects "none"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.tool counter.add {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.description "Zwiększa licznik o podaną wartość i zwraca nowy stan."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.handler "Tools.addCounter"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.parameter name String "Nazwa licznika"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.parameter amount Int64 "O ile zwiększyć"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.returns "Int64"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.kretdb.writeOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.sideEffects "write"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.requiresConfirmation trueOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.// Agent tylko do odczytu.Komentarz autora; nie jest wykonywany.agent reader {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.model local.smallOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.system "Odpowiadasz krótko i tylko na podstawie danych z narzędzi."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.tools counter.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.limits {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.maxSteps 4Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.maxToolCalls 8Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.timeout 2minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.// Agent, który może zmieniać dane — każde wywołanie narzędzia zapisującego wymaga potwierdzenia.Komentarz autora; nie jest wykonywany.agent assistant {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.model local.smallOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.system "Pomagasz prowadzić liczniki. Zanim coś zmienisz, sprawdź obecny stan."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.tools counter.read counter.addOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.delegates readerOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.kretdb.writeOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.limits {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.maxSteps 8Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.maxToolCalls 16Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.timeout 5minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.maxTokens 200000Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.}Zamknięcie struktury otwartej we wcześniejszych liniach.}Zamknięcie struktury otwartej we wcześniejszych liniach.
Wynik i typowy błąd
Oba polecenia kończą się kodem 1 z właściwym kodem KCS. To jest poprawne zachowanie bramek.
Uruchamianie tego przykładu przy działającym lokalnym serwerze modeli zmieni drugi wynik — wtedy test przestaje być „bez modelu”. Prawdziwy model wymaga osobnej zgody właściciela.
Wymagania wersji i procedura lokalna
- sdk
- 1.0.0-rc.3+kret.local.3
- sdkInfoReports
- 1.0.0-rc.3
- core
- 1.0.0-test.6.11-draft.1
- os
- Windows 11 x64
- dotnet
- .NET 10 runtime
Polecenia poniżej są instrukcją do samodzielnego wykonania z właściwym lokalnym SDK. DATA/OUT muszą wskazywać nowe katalogi testowe. Nie ma przycisku uruchamiania na serwerze.
- ask-no-grant
kret ai ask . --agent assistant --prompt test --data {DATA}/aKatalog: project · Oczekiwany kod wyjścia: 1 - ask-grant-no-model
kret ai ask . --agent assistant --prompt test --data {DATA}/b --grant kretai.use,kretai.model.use,kretdb.open,kretdb.read,kretdb.write,logs.own.writeKatalog: project · Oczekiwany kod wyjścia: 1
Wyniki zapisane w pakiecie źródłowym
To dowód z eksportu, nie wynik bieżącego wykonania w przeglądarce.
# EXPECTED_OUTPUT — KRETAI-I01-PermissionAndModelGates
# Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:21Z). Ścieżki zastąpione znacznikami <project>, <data>, <out>, <sdk>.
# Actual output of the run. Paths replaced by placeholders.
### 1. ask-no-grant (exit 1, PASS)
> kret ai ask . --agent assistant --prompt test --data {DATA}/a
{
"agent": "assistant",
"status": "PolicyDenied",
"text": "",
"code": "KCS-KAI-0302",
"message": "agent assistant wymaga uprawnienia kretai.use, którego host nie przyznał",
"steps": 0,
"toolCalls": 0,
"inputTokens": 0,
"outputTokens": 0
}
### 2. ask-grant-no-model (exit 1, PASS)
> kret ai ask . --agent assistant --prompt test --data {DATA}/b --grant kretai.use,kretai.model.use,kretdb.open,kretdb.read,kretdb.write,logs.own.write
{
"agent": "assistant",
"status": "ModelError",
"text": "",
"code": "KCS-KAI-0301",
"message": "model local.small: błąd połączenia (ConnectionError)",
"steps": 1,
"toolCalls": 0,
"inputTokens": 0,
"outputTokens": 0
}
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
# EXPECTED_OUTPUT — KRETAI-I01-PermissionAndModelGatesOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.# Rzeczywisty wynik uruchomienia (SDK 1.0.0-rc.3+kret.local.3, 2026-11-01T12:46:21Z). Ścieżki zastąpione znacznikami <project>, <data>, <out>, <sdk>.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.# Actual output of the run. Paths replaced by placeholders.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.Pusta linia oddziela fragmenty źródła.### 1. ask-no-grant (exit 1, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.> kret ai ask . --agent assistant --prompt test --data {DATA}/aOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."agent": "assistant",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."status": "PolicyDenied",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."text": "",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."code": "KCS-KAI-0302",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."message": "agent assistant wymaga uprawnienia kretai.use, którego host nie przyznał",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."steps": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."toolCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."inputTokens": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."outputTokens": 0Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.### 2. ask-grant-no-model (exit 1, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.> kret ai ask . --agent assistant --prompt test --data {DATA}/b --grant kretai.use,kretai.model.use,kretdb.open,kretdb.read,kretdb.write,logs.own.writeOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.{Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej."agent": "assistant",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."status": "ModelError",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."text": "",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."code": "KCS-KAI-0301",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."message": "model local.small: błąd połączenia (ConnectionError)",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."steps": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."toolCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."inputTokens": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku."outputTokens": 0Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.}Zamknięcie struktury otwartej we wcześniejszych liniach.Pusta linia oddziela fragmenty źródła.Pusta linia oddziela fragmenty źródła.
Diagnostyka i raporty testów
null
Czytanie kodu linia po linii
Objaśnienia struktury nie są walidacją semantyczną. Szczegółowy kontrakt opisują referencje i README przykładu.
nullOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
Pochodzenie i integralność
KRET_LANGUAGE_KRETAI.zip:KretAI/Examples/INTERMEDIATE_PermissionAndModelGates/example.json
02_PLAYGROUND/EXAMPLES/KRETAI-I01-PermissionAndModelGates.json
SHA-256 DC130532BC72C06B71F170E61500A9EEB7755BAB58B8941499973E9F591AB8FAMateriały źródłowe do tego tematu
Przeczytaj powiązane rozdziały. Kod i kontrakty zachowano z importu; historia źródeł jest dostępna przy każdym rozdziale.
KRETAI-I01-PermissionAndModelGates — Bramki uprawnień i modelu (bez prawdziwego modelu)
KRETAI-I01-PermissionAndModelGates — Bramki uprawnień i modelu (bez prawdziwego modelu)
🇬🇧 English version below.
| Pole | Wartość |
|---|---|
| Technologia | KretAI |
| Poziom | INTERMEDIATE |
| Klasyfikacja | VALIDATION_ONLY — Tylko walidacja (bez wykonania) |
| Playground | LOCAL_VALIDATE — lokalnie: walidacja (kret check, lokalny walidator Playground) |
| SDK | 1.0.0-rc.3+kret.local.3 (kandydat lokalny, niepodpisany) |
| Wynik testu | TEST_RESULTS.json, rzeczywisty wynik: EXPECTED_OUTPUT.txt |
Co pokazuje
kret ai ask pokazuje bramki przed jakimkolwiek połączeniem: bez przyznanych kretai.use/kretai.model.use → KCS-KAI-0302; z przyznaniem, ale bez lokalnego serwera modeli → KCS-KAI-0301. Oba wyniki są odmową — żadne dane nie opuszczają komputera.
Pliki
| Plik |
|---|
Ai/assistant.kretai |
Disk/Schema.kdb |
Script/Main.krs |
Script/Tools.krs |
host-policy.json |
plugin.kretl |
Jak uruchomić
Katalog roboczy: katalog tego przykładu. kret oznacza <SDK>\Compiler\kret.exe, kretui-host — <SDK>\UiHost\kretui-host.exe. {DATA} / {OUT} to nowe, puste katalogi poza projektem. Wymagania: REQUIREMENTS.md.
kret ai ask . --agent assistant --prompt test --data {DATA}/a— brak przyznania →KCS-KAI-0302(oczekiwany błąd)kret ai ask . --agent assistant --prompt test --data {DATA}/b --grant kretai.use,kretai.model.use,kretdb.open,kretdb.read,kretdb.write,logs.own.write— przyznanie, brak lokalnego serwera →KCS-KAI-0301(oczekiwany błąd)
Oczekiwany wynik
Oba polecenia kończą się kodem 1 z właściwym kodem KCS. To jest poprawne zachowanie bramek.
Najczęstszy błąd
Uruchamianie tego przykładu przy działającym lokalnym serwerze modeli zmieni drugi wynik — wtedy test przestaje być „bez modelu”. Prawdziwy model wymaga osobnej zgody właściciela.
Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →