# IKT arhitektūra — Kultūras un valodu tehnoloģiju joma (SSOT) Šis repozitorijs uztur jomas mērķarhitektūru kā kodu (**"Architecture as Code"**), kur visa informācija tiek glabāta strukturēti, versēti un atkārtojami ģenerējama. Repozitorijs ir veidots kā **SSOT (Single Source of Truth)** — autoritatīvais saturs ir mašīnlasāmos YAML reģistros, bet cilvēklasāmais dokuments tiek ģenerēts no tiem. AI aģenti un automatizācijas rīki piekļūst šiem datiem caur MCP serveri. --- ## 1) Pamatideja (Architecture as Code) Šajā repozitorijā arhitektūra tiek uzturēta šādi: - **Skati (`views/`)** — cilvēklasāms dokuments (Markdown), kas nosaka dokumenta struktūru un stāstījumu - **Reģistri (`registers/`)** — mašīnlasāmi dati (YAML), kas ir autoritatīvais avots visām entītijām - **Diagrammas (`diagrams/`)** — Mermaid (šobrīd TODO vietturi) - **Attiecības (`registers/99-relations/edges.yaml`)** — grafiks starp entītijām (95 šķautnes) Repozitorijā visas entītijas tiek uzturētas kā **vienumi** (*items*), kuriem ir stabili identifikatori (ID) un atribūti. Piemēram, `sys.valoda.02` ir "Lielais latviešu valodas modelis (LVM-LV)", `goal.m4` ir "Latviešu valoda digitālajā laikmetā". --- ## 2) Repozitorija struktūra ``` . ├── domains/ │ └── kultura-valoda/ │ ├── manifest.yaml # Domēna manifests │ ├── views/ # Dokumenta skati (Markdown) │ │ ├── 01-ievads.md │ │ ├── 02-esosas-arhitekturas-novertejums.md │ │ ├── 03-merki-un-principi.md │ │ ├── 04-merk-arhitektura.md │ │ ├── 05-cela-karte.md │ │ └── 06-pielikums-komponentu-katalogs.md │ ├── registers/ # SSOT reģistri (YAML) │ │ ├── 00-meta/ # Termini, saīsinājumi, saistītie dokumenti │ │ ├── 02-goals/ # Stratēģiskie mērķi (M1–M6) │ │ ├── 03-organizations/ # Institūcijas, lomas, atbildības │ │ ├── 04-functions/ # Jomas funkcijas │ │ ├── 05-services/ # Pakalpojumi (kultūra + valoda) │ │ ├── 06-information-resources/ # Informācijas resursi │ │ ├── 07-systems/ # Informācijas sistēmas │ │ ├── 08-roadmap/ # Ceļa karte un mijiedarbības │ │ ├── 09-risks/ # Riski un mazināšanas pasākumi │ │ └── 99-relations/ # Attiecību grafiks (edges.yaml) │ └── diagrams/ # Mermaid diagrammas (TODO) ├── mcp/ # MCP serveris (AI aģentu interfeiss) ├── tools/ │ └── qa/ # Kvalitātes pārbaudes skripti └── docs/ ├── MCP.md # MCP servera dokumentācija ├── TRACEABILITY.md └── REGENERATION.md ``` --- ## 3) Skati (views/) — cilvēklasāms dokuments **Atrašanās vieta:** `domains/kultura-valoda/views/` Skati satur dokumenta nodaļu struktūru, virsrakstus un paskaidrojošu tekstu. Skatos ir atsauces uz reģistriem (backtick formātā), piemēram: ```md `registers/03-organizations/organizations.yaml` ``` Svarīgi: skatos nav jāuztur manuālas tabulas ar daudz vienumiem. Skati norāda "ko rādīt", bet saturs tiek ņemts no reģistriem. Dokumenta ģenerēšanas laikā atsauces tiek aizstātas ar reģistru saturu. Pieejamie skati: | Skats | Apraksts | |---|---| | `01-ievads.md` | Ievads, tvērums, termini | | `02-esosas-arhitekturas-novertejums.md` | Esošās arhitektūras novērtējums | | `03-merki-un-principi.md` | Mērķi (M1–M6) un arhitektūras principi | | `04-merk-arhitektura.md` | Mērķarhitektūra (funkcijas, pakalpojumi, sistēmas, IR) | | `05-cela-karte.md` | Ceļa karte, riski, mijiedarbības | | `06-pielikums-komponentu-katalogs.md` | Komponentu katalogs (pilns saraksts) | ## 4) Reģistri (registers/) — mašīnlasāmi dati **Atrašanās vieta:** `domains/kultura-valoda/registers/` Reģistri ir YAML faili, kas satur vienumus. Šie reģistri ir SSOT un ir autoritatīvais avots. | Reģistrs | Saturs | |---|---| | `00-meta/abbreviations.yaml` | Saīsinājumi | | `00-meta/terms.yaml` | Termini un definīcijas | | `00-meta/related-documents.yaml` | Saistītie dokumenti | | `00-meta/legal-acts.yaml` | Juridiskais regulējums (grupēts pa tēmām) | | `02-goals/goal-m1.yaml` … `goal-m6.yaml` | Stratēģiskie mērķi | | `03-organizations/organizations.yaml` | Institūcijas, lomas, atbildības | | `04-functions/functions.yaml` | Jomas funkcijas (6 gab.) | | `05-services/kultura-services.yaml` | Kultūras apakšjomas pakalpojumi (16 gab.) | | `05-services/valoda-services.yaml` | Valodu tehnoloģiju pakalpojumi (14 gab.) | | `06-information-resources/kultura-info-resources.yaml` | Kultūras informācijas resursi (15 gab.) | | `06-information-resources/valoda-info-resources.yaml` | Valodu tehnoloģiju IR (8 gab.) | | `07-systems/kultura-systems.yaml` | Kultūras IS (21 gab.) | | `07-systems/valoda-systems.yaml` | Valodu tehnoloģiju IS (11 gab.) | | `08-roadmap/roadmap.yaml` | Ceļa kartes pasākumi | | `08-roadmap/interactions.yaml` | Mijiedarbība ar citām jomām | | `09-risks/risks.yaml` | Riski un mazināšanas pasākumi | | `99-relations/edges.yaml` | Attiecību grafiks (95 šķautnes) | ## 5) Attiecības (edges.yaml) — grafiks starp vienumiem **Atrašanās vieta:** `domains/kultura-valoda/registers/99-relations/edges.yaml` Šis fails satur attiecības starp vienumiem. Katrai attiecībai ir `from`, `type` un `to` lauki. Pieejamie attiecību tipi: | Tips | Nozīme | |---|---| | `has_goal` | Domēnam ir mērķis | | `has_function` | Domēnam ir funkcija | | `has_service` | Domēnam ir pakalpojums | | `has_system` | Domēnam ir sistēma | | `has_information_resource` | Domēnam ir informācijas resurss | | `owns` / `manages` / `operates` | Organizācija ir īpašnieks / pārvaldītājs / operators | | `depends_on` | Atkarība starp komponentēm | | `implements` / `supports` / `enables` | Realizācijas un atbalsta saites | | `regulates` / `complies_with` | Regulējuma saites | Pašlaik visas 95 šķautnes ir tipa `domain.kultura-valoda → {entītija}`, veidojot zvaigznes topoloģiju. Nākotnē grafiks tiks papildināts ar organizāciju, sistēmu un pakalpojumu savstarpējām saitēm. ## 6) Diagrammas (diagrams/) — Mermaid TODO vietturi **Atrašanās vieta:** `domains/kultura-valoda/diagrams/` Diagrammas tiek uzturētas Mermaid formātā. Šobrīd tās ir vietturi (TODO), kas nākotnē tiks aizstātas ar ģenerētām vai manuāli veidotām vizualizācijām. --- ## 7) Kā ģenerēt cilvēklasāmo dokumentu no SSOT Repozitorijs nodrošina pilna mērķarhitektūras dokumenta automātisku ģenerēšanu no reģistriem un skatiem. ### 7.1 Priekšnosacījumi - Node.js 18+ (ieteicams Node 20) - npm ### 7.2 Uzstādīšana No repozitorija saknes: ```bash cd mcp npm install ``` ### 7.3 Dokumenta ģenerēšana (komandrinda) No repozitorija saknes: ```bash cd mcp REPO_ROOT="$(pwd)/.." DOMAIN_DIR="domains/kultura-valoda" OUT_FILE="KISC-merkarhitektura-apraksts.md" npm run gen:doc ``` Rezultāts: `KISC-merkarhitektura-apraksts.md` (repo saknē). ### 7.4 Dokumenta ģenerēšana caur MCP serveri (AI aģents) Ja MCP serveris darbojas, jebkurš AI aģents var ģenerēt dokumentu, izsaucot rīku `generate_document`: ``` Rīks: generate_document Parametri: format: "markdown" — Markdown formāts cilvēklasāmam dokumentam format: "json" — JSON formāts mašīnapstrādei sections: ["ievads", "arhitektura", "celakarte"] — konkrētas sadaļas (neobligāts) ``` Pilna dokumenta ģenerēšana (visas sadaļas): ``` generate_document(format="markdown") ``` Atsevišķu sadaļu ģenerēšana: ``` generate_document(format="markdown", sections=["ievads", "merki"]) ``` Pieejamās sadaļas: `ievads`, `esosa`, `merki`, `arhitektura`, `celakarte`, `katalogs`. Ģenerēšanas laikā tiek apvienoti visi skati (`views/`) ar tajā atsaucēto reģistru (`registers/`) saturu, veidojot vienotu, pilnu dokumentu. ### 7.5 Svarīgi par ģenerēto dokumentu - Ģenerētais dokuments ir **build artifact** — tas netiek rediģēts manuāli. - Izmaiņas vienmēr veic **reģistros** vai **skatos**, pēc tam atkārtoti ģenerē. - Katru reizi ģenerējot, dokuments atspoguļo aktuālo SSOT stāvokli. --- ## 8) Kvalitātes kontrole (QA) Repo ietver QA pārbaudes, lai nepieļautu satura zudumu. No repozitorija saknes: ```bash tools/qa/check_nonempty_registers.sh tools/qa/check_generated_doc_headings.sh KISC-merkarhitektura-apraksts.md tools/qa/check_stakeholder_count.sh KISC-merkarhitektura-apraksts.md ``` Ja QA neiziet — jālabo reģistri vai skati. Nedrīkst "saīsināt" saturu, lai tikai testi izietu. --- ## 9) MCP serveris — AI aģentu interfeiss MCP (Model Context Protocol) serveris nodrošina AI aģentiem strukturētu piekļuvi arhitektūras SSOT datiem. Serveris darbojas kā tikai-lasīšanas slānis — tas nemaina SSOT saturu. Detalizēta MCP servera dokumentācija, rīku apraksti, lietošanas scenāriji un piemēri ir pieejami atsevišķā dokumentā: 📖 **[docs/MCP.md](docs/MCP.md)** — pilna MCP servera dokumentācija ### 9.1 Īsumā par iespējām MCP serveris piedāvā **9 rīkus**, kas ļauj AI aģentiem: - Meklēt un izgūt jebkuru arhitektūras entītiju (mērķi, sistēmas, pakalpojumus, IR, riskus u.c.) - Analizēt attiecības starp entītijām (grafu vaicājumi) - Ģenerēt pilnu mērķarhitektūras dokumentu tieši no SSOT - Pārlūkot dokumenta skatus un metamodeli - Verificēt servera identitāti un uzticamību (MCPF trust framework) ### 9.2 Kā pieslēgties MCP serveris ir pieejams adresē: ``` https://llm.kis.gov.lv/mcp ``` Pieslēgšanās no Claude.ai: **Settings** → **Connectors** → **Add** → ievadiet URL. --- ## 10) MCP autentifikācija MCP serveris atbalsta **trīs autentifikācijas metodes**, kas var darboties vienlaicīgi (`AUTH_MODE=both`): 1. **Statiskais Bearer tokens** — vienkārša fiksēta atslēga 2. **OAuth 2.1 Authorization Code + PKCE** — interaktīva pieeja (Claude Desktop, pārlūkprogramma) 3. **OAuth 2.0 client_credentials** — mašīna-pret-mašīnu (API, skripti) ### 10.1 Statiskais Bearer tokens (vienkāršā pieeja) Iestatiet `.env`: ```env AUTH_REQUIRED=true AUTH_MODE=static # vai "both", lai darbotos visi veidi STATIC_BEARER_TOKEN=my-secret-token-here ``` Pieprasījuma piemērs: ```bash curl -H "Authorization: Bearer my-secret-token-here" \ http://localhost:8787/mcp ``` Šī metode ir piemērota iekšējai testēšanai un vienkāršiem integrācijas gadījumiem. ### 10.2 OAuth 2.1 — Authorization Code + PKCE (Claude Desktop) Šo plūsmu automātiski izmanto **Claude Desktop** un citi MCP klienti, kas atbalsta OAuth 2.1. Serveris implementē pilnu MCP autorizācijas specifikāciju: - **RFC 9728** — Protected Resource Metadata (`/.well-known/oauth-protected-resource`) - **RFC 8414** — Authorization Server Metadata (`/.well-known/oauth-authorization-server`) - **RFC 7591** — Dynamic Client Registration (`/register`) - **PKCE S256** — obligāts drošības mehānisms #### Konfigurācija (.env) ```env AUTH_REQUIRED=true AUTH_MODE=both SERVER_PUBLIC_URL=https://llm.kis.gov.lv:8787 # Pieteikšanās dati autorizācijas lapā OAUTH_LOGIN_USERNAME=admin OAUTH_LOGIN_PASSWORD=change-me ``` #### Pieslēgšanās no Claude Desktop 1. Claude Desktop → **Settings** → **Connectors** → **Add** 2. Ievadiet MCP servera URL: `https://llm.kis.gov.lv:8787/mcp` 3. Claude automātiski atklās OAuth galapunktus un atvērs pieteikšanās lapu pārlūkprogrammā 4. Ievadiet `OAUTH_LOGIN_USERNAME` / `OAUTH_LOGIN_PASSWORD` 5. Pēc autorizācijas Claude saņem JWT tokenu un izmanto to turpmākajos pieprasījumos #### Plūsmas secība (tehniski) ``` Claude Desktop MCP Server │ │ ├── POST /mcp (bez tokena) ──────────►│ │◄── 401 + WWW-Authenticate ─────────┤ │ │ ├── GET /.well-known/ │ │ oauth-protected-resource ───────►│ │◄── { authorization_servers: [...] } │ │ │ ├── GET /.well-known/ │ │ oauth-authorization-server ─────►│ │◄── { endpoints, PKCE, ... } │ │ │ ├── POST /register ─────────────────►│ │◄── { client_id, client_secret } │ │ │ ├── 🌐 Opens browser → /authorize ──►│ │ (user logs in with credentials) │ │◄── 302 redirect with ?code=... ────┤ │ │ ├── POST /token (code + PKCE) ──────►│ │◄── { access_token, refresh_token } │ │ │ ├── POST /mcp + Bearer token ────────►│ │◄── MCP response ──────────────────┤ ``` ### 10.3 OAuth 2.0 — client_credentials (mašīna-pret-mašīnu) Skriptiem un API integrācijām, kas neizmanto pārlūkprogrammu. #### Konfigurācija (.env) ```env OAUTH_CLIENT_ID=mcp-service-account OAUTH_CLIENT_SECRET=change-me-to-a-strong-secret ``` #### Tokena iegūšana ```bash # 1. Iegūt JWT tokenu TOKEN=$(curl -s -X POST https://llm.kis.gov.lv:8787/token \ -d grant_type=client_credentials \ -d client_id=mcp-service-account \ -d client_secret=change-me-to-a-strong-secret \ | jq -r .access_token) # 2. Lietot tokenu MCP pieprasījumos curl -H "Authorization: Bearer $TOKEN" \ https://llm.kis.gov.lv:8787/mcp ``` Tokens ir derīgs 1 stundu (3600 s). Pēc termiņa beigām iegūstiet jaunu. ### 10.4 Galapunkti | Galapunkts | Metode | Auth | Apraksts | |---|---|---|---| | `/health` | GET | Nē | Veselības pārbaude | | `/.well-known/oauth-protected-resource` | GET | Nē | RFC 9728 — resursa metadati | | `/.well-known/oauth-authorization-server` | GET | Nē | RFC 8414 — autorizācijas servera metadati | | `/.well-known/jwks.json` | GET | Nē | Publiskā atslēga JWT verifikācijai | | `/register` | POST | Nē | RFC 7591 — klienta dinamiskā reģistrācija | | `/authorize` | GET/POST | Nē | Autorizācijas lapa (login + consent) | | `/token` | POST | Nē | Tokenu izsniegšana (auth code, client_credentials, refresh) | | `/mcp` | POST/GET/DELETE | **Jā** | MCP servera galapunkts | ### 10.5 AUTH_MODE vērtības | Vērtība | Apraksts | |---|---| | `both` (noklusējums) | Pieņem statisko tokenu, OAuth JWT un auth code tokenu | | `static` | Tikai statiskais Bearer tokens | | `jwks` | Tikai OAuth/OIDC JWT (validēts ar JWKS) | ### 10.6 Ārējais identitātes nodrošinātājs (neobligāts) Ja izmantojat ārēju IDP (Auth0, Keycloak, Azure AD) papildus iebūvētajam OAuth: ```env OAUTH_JWKS_URL=https://your-idp/.well-known/jwks.json OAUTH_ISSUER=https://your-idp/ OAUTH_AUDIENCE=your-api-audience ``` --- ## 11) Darba kārtība (ieteicamais process) 1. Veic izmaiņas reģistros (`registers/`) 2. Ja vajag — koriģē struktūru skatos (`views/`) 3. Ģenerē dokumentu (`npm run gen:doc` vai `generate_document` caur MCP) 4. Palaid QA (`tools/qa/`) 5. Commit --- ## 12) Papildu materiāli - **[docs/MCP.md](docs/MCP.md)** — MCP servera dokumentācija (rīku apraksti, lietošanas scenāriji, piemēri) - `docs/TRACEABILITY.md` — izsekojamība starp sākotnējo dokumentu, reģistriem un ģenerēto rezultātu - `docs/REGENERATION.md` — regenerācijas procedūra un noteikumi