Przejdź do treści

KRET LANGUAGE ACADEMY · DOKUMENTACJA ZE ŹRÓDEŁ

Bramki uprawnień i modelu (bez prawdziwego modelu)

INTERMEDIATEVALIDATION_ONLYKretAI

`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.

Edycja i zapisane wyniki

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.

  1. kretai "1.0"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. Pusta linia oddziela fragmenty źródła.
  3. // Model lokalny: serwer modeli na tym komputerze (protokół chat/completions — llama.cpp server, Ollama, LM Studio).Komentarz autora; nie jest wykonywany.
  4. // 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.
  5. model local.small {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. provider "local"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  7. name "qwen2.5:7b"Pole tożsamości lub wersji w otaczającym bloku; zachowaj jego kontekst.
  8. endpoint "http://127.0.0.1:11434"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  9. dataPolicy "local-only"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  10. maxOutputTokens 1024Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  11. timeout 2minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  12. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  13. Pusta linia oddziela fragmenty źródła.
  14. tool counter.read {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  15. description "Odczytuje wartość licznika o podanej nazwie."Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  16. handler "Tools.readCounter"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  17. parameter name String "Nazwa licznika, np. orders"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  18. returns "Int64"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  19. permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  20. kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  21. kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  22. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  23. sideEffects "none"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  24. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  25. Pusta linia oddziela fragmenty źródła.
  26. tool counter.add {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  27. 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.
  28. handler "Tools.addCounter"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  29. parameter name String "Nazwa licznika"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  30. parameter amount Int64 "O ile zwiększyć"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  31. returns "Int64"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  32. permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  33. kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  34. kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  35. kretdb.writeOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  36. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  37. sideEffects "write"Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  38. requiresConfirmation trueOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  39. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  40. Pusta linia oddziela fragmenty źródła.
  41. // Agent tylko do odczytu.Komentarz autora; nie jest wykonywany.
  42. agent reader {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  43. model local.smallOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  44. 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.
  45. tools counter.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  46. permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  47. kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  48. kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  49. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  50. limits {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  51. maxSteps 4Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  52. maxToolCalls 8Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  53. timeout 2minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  54. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  55. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  56. Pusta linia oddziela fragmenty źródła.
  57. // Agent, który może zmieniać dane — każde wywołanie narzędzia zapisującego wymaga potwierdzenia.Komentarz autora; nie jest wykonywany.
  58. agent assistant {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  59. model local.smallOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  60. 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.
  61. tools counter.read counter.addOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  62. delegates readerOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  63. permissions {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  64. kretdb.openOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  65. kretdb.readOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  66. kretdb.writeOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  67. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  68. limits {Początek nazwanego bloku; jego pola odczytaj w powiązanej referencji.
  69. maxSteps 8Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  70. maxToolCalls 16Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  71. timeout 5minOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  72. maxTokens 200000Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  73. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  74. }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.

Na co uważać

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.

  1. ask-no-grantkret ai ask . --agent assistant --prompt test --data {DATA}/aKatalog: project · Oczekiwany kod wyjścia: 1
  2. ask-grant-no-modelkret 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.

  1. # EXPECTED_OUTPUT — KRETAI-I01-PermissionAndModelGatesOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  2. # 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.
  3. # Actual output of the run. Paths replaced by placeholders.Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  4. Pusta linia oddziela fragmenty źródła.
  5. ### 1. ask-no-grant (exit 1, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  6. > kret ai ask . --agent assistant --prompt test --data {DATA}/aOdczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  7. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  8. "agent": "assistant",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  9. "status": "PolicyDenied",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  10. "text": "",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  11. "code": "KCS-KAI-0302",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  12. "message": "agent assistant wymaga uprawnienia kretai.use, którego host nie przyznał",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  13. "steps": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  14. "toolCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  15. "inputTokens": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  16. "outputTokens": 0Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  17. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  18. Pusta linia oddziela fragmenty źródła.
  19. ### 2. ask-grant-no-model (exit 1, PASS)Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  20. > 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.
  21. {Odczytaj tę linię w kontekście otaczającego bloku i objaśnień autora poniżej.
  22. "agent": "assistant",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  23. "status": "ModelError",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  24. "text": "",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  25. "code": "KCS-KAI-0301",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  26. "message": "model local.small: błąd połączenia (ConnectionError)",Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  27. "steps": 1,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  28. "toolCalls": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  29. "inputTokens": 0,Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  30. "outputTokens": 0Pole danych JSON; znaczenie wynika z wersjonowanego schematu pliku.
  31. }Zamknięcie struktury otwartej we wcześniejszych liniach.
  32. Pusta linia oddziela fragmenty źródła.
  33. 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.

  1. 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 DC130532BC72C06B71F170E61500A9EEB7755BAB58B8941499973E9F591AB8FA

Materiał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.
PoleWartość
TechnologiaKretAI
PoziomINTERMEDIATE
KlasyfikacjaVALIDATION_ONLY — Tylko walidacja (bez wykonania)
PlaygroundLOCAL_VALIDATE — lokalnie: walidacja (kret check, lokalny walidator Playground)
SDK1.0.0-rc.3+kret.local.3 (kandydat lokalny, niepodpisany)
Wynik testuTEST_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.

  1. kret ai ask . --agent assistant --prompt test --data {DATA}/a — brak przyznania → KCS-KAI-0302 (oczekiwany błąd)
  2. 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.

Otwórz cały rozdział ze źródłem →

Zaloguj się na konto użytkownika, aby zapisywać postęp i zakładki. Konta obsługi mogą czytać bez zapisu postępu. Logowanie →

Wybierz, co możemy zapamiętać w tej przeglądarce. Możesz zmienić decyzję w każdej chwili.

Polityka prywatności