archi-cli 0.2.2__tar.gz → 0.3.0__tar.gz
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.
- archi_cli-0.3.0/.gitignore +19 -0
- archi_cli-0.3.0/NOTICE +24 -0
- archi_cli-0.3.0/PKG-INFO +228 -0
- archi_cli-0.3.0/README.md +200 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/pyproject.toml +11 -5
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/cli.py +38 -6
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/discovery.py +19 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/render_html.py +25 -14
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/render_slides.py +10 -5
- archi_cli-0.2.2/.gitignore +0 -15
- archi_cli-0.2.2/NOTICE +0 -15
- archi_cli-0.2.2/PKG-INFO +0 -167
- archi_cli-0.2.2/README.md +0 -145
- {archi_cli-0.2.2 → archi_cli-0.3.0}/LICENSE +0 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/__init__.py +0 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/engine.py +0 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/links.py +0 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/model.py +0 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/normalize.py +0 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/render.py +0 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/validate.py +0 -0
- {archi_cli-0.2.2 → archi_cli-0.3.0}/tools/archi_tool/views.py +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Archi-backups en afgeleide artefacten
|
|
2
|
+
*.bak
|
|
3
|
+
output/
|
|
4
|
+
*.xml
|
|
5
|
+
*.svg
|
|
6
|
+
*.png
|
|
7
|
+
# behalve de schermafbeeldingen voor de README
|
|
8
|
+
!docs/img/*.png
|
|
9
|
+
|
|
10
|
+
# Python
|
|
11
|
+
__pycache__/
|
|
12
|
+
*.py[cod]
|
|
13
|
+
.venv/
|
|
14
|
+
.pytest_cache/
|
|
15
|
+
.ruff_cache/
|
|
16
|
+
dist/
|
|
17
|
+
|
|
18
|
+
# macOS
|
|
19
|
+
.DS_Store
|
archi_cli-0.3.0/NOTICE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
archi-cli
|
|
2
|
+
Copyright (c) 2026 Nederlandse Digitale Dienst
|
|
3
|
+
Licensed under the EUPL-1.2 (see LICENSE).
|
|
4
|
+
|
|
5
|
+
This tool downloads and drives the Archi engine for its `normalize` command.
|
|
6
|
+
Archi is a separate work and is not distributed as part of this package; it is
|
|
7
|
+
fetched at runtime from the official release on first use.
|
|
8
|
+
|
|
9
|
+
Archi, the ArchiMate modelling tool
|
|
10
|
+
Copyright (c) Phillip Beauvoir, Jean-Baptiste Sarrodie and contributors
|
|
11
|
+
Licensed under the MIT License
|
|
12
|
+
https://github.com/archimatetool/archi
|
|
13
|
+
|
|
14
|
+
The Archi distribution bundles an OpenJDK runtime; its own licensing applies to
|
|
15
|
+
that runtime.
|
|
16
|
+
|
|
17
|
+
The HTML views and slide decks load the NLDD Design System
|
|
18
|
+
(@nldd/design-system) from a CDN at view time. Its fonts (RijksSans) are
|
|
19
|
+
intended for publications by and on behalf of the Dutch central government;
|
|
20
|
+
see the design system's NOTICES.md for the conditions.
|
|
21
|
+
|
|
22
|
+
ArchiMate is a registered trademark of The Open Group. archi-cli is an
|
|
23
|
+
independent project and is not affiliated with or endorsed by The Open Group
|
|
24
|
+
or the Archi project.
|
archi_cli-0.3.0/PKG-INFO
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: archi-cli
|
|
3
|
+
Version: 0.3.0
|
|
4
|
+
Summary: Deterministische command line tool om native Archi-modellen (.archimate) te inspecteren, muteren, valideren en renderen
|
|
5
|
+
Project-URL: Homepage, https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting
|
|
6
|
+
Project-URL: Repository, https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting
|
|
7
|
+
Project-URL: Issues, https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/CHANGELOG.md
|
|
9
|
+
Author: Nederlandse Digitale Dienst
|
|
10
|
+
License-Expression: EUPL-1.2
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: archi,archimate,architecture-as-code,cli,enterprise-architecture,modeling
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: Information Technology
|
|
17
|
+
Classifier: Natural Language :: Dutch
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
24
|
+
Requires-Python: >=3.12
|
|
25
|
+
Requires-Dist: lxml>=6.1.3
|
|
26
|
+
Requires-Dist: typer>=0.26
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
|
|
29
|
+
# archi-cli
|
|
30
|
+
|
|
31
|
+
[](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/actions/workflows/ci.yml)
|
|
32
|
+
[](https://pypi.org/project/archi-cli/)
|
|
33
|
+
[](https://pypi.org/project/archi-cli/)
|
|
34
|
+
[](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE)
|
|
35
|
+
|
|
36
|
+
Houd je ArchiMate-model bij zoals code. `archi-cli` is een command line tool
|
|
37
|
+
voor native [Archi](https://www.archimatetool.com/)-modellen: je bekijkt,
|
|
38
|
+
wijzigt en controleert een `.archimate`-bestand vanuit de terminal, en
|
|
39
|
+
genereert er views, webpagina's en presentaties uit. Elke wijziging wordt
|
|
40
|
+
gevalideerd voordat hij wordt opgeslagen, zodat het model nooit kapot raakt.
|
|
41
|
+
Dat maakt de tool geschikt om samen met een AI-assistent aan een model te
|
|
42
|
+
werken, met git als geheugen.
|
|
43
|
+
|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
*Een slide uit het meegeleverde voorbeeld: de camera zoomt in op één
|
|
47
|
+
element en dimt de rest. Gegenereerd uit het model, zonder handwerk.*
|
|
48
|
+
|
|
49
|
+
## Wat het is, en wat niet
|
|
50
|
+
|
|
51
|
+
**Wel:**
|
|
52
|
+
|
|
53
|
+
- Een **command line tool** die het native Archi-formaat leest en schrijft. Het
|
|
54
|
+
bestand blijft gewoon te openen en te bewerken in Archi.
|
|
55
|
+
- Een **vangnet**. Elke mutatie wordt eerst in het geheugen gevalideerd; bij een
|
|
56
|
+
fout weigert de tool op te slaan. Ids blijven onveranderd.
|
|
57
|
+
- **Deterministisch.** Dezelfde invoer geeft dezelfde uitvoer, zodat diffs klein
|
|
58
|
+
blijven en je de uitvoer in CI kunt controleren.
|
|
59
|
+
- Een set **skills voor Claude Code** die beschrijven hoe een AI-assistent via
|
|
60
|
+
deze tool aan een model werkt.
|
|
61
|
+
|
|
62
|
+
**Niet:**
|
|
63
|
+
|
|
64
|
+
- **Geen vervanging van Archi.** Vrij modelleren op het canvas en de layout van
|
|
65
|
+
een view fijnslijpen doe je in Archi. De tool en Archi werken op hetzelfde
|
|
66
|
+
bestand en vullen elkaar aan.
|
|
67
|
+
- **Geen ArchiMate-validator.** `archi validate` controleert de integriteit van
|
|
68
|
+
het bestand en je eigen conventies, niet of een relatie volgens de
|
|
69
|
+
ArchiMate-specificatie is toegestaan.
|
|
70
|
+
- **Geen AI.** De tool zelf bevat geen AI en stuurt je model nergens heen. Alleen
|
|
71
|
+
het eenmalig ophalen van de Archi-engine gebruikt het netwerk.
|
|
72
|
+
- **Geen officieel product of standaard.** Het is open source software in de
|
|
73
|
+
bètafase, zonder garanties of ondersteuningsafspraken.
|
|
74
|
+
|
|
75
|
+
## Snel aan de slag
|
|
76
|
+
|
|
77
|
+
Je hebt [uv](https://docs.astral.sh/uv/) nodig; uv regelt zelf een passende
|
|
78
|
+
Python (3.12 of nieuwer).
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
uv tool install archi-cli
|
|
82
|
+
archi --version
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Probeer het op het meegeleverde voorbeeld, een fictief model van een gemeente
|
|
86
|
+
die vergunningen verleent:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
git clone https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting.git
|
|
90
|
+
cd ai-assisted-architecting/examples/vergunningverlening
|
|
91
|
+
archi stats # wat zit er in het model
|
|
92
|
+
archi show "Toetsen aan regels" # één element met zijn relaties
|
|
93
|
+
archi render # views en slides naar views/
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Open daarna `views/html/index.html` in je browser. De Mermaid-versies van de
|
|
97
|
+
views staan [hier op GitHub](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/examples/vergunningverlening/views/README.md) al
|
|
98
|
+
gerenderd.
|
|
99
|
+
|
|
100
|
+
Voor je eigen model: draai `archi` in de map met je `.archimate`-bestand, of
|
|
101
|
+
leg het vast in een `archi.toml` (zie [Configuratie](#configuratie)).
|
|
102
|
+
|
|
103
|
+
## Wat je ermee kunt
|
|
104
|
+
|
|
105
|
+
| Taak | Commando's |
|
|
106
|
+
| --- | --- |
|
|
107
|
+
| Inspecteren | `stats`, `list`, `show`, `tree` |
|
|
108
|
+
| Wijzigen | `add-element`, `add-relation`, `set-property`, `remove-property`, `set-documentation`, `rename`, `move`, `remove`, `set-model-name` |
|
|
109
|
+
| Views genereren | `add-view` met grid- of clusterlayout, geselecteerd op type, property, relatie of vanuit één element |
|
|
110
|
+
| Controleren | `validate` |
|
|
111
|
+
| Normaliseren | `normalize` |
|
|
112
|
+
| Publiceren | `render` (views) en `slides` (presentaties) |
|
|
113
|
+
|
|
114
|
+
`archi <commando> --help` toont alle opties. Een paar voorbeelden:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
archi add-element --type Capability --name "Toezicht" --documentation "Naleving controleren."
|
|
118
|
+
archi add-relation --type Aggregation --source "Vergunningverlening" --target "Toezicht"
|
|
119
|
+
archi move "Toezicht" --subfolder "Gebied handhaving" --create-subfolder
|
|
120
|
+
archi add-view --name "Capabilities" --layout cluster --type Capability
|
|
121
|
+
archi remove "Toezicht" --cascade # ook relaties en view-objecten
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Controleren.** `archi validate` vindt onder meer dubbele ids, relaties naar
|
|
125
|
+
elementen die niet bestaan, elementen in de verkeerde laagmap, kapotte views en
|
|
126
|
+
property-keys die niet in je conventielijst staan. Mutaties draaien dezelfde
|
|
127
|
+
controles automatisch.
|
|
128
|
+
|
|
129
|
+
**Normaliseren.** `archi normalize` laat Archi zelf het bestand opnieuw wegschrijven,
|
|
130
|
+
in zijn eigen canonieke vorm. Zo blijven git-diffs klein, of een wijziging nu
|
|
131
|
+
uit de tool of uit Archi komt. De Archi-engine haalt de tool bij het eerste
|
|
132
|
+
gebruik zelf op en controleert de download.
|
|
133
|
+
|
|
134
|
+
**Publiceren.** `archi render` zet elke view om naar Mermaid (dat GitHub direct
|
|
135
|
+
toont) en naar een webpagina met de layout en de ArchiMate-notatie uit het
|
|
136
|
+
model, gestileerd met het [NLDD Design System](https://github.com/NederlandseDigitaleDienst/design-system).
|
|
137
|
+
Een indexpagina toont alle views met een miniatuur.
|
|
138
|
+
|
|
139
|
+

|
|
140
|
+
|
|
141
|
+
**Presenteren.** Een deck in `decks/*.toml` beschrijft een lineair verhaal met
|
|
142
|
+
views uit het model, afgewisseld met tekst. `archi slides` maakt er een
|
|
143
|
+
zelfstandige HTML-presentatie van, met zoom-op-een-element, sprekersnotities en
|
|
144
|
+
volledig scherm. Zie [het voorbeelddeck](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/examples/vergunningverlening/decks/rondleiding.toml).
|
|
145
|
+
|
|
146
|
+
**Doorklikken.** Met een links-bestand worden elementen in de webpagina's
|
|
147
|
+
klikbaar naar een andere view of een ander bestand, bijvoorbeeld een diagram
|
|
148
|
+
dat je met eigen scripts maakt. Zie [ADR 0010](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/adr/0010-doorklikken-via-links-bestand.md).
|
|
149
|
+
|
|
150
|
+

|
|
151
|
+
|
|
152
|
+
## Configuratie
|
|
153
|
+
|
|
154
|
+
De tool zoekt het model in deze volgorde: de optie `--model <pad>` (vóór het
|
|
155
|
+
subcommando), de sleutel `model` in een `archi.toml` (in de werkmap of een map
|
|
156
|
+
erboven), of het enige `.archimate`-bestand in de werkmap.
|
|
157
|
+
|
|
158
|
+
```toml
|
|
159
|
+
# archi.toml
|
|
160
|
+
[tool.archi]
|
|
161
|
+
model = "model/architectuur.archimate"
|
|
162
|
+
conventions = "docs/conventies.md" # toegestane property-keys
|
|
163
|
+
links = "links.toml" # doorkliks in de webpagina's
|
|
164
|
+
fonts = "system" # of "rijkssans", zie hieronder
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Alle sleutels zijn optioneel. Dezelfde tabel mag ook in een `pyproject.toml`.
|
|
168
|
+
|
|
169
|
+
**Lettertype.** De webpagina's gebruiken standaard het systeemlettertype.
|
|
170
|
+
RijksSans is uitsluitend bedoeld voor publicaties van de Rijksoverheid en
|
|
171
|
+
partijen die in haar opdracht werken; valt jouw publicatie daaronder, zet dan
|
|
172
|
+
`fonts = "rijkssans"`.
|
|
173
|
+
|
|
174
|
+
## Werken met een AI-assistent
|
|
175
|
+
|
|
176
|
+
De skills `archi-model`, `archi-view` en `archi-slides` leren een AI-assistent
|
|
177
|
+
hoe hij via deze tool aan een model werkt: welke commando's, in welke
|
|
178
|
+
volgorde, en wanneer hij moet valideren en normaliseren. Installeer ze in
|
|
179
|
+
Claude Code als plugin:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
/plugin marketplace add BureauArchitectuurDigitaleOverheid/ai-assisted-architecting
|
|
183
|
+
/plugin install archi-tools@archi-marketplace
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
De plugin brengt alleen de skills mee; het commando `archi` installeer je met
|
|
187
|
+
uv, zoals hierboven. De tool garandeert dat het model technisch klopt, niet dat
|
|
188
|
+
de architectuur klopt. Lees wijzigingen van een assistent na zoals je een pull
|
|
189
|
+
request van een collega naleest.
|
|
190
|
+
|
|
191
|
+
## Grenzen en bekende beperkingen
|
|
192
|
+
|
|
193
|
+
- **Alleen het native Archi-formaat** (`.archimate`). Het Open Group
|
|
194
|
+
Exchange-formaat wordt niet gelezen of geschreven.
|
|
195
|
+
- **`normalize` heeft de Archi-engine nodig** (ongeveer 165 MB, eenmalig).
|
|
196
|
+
Archi levert die voor macOS (Intel en Apple Silicon) en voor 64-bit x86 op
|
|
197
|
+
Linux en Windows. Op andere platforms installeer je Archi zelf en wijs je hem
|
|
198
|
+
aan met de omgevingsvariabele `ARCHI_APP`. Alle andere commando's werken
|
|
199
|
+
zonder Archi.
|
|
200
|
+
- **Automatische layout is een startpunt.** `add-view` plaatst elementen in een
|
|
201
|
+
raster of in clusters; bij grotere views schuif je in Archi nog wat bij.
|
|
202
|
+
- **Niet alles wordt gerenderd.** Sketch- en canvasviews, afbeeldingen en eigen
|
|
203
|
+
kleuren en lettertypes uit Archi komen niet in de webpagina's.
|
|
204
|
+
- **De webpagina's laden het design system van een CDN** en hebben dus internet
|
|
205
|
+
nodig om goed te tonen.
|
|
206
|
+
- **Uitvoer en meldingen zijn Nederlandstalig.**
|
|
207
|
+
|
|
208
|
+
## Disclaimer
|
|
209
|
+
|
|
210
|
+
Deze software wordt geleverd zoals hij is, zonder enige garantie; zie de
|
|
211
|
+
artikelen 7 en 8 van de [EUPL-1.2](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE). De tool is in bètafase: tot versie
|
|
212
|
+
1.0 kunnen commando's en uitvoer nog veranderen. Elke wijziging die je moet
|
|
213
|
+
weten staat in de [changelog](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/CHANGELOG.md).
|
|
214
|
+
|
|
215
|
+
ArchiMate is een geregistreerd handelsmerk van The Open Group. Dit project is
|
|
216
|
+
onafhankelijk en niet verbonden aan The Open Group of het Archi-project.
|
|
217
|
+
|
|
218
|
+
## Meedoen
|
|
219
|
+
|
|
220
|
+
Bijdragen zijn welkom: lees [CONTRIBUTING.md](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/CONTRIBUTING.md) voor de
|
|
221
|
+
werkwijze en de [gedragscode](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/CODE_OF_CONDUCT.md). Een beveiligingsprobleem meld
|
|
222
|
+
je volgens [SECURITY.md](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/SECURITY.md), niet in een openbaar issue.
|
|
223
|
+
Beslissingen over de opzet van de tool staan als ADR's in [`adr/`](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/tree/main/adr/).
|
|
224
|
+
|
|
225
|
+
## Licentie
|
|
226
|
+
|
|
227
|
+
[EUPL-1.2](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE). Ontwikkeld door de Nederlandse Digitale Dienst. Archi
|
|
228
|
+
zelf valt onder de MIT-licentie; zie [NOTICE](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/NOTICE).
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# archi-cli
|
|
2
|
+
|
|
3
|
+
[](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/archi-cli/)
|
|
5
|
+
[](https://pypi.org/project/archi-cli/)
|
|
6
|
+
[](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE)
|
|
7
|
+
|
|
8
|
+
Houd je ArchiMate-model bij zoals code. `archi-cli` is een command line tool
|
|
9
|
+
voor native [Archi](https://www.archimatetool.com/)-modellen: je bekijkt,
|
|
10
|
+
wijzigt en controleert een `.archimate`-bestand vanuit de terminal, en
|
|
11
|
+
genereert er views, webpagina's en presentaties uit. Elke wijziging wordt
|
|
12
|
+
gevalideerd voordat hij wordt opgeslagen, zodat het model nooit kapot raakt.
|
|
13
|
+
Dat maakt de tool geschikt om samen met een AI-assistent aan een model te
|
|
14
|
+
werken, met git als geheugen.
|
|
15
|
+
|
|
16
|
+

|
|
17
|
+
|
|
18
|
+
*Een slide uit het meegeleverde voorbeeld: de camera zoomt in op één
|
|
19
|
+
element en dimt de rest. Gegenereerd uit het model, zonder handwerk.*
|
|
20
|
+
|
|
21
|
+
## Wat het is, en wat niet
|
|
22
|
+
|
|
23
|
+
**Wel:**
|
|
24
|
+
|
|
25
|
+
- Een **command line tool** die het native Archi-formaat leest en schrijft. Het
|
|
26
|
+
bestand blijft gewoon te openen en te bewerken in Archi.
|
|
27
|
+
- Een **vangnet**. Elke mutatie wordt eerst in het geheugen gevalideerd; bij een
|
|
28
|
+
fout weigert de tool op te slaan. Ids blijven onveranderd.
|
|
29
|
+
- **Deterministisch.** Dezelfde invoer geeft dezelfde uitvoer, zodat diffs klein
|
|
30
|
+
blijven en je de uitvoer in CI kunt controleren.
|
|
31
|
+
- Een set **skills voor Claude Code** die beschrijven hoe een AI-assistent via
|
|
32
|
+
deze tool aan een model werkt.
|
|
33
|
+
|
|
34
|
+
**Niet:**
|
|
35
|
+
|
|
36
|
+
- **Geen vervanging van Archi.** Vrij modelleren op het canvas en de layout van
|
|
37
|
+
een view fijnslijpen doe je in Archi. De tool en Archi werken op hetzelfde
|
|
38
|
+
bestand en vullen elkaar aan.
|
|
39
|
+
- **Geen ArchiMate-validator.** `archi validate` controleert de integriteit van
|
|
40
|
+
het bestand en je eigen conventies, niet of een relatie volgens de
|
|
41
|
+
ArchiMate-specificatie is toegestaan.
|
|
42
|
+
- **Geen AI.** De tool zelf bevat geen AI en stuurt je model nergens heen. Alleen
|
|
43
|
+
het eenmalig ophalen van de Archi-engine gebruikt het netwerk.
|
|
44
|
+
- **Geen officieel product of standaard.** Het is open source software in de
|
|
45
|
+
bètafase, zonder garanties of ondersteuningsafspraken.
|
|
46
|
+
|
|
47
|
+
## Snel aan de slag
|
|
48
|
+
|
|
49
|
+
Je hebt [uv](https://docs.astral.sh/uv/) nodig; uv regelt zelf een passende
|
|
50
|
+
Python (3.12 of nieuwer).
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uv tool install archi-cli
|
|
54
|
+
archi --version
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Probeer het op het meegeleverde voorbeeld, een fictief model van een gemeente
|
|
58
|
+
die vergunningen verleent:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git clone https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting.git
|
|
62
|
+
cd ai-assisted-architecting/examples/vergunningverlening
|
|
63
|
+
archi stats # wat zit er in het model
|
|
64
|
+
archi show "Toetsen aan regels" # één element met zijn relaties
|
|
65
|
+
archi render # views en slides naar views/
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Open daarna `views/html/index.html` in je browser. De Mermaid-versies van de
|
|
69
|
+
views staan [hier op GitHub](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/examples/vergunningverlening/views/README.md) al
|
|
70
|
+
gerenderd.
|
|
71
|
+
|
|
72
|
+
Voor je eigen model: draai `archi` in de map met je `.archimate`-bestand, of
|
|
73
|
+
leg het vast in een `archi.toml` (zie [Configuratie](#configuratie)).
|
|
74
|
+
|
|
75
|
+
## Wat je ermee kunt
|
|
76
|
+
|
|
77
|
+
| Taak | Commando's |
|
|
78
|
+
| --- | --- |
|
|
79
|
+
| Inspecteren | `stats`, `list`, `show`, `tree` |
|
|
80
|
+
| Wijzigen | `add-element`, `add-relation`, `set-property`, `remove-property`, `set-documentation`, `rename`, `move`, `remove`, `set-model-name` |
|
|
81
|
+
| Views genereren | `add-view` met grid- of clusterlayout, geselecteerd op type, property, relatie of vanuit één element |
|
|
82
|
+
| Controleren | `validate` |
|
|
83
|
+
| Normaliseren | `normalize` |
|
|
84
|
+
| Publiceren | `render` (views) en `slides` (presentaties) |
|
|
85
|
+
|
|
86
|
+
`archi <commando> --help` toont alle opties. Een paar voorbeelden:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
archi add-element --type Capability --name "Toezicht" --documentation "Naleving controleren."
|
|
90
|
+
archi add-relation --type Aggregation --source "Vergunningverlening" --target "Toezicht"
|
|
91
|
+
archi move "Toezicht" --subfolder "Gebied handhaving" --create-subfolder
|
|
92
|
+
archi add-view --name "Capabilities" --layout cluster --type Capability
|
|
93
|
+
archi remove "Toezicht" --cascade # ook relaties en view-objecten
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Controleren.** `archi validate` vindt onder meer dubbele ids, relaties naar
|
|
97
|
+
elementen die niet bestaan, elementen in de verkeerde laagmap, kapotte views en
|
|
98
|
+
property-keys die niet in je conventielijst staan. Mutaties draaien dezelfde
|
|
99
|
+
controles automatisch.
|
|
100
|
+
|
|
101
|
+
**Normaliseren.** `archi normalize` laat Archi zelf het bestand opnieuw wegschrijven,
|
|
102
|
+
in zijn eigen canonieke vorm. Zo blijven git-diffs klein, of een wijziging nu
|
|
103
|
+
uit de tool of uit Archi komt. De Archi-engine haalt de tool bij het eerste
|
|
104
|
+
gebruik zelf op en controleert de download.
|
|
105
|
+
|
|
106
|
+
**Publiceren.** `archi render` zet elke view om naar Mermaid (dat GitHub direct
|
|
107
|
+
toont) en naar een webpagina met de layout en de ArchiMate-notatie uit het
|
|
108
|
+
model, gestileerd met het [NLDD Design System](https://github.com/NederlandseDigitaleDienst/design-system).
|
|
109
|
+
Een indexpagina toont alle views met een miniatuur.
|
|
110
|
+
|
|
111
|
+

|
|
112
|
+
|
|
113
|
+
**Presenteren.** Een deck in `decks/*.toml` beschrijft een lineair verhaal met
|
|
114
|
+
views uit het model, afgewisseld met tekst. `archi slides` maakt er een
|
|
115
|
+
zelfstandige HTML-presentatie van, met zoom-op-een-element, sprekersnotities en
|
|
116
|
+
volledig scherm. Zie [het voorbeelddeck](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/examples/vergunningverlening/decks/rondleiding.toml).
|
|
117
|
+
|
|
118
|
+
**Doorklikken.** Met een links-bestand worden elementen in de webpagina's
|
|
119
|
+
klikbaar naar een andere view of een ander bestand, bijvoorbeeld een diagram
|
|
120
|
+
dat je met eigen scripts maakt. Zie [ADR 0010](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/adr/0010-doorklikken-via-links-bestand.md).
|
|
121
|
+
|
|
122
|
+

|
|
123
|
+
|
|
124
|
+
## Configuratie
|
|
125
|
+
|
|
126
|
+
De tool zoekt het model in deze volgorde: de optie `--model <pad>` (vóór het
|
|
127
|
+
subcommando), de sleutel `model` in een `archi.toml` (in de werkmap of een map
|
|
128
|
+
erboven), of het enige `.archimate`-bestand in de werkmap.
|
|
129
|
+
|
|
130
|
+
```toml
|
|
131
|
+
# archi.toml
|
|
132
|
+
[tool.archi]
|
|
133
|
+
model = "model/architectuur.archimate"
|
|
134
|
+
conventions = "docs/conventies.md" # toegestane property-keys
|
|
135
|
+
links = "links.toml" # doorkliks in de webpagina's
|
|
136
|
+
fonts = "system" # of "rijkssans", zie hieronder
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Alle sleutels zijn optioneel. Dezelfde tabel mag ook in een `pyproject.toml`.
|
|
140
|
+
|
|
141
|
+
**Lettertype.** De webpagina's gebruiken standaard het systeemlettertype.
|
|
142
|
+
RijksSans is uitsluitend bedoeld voor publicaties van de Rijksoverheid en
|
|
143
|
+
partijen die in haar opdracht werken; valt jouw publicatie daaronder, zet dan
|
|
144
|
+
`fonts = "rijkssans"`.
|
|
145
|
+
|
|
146
|
+
## Werken met een AI-assistent
|
|
147
|
+
|
|
148
|
+
De skills `archi-model`, `archi-view` en `archi-slides` leren een AI-assistent
|
|
149
|
+
hoe hij via deze tool aan een model werkt: welke commando's, in welke
|
|
150
|
+
volgorde, en wanneer hij moet valideren en normaliseren. Installeer ze in
|
|
151
|
+
Claude Code als plugin:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
/plugin marketplace add BureauArchitectuurDigitaleOverheid/ai-assisted-architecting
|
|
155
|
+
/plugin install archi-tools@archi-marketplace
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
De plugin brengt alleen de skills mee; het commando `archi` installeer je met
|
|
159
|
+
uv, zoals hierboven. De tool garandeert dat het model technisch klopt, niet dat
|
|
160
|
+
de architectuur klopt. Lees wijzigingen van een assistent na zoals je een pull
|
|
161
|
+
request van een collega naleest.
|
|
162
|
+
|
|
163
|
+
## Grenzen en bekende beperkingen
|
|
164
|
+
|
|
165
|
+
- **Alleen het native Archi-formaat** (`.archimate`). Het Open Group
|
|
166
|
+
Exchange-formaat wordt niet gelezen of geschreven.
|
|
167
|
+
- **`normalize` heeft de Archi-engine nodig** (ongeveer 165 MB, eenmalig).
|
|
168
|
+
Archi levert die voor macOS (Intel en Apple Silicon) en voor 64-bit x86 op
|
|
169
|
+
Linux en Windows. Op andere platforms installeer je Archi zelf en wijs je hem
|
|
170
|
+
aan met de omgevingsvariabele `ARCHI_APP`. Alle andere commando's werken
|
|
171
|
+
zonder Archi.
|
|
172
|
+
- **Automatische layout is een startpunt.** `add-view` plaatst elementen in een
|
|
173
|
+
raster of in clusters; bij grotere views schuif je in Archi nog wat bij.
|
|
174
|
+
- **Niet alles wordt gerenderd.** Sketch- en canvasviews, afbeeldingen en eigen
|
|
175
|
+
kleuren en lettertypes uit Archi komen niet in de webpagina's.
|
|
176
|
+
- **De webpagina's laden het design system van een CDN** en hebben dus internet
|
|
177
|
+
nodig om goed te tonen.
|
|
178
|
+
- **Uitvoer en meldingen zijn Nederlandstalig.**
|
|
179
|
+
|
|
180
|
+
## Disclaimer
|
|
181
|
+
|
|
182
|
+
Deze software wordt geleverd zoals hij is, zonder enige garantie; zie de
|
|
183
|
+
artikelen 7 en 8 van de [EUPL-1.2](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE). De tool is in bètafase: tot versie
|
|
184
|
+
1.0 kunnen commando's en uitvoer nog veranderen. Elke wijziging die je moet
|
|
185
|
+
weten staat in de [changelog](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/CHANGELOG.md).
|
|
186
|
+
|
|
187
|
+
ArchiMate is een geregistreerd handelsmerk van The Open Group. Dit project is
|
|
188
|
+
onafhankelijk en niet verbonden aan The Open Group of het Archi-project.
|
|
189
|
+
|
|
190
|
+
## Meedoen
|
|
191
|
+
|
|
192
|
+
Bijdragen zijn welkom: lees [CONTRIBUTING.md](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/CONTRIBUTING.md) voor de
|
|
193
|
+
werkwijze en de [gedragscode](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/CODE_OF_CONDUCT.md). Een beveiligingsprobleem meld
|
|
194
|
+
je volgens [SECURITY.md](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/SECURITY.md), niet in een openbaar issue.
|
|
195
|
+
Beslissingen over de opzet van de tool staan als ADR's in [`adr/`](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/tree/main/adr/).
|
|
196
|
+
|
|
197
|
+
## Licentie
|
|
198
|
+
|
|
199
|
+
[EUPL-1.2](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE). Ontwikkeld door de Nederlandse Digitale Dienst. Archi
|
|
200
|
+
zelf valt onder de MIT-licentie; zie [NOTICE](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/NOTICE).
|
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "archi-cli"
|
|
3
|
-
version = "0.
|
|
4
|
-
description = "
|
|
3
|
+
version = "0.3.0"
|
|
4
|
+
description = "Deterministische command line tool om native Archi-modellen (.archimate) te inspecteren, muteren, valideren en renderen"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "EUPL-1.2"
|
|
7
7
|
license-files = ["LICENSE"]
|
|
8
8
|
requires-python = ">=3.12"
|
|
9
9
|
authors = [
|
|
10
|
-
{ name = "
|
|
10
|
+
{ name = "Nederlandse Digitale Dienst" },
|
|
11
11
|
]
|
|
12
|
-
keywords = ["archimate", "archi", "enterprise-architecture", "cli", "modeling"]
|
|
12
|
+
keywords = ["archimate", "archi", "enterprise-architecture", "cli", "modeling", "architecture-as-code"]
|
|
13
13
|
classifiers = [
|
|
14
14
|
"Development Status :: 4 - Beta",
|
|
15
15
|
"Environment :: Console",
|
|
16
16
|
"Intended Audience :: Developers",
|
|
17
|
-
"
|
|
17
|
+
"Intended Audience :: Information Technology",
|
|
18
|
+
"Natural Language :: Dutch",
|
|
19
|
+
"Operating System :: OS Independent",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
18
21
|
"Programming Language :: Python :: 3.12",
|
|
19
22
|
"Programming Language :: Python :: 3.13",
|
|
23
|
+
"Programming Language :: Python :: 3.14",
|
|
24
|
+
"Topic :: Software Development :: Documentation",
|
|
20
25
|
]
|
|
21
26
|
# lxml 6.1.3 stops resolving external parameter entities by default
|
|
22
27
|
dependencies = ["lxml>=6.1.3", "typer>=0.26"]
|
|
@@ -25,6 +30,7 @@ dependencies = ["lxml>=6.1.3", "typer>=0.26"]
|
|
|
25
30
|
Homepage = "https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting"
|
|
26
31
|
Repository = "https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting"
|
|
27
32
|
Issues = "https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/issues"
|
|
33
|
+
Changelog = "https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/CHANGELOG.md"
|
|
28
34
|
|
|
29
35
|
[project.scripts]
|
|
30
36
|
archi = "archi_tool.cli:main"
|
|
@@ -10,6 +10,8 @@ from __future__ import annotations
|
|
|
10
10
|
|
|
11
11
|
import sys
|
|
12
12
|
from collections import Counter
|
|
13
|
+
from importlib.metadata import PackageNotFoundError
|
|
14
|
+
from importlib.metadata import version as package_version
|
|
13
15
|
from pathlib import Path
|
|
14
16
|
from types import SimpleNamespace
|
|
15
17
|
from typing import Optional
|
|
@@ -17,7 +19,12 @@ from typing import Optional
|
|
|
17
19
|
import typer
|
|
18
20
|
from lxml import etree
|
|
19
21
|
|
|
20
|
-
from .discovery import
|
|
22
|
+
from .discovery import (
|
|
23
|
+
discover_conventions,
|
|
24
|
+
discover_fonts,
|
|
25
|
+
discover_links,
|
|
26
|
+
discover_model,
|
|
27
|
+
)
|
|
21
28
|
from .links import check_link_files, load_links
|
|
22
29
|
from .model import ArchiModel, ModelError, is_element, xsi_type
|
|
23
30
|
from .normalize import normalize
|
|
@@ -299,11 +306,14 @@ def cmd_setup(model, args):
|
|
|
299
306
|
|
|
300
307
|
def cmd_render(model, args):
|
|
301
308
|
links = load_links(discover_links(args.model))
|
|
309
|
+
fonts = discover_fonts(args.model)
|
|
302
310
|
written, removed = render_all(model, args.out)
|
|
303
311
|
html_dir = Path(args.out) / "html"
|
|
304
|
-
html_written, html_removed = render_all_html(
|
|
312
|
+
html_written, html_removed = render_all_html(
|
|
313
|
+
model, html_dir, links=links, fonts=fonts
|
|
314
|
+
)
|
|
305
315
|
deck_written, deck_removed = render_all_slides(
|
|
306
|
-
model, Path(args.decks), html_dir / "slides", links=links
|
|
316
|
+
model, Path(args.decks), html_dir / "slides", links=links, fonts=fonts
|
|
307
317
|
)
|
|
308
318
|
for path in written + html_written + deck_written:
|
|
309
319
|
print(f"Geschreven: {path}")
|
|
@@ -328,18 +338,21 @@ def cmd_render(model, args):
|
|
|
328
338
|
|
|
329
339
|
def cmd_slides(model, args):
|
|
330
340
|
links = load_links(discover_links(args.model))
|
|
341
|
+
fonts = discover_fonts(args.model)
|
|
331
342
|
if args.deck:
|
|
332
343
|
written = []
|
|
333
344
|
for deck_path in args.deck:
|
|
334
345
|
deck = load_deck(Path(deck_path), model)
|
|
335
346
|
path = Path(args.out) / f"{deck['slug']}.html"
|
|
336
347
|
path.parent.mkdir(parents=True, exist_ok=True)
|
|
337
|
-
if write_if_changed(
|
|
348
|
+
if write_if_changed(
|
|
349
|
+
path, render_deck_html(model, deck, links=links, fonts=fonts)
|
|
350
|
+
):
|
|
338
351
|
written.append(path)
|
|
339
352
|
removed = []
|
|
340
353
|
else:
|
|
341
354
|
written, removed = render_all_slides(
|
|
342
|
-
model, Path(args.decks), Path(args.out), links=links
|
|
355
|
+
model, Path(args.decks), Path(args.out), links=links, fonts=fonts
|
|
343
356
|
)
|
|
344
357
|
for path in written:
|
|
345
358
|
print(f"Geschreven: {path}")
|
|
@@ -382,8 +395,27 @@ ModelOption = typer.Option(
|
|
|
382
395
|
)
|
|
383
396
|
|
|
384
397
|
|
|
398
|
+
def _show_version(value: bool) -> None:
|
|
399
|
+
if not value:
|
|
400
|
+
return
|
|
401
|
+
try:
|
|
402
|
+
typer.echo(f"archi-cli {package_version('archi-cli')}")
|
|
403
|
+
except PackageNotFoundError: # running from a source tree without install
|
|
404
|
+
typer.echo("archi-cli (onbekende versie)")
|
|
405
|
+
raise typer.Exit()
|
|
406
|
+
|
|
407
|
+
|
|
385
408
|
@app.callback()
|
|
386
|
-
def _main(
|
|
409
|
+
def _main(
|
|
410
|
+
model: Optional[str] = ModelOption,
|
|
411
|
+
version: bool = typer.Option(
|
|
412
|
+
False,
|
|
413
|
+
"--version",
|
|
414
|
+
callback=_show_version,
|
|
415
|
+
is_eager=True,
|
|
416
|
+
help="versie tonen en stoppen",
|
|
417
|
+
),
|
|
418
|
+
):
|
|
387
419
|
_state.model = model
|
|
388
420
|
|
|
389
421
|
|
|
@@ -115,6 +115,25 @@ def discover_links(model_path, start=None):
|
|
|
115
115
|
return path
|
|
116
116
|
|
|
117
117
|
|
|
118
|
+
FONT_CHOICES = ("system", "rijkssans")
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def discover_fonts(model_path, start=None) -> str:
|
|
122
|
+
"""The font choice for rendered HTML: ``[tool.archi] fonts``, default
|
|
123
|
+
"system". "rijkssans" is reserved for the Dutch central government and
|
|
124
|
+
parties working on its behalf (see NOTICE)."""
|
|
125
|
+
start = Path(start or Path(model_path).resolve().parent)
|
|
126
|
+
table, config_path = _read_archi_config(start)
|
|
127
|
+
fonts = table.get("fonts", "system")
|
|
128
|
+
if fonts not in FONT_CHOICES:
|
|
129
|
+
allowed = ", ".join(f'"{c}"' for c in FONT_CHOICES)
|
|
130
|
+
raise ModelError(
|
|
131
|
+
f"Ongeldige waarde voor fonts in {config_path.name}: {fonts!r}. "
|
|
132
|
+
f"Kies uit {allowed}."
|
|
133
|
+
)
|
|
134
|
+
return fonts
|
|
135
|
+
|
|
136
|
+
|
|
118
137
|
def discover_conventions(model_path, start=None):
|
|
119
138
|
"""Return (allowed_property_keys, source_label).
|
|
120
139
|
|
|
@@ -26,11 +26,16 @@ from .render import (
|
|
|
26
26
|
write_if_changed,
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
-
NLDD_VERSION = "0.8.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
NLDD_VERSION = "0.8.93"
|
|
30
|
+
_NLDD_DIST = f"https://cdn.jsdelivr.net/npm/@nldd/design-system@{NLDD_VERSION}/dist/css"
|
|
31
|
+
# RijksSans is meant for publications by and on behalf of the Dutch central
|
|
32
|
+
# government only, so the default stylesheet leaves it out and falls back to
|
|
33
|
+
# the system font; `[tool.archi] fonts = "rijkssans"` opts in.
|
|
34
|
+
NLDD_STYLESHEETS = {
|
|
35
|
+
"system": f"{_NLDD_DIST}/global-system-font.css",
|
|
36
|
+
"rijkssans": f"{_NLDD_DIST}/global.css",
|
|
37
|
+
}
|
|
38
|
+
DEFAULT_FONTS = "system"
|
|
34
39
|
NLDD_JS = f"https://cdn.jsdelivr.net/npm/@nldd/design-system@{NLDD_VERSION}/+esm"
|
|
35
40
|
|
|
36
41
|
CANVAS_MARGIN = 40
|
|
@@ -514,7 +519,7 @@ PAGE_CSS = (
|
|
|
514
519
|
)
|
|
515
520
|
|
|
516
521
|
|
|
517
|
-
def page_shell(title: str, body: str) -> str:
|
|
522
|
+
def page_shell(title: str, body: str, fonts: str = DEFAULT_FONTS) -> str:
|
|
518
523
|
return f"""{MARKER}
|
|
519
524
|
<!doctype html>
|
|
520
525
|
<html lang="nl">
|
|
@@ -523,7 +528,7 @@ def page_shell(title: str, body: str) -> str:
|
|
|
523
528
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
524
529
|
<title>{html.escape(title)}</title>
|
|
525
530
|
<link rel="icon" href="{FAVICON}">
|
|
526
|
-
<link rel="stylesheet" href="{
|
|
531
|
+
<link rel="stylesheet" href="{NLDD_STYLESHEETS[fonts]}">
|
|
527
532
|
<script type="module">import "{NLDD_JS}";</script>
|
|
528
533
|
<style>
|
|
529
534
|
{layer_css()}
|
|
@@ -662,7 +667,9 @@ def diagram_canvas(
|
|
|
662
667
|
}
|
|
663
668
|
|
|
664
669
|
|
|
665
|
-
def render_view_html(
|
|
670
|
+
def render_view_html(
|
|
671
|
+
model, diagram, links: dict | None = None, fonts: str = DEFAULT_FONTS
|
|
672
|
+
) -> str:
|
|
666
673
|
canvas = diagram_canvas(model, diagram, links=links)
|
|
667
674
|
name = diagram.get("name") or "(naamloze view)"
|
|
668
675
|
documentation = model.documentation(diagram)
|
|
@@ -692,10 +699,10 @@ def render_view_html(model, diagram, links: dict | None = None) -> str:
|
|
|
692
699
|
f"getekende verbindingen · gegenereerd uit "
|
|
693
700
|
f"<code>{html.escape(display_model_path(model))}</code></p>"
|
|
694
701
|
)
|
|
695
|
-
return page_shell(name, body)
|
|
702
|
+
return page_shell(name, body, fonts)
|
|
696
703
|
|
|
697
704
|
|
|
698
|
-
def render_index_html(model, entries) -> str:
|
|
705
|
+
def render_index_html(model, entries, fonts: str = DEFAULT_FONTS) -> str:
|
|
699
706
|
cards = []
|
|
700
707
|
for name, filename, n_boxes, n_edges, thumbnail in entries:
|
|
701
708
|
cards.append(
|
|
@@ -721,10 +728,12 @@ def render_index_html(model, entries) -> str:
|
|
|
721
728
|
+ "\n"
|
|
722
729
|
" </nldd-collection>"
|
|
723
730
|
)
|
|
724
|
-
return page_shell(f"{model.name} · views", body)
|
|
731
|
+
return page_shell(f"{model.name} · views", body, fonts)
|
|
725
732
|
|
|
726
733
|
|
|
727
|
-
def render_all_html(
|
|
734
|
+
def render_all_html(
|
|
735
|
+
model, out_dir, links: dict | None = None, fonts: str = DEFAULT_FONTS
|
|
736
|
+
) -> tuple[list, list]:
|
|
728
737
|
"""Render every view to HTML; returns (written, removed) path lists.
|
|
729
738
|
|
|
730
739
|
links is the parsed links file ({source: {element name: target}}); a view
|
|
@@ -740,7 +749,9 @@ def render_all_html(model, out_dir, links: dict | None = None) -> tuple[list, li
|
|
|
740
749
|
filename = stems[diagram.get("id")] + ".html"
|
|
741
750
|
path = out / filename
|
|
742
751
|
view_links = links_for(links or {}, stems[diagram.get("id")])
|
|
743
|
-
if write_if_changed(
|
|
752
|
+
if write_if_changed(
|
|
753
|
+
path, render_view_html(model, diagram, links=view_links, fonts=fonts)
|
|
754
|
+
):
|
|
744
755
|
written.append(path)
|
|
745
756
|
produced.add(path.name)
|
|
746
757
|
boxes = absolute_boxes(diagram, index)
|
|
@@ -750,7 +761,7 @@ def render_all_html(model, out_dir, links: dict | None = None) -> tuple[list, li
|
|
|
750
761
|
)
|
|
751
762
|
|
|
752
763
|
index_path = out / "index.html"
|
|
753
|
-
if write_if_changed(index_path, render_index_html(model, entries)):
|
|
764
|
+
if write_if_changed(index_path, render_index_html(model, entries, fonts)):
|
|
754
765
|
written.append(index_path)
|
|
755
766
|
produced.add(index_path.name)
|
|
756
767
|
|
|
@@ -22,9 +22,10 @@ from .links import links_for
|
|
|
22
22
|
from .model import ModelError
|
|
23
23
|
from .render import MARKER, is_descendant, slugify, view_stems, write_if_changed
|
|
24
24
|
from .render_html import (
|
|
25
|
+
DEFAULT_FONTS,
|
|
25
26
|
DIAGRAM_CSS,
|
|
26
27
|
FAVICON,
|
|
27
|
-
|
|
28
|
+
NLDD_STYLESHEETS,
|
|
28
29
|
absolute_boxes,
|
|
29
30
|
diagram_canvas,
|
|
30
31
|
layer_css,
|
|
@@ -639,7 +640,9 @@ def render_slide_html(
|
|
|
639
640
|
)
|
|
640
641
|
|
|
641
642
|
|
|
642
|
-
def render_deck_html(
|
|
643
|
+
def render_deck_html(
|
|
644
|
+
model, deck: dict, links: dict | None = None, fonts: str = DEFAULT_FONTS
|
|
645
|
+
) -> str:
|
|
643
646
|
"""One self-contained HTML document for a validated deck. links is the
|
|
644
647
|
parsed links file; embedded views pick up their own section."""
|
|
645
648
|
total = len(deck["slides"])
|
|
@@ -655,7 +658,7 @@ def render_deck_html(model, deck: dict, links: dict | None = None) -> str:
|
|
|
655
658
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
656
659
|
<title>{html.escape(deck["title"])}</title>
|
|
657
660
|
<link rel="icon" href="{FAVICON}">
|
|
658
|
-
<link rel="stylesheet" href="{
|
|
661
|
+
<link rel="stylesheet" href="{NLDD_STYLESHEETS[fonts]}">
|
|
659
662
|
<style>
|
|
660
663
|
{layer_css()}
|
|
661
664
|
{DIAGRAM_CSS}{DECK_CSS}</style>
|
|
@@ -682,7 +685,7 @@ n notities · a autoplay</div>
|
|
|
682
685
|
|
|
683
686
|
|
|
684
687
|
def render_all_slides(
|
|
685
|
-
model, decks_dir, out_dir, links: dict | None = None
|
|
688
|
+
model, decks_dir, out_dir, links: dict | None = None, fonts: str = DEFAULT_FONTS
|
|
686
689
|
) -> tuple[list, list]:
|
|
687
690
|
"""Render every decks/*.toml; returns (written, removed) path lists.
|
|
688
691
|
A missing or empty decks dir is not an error: nothing is rendered and
|
|
@@ -705,7 +708,9 @@ def render_all_slides(
|
|
|
705
708
|
written, produced = [], set()
|
|
706
709
|
for deck in decks:
|
|
707
710
|
path = out / f"{deck['slug']}.html"
|
|
708
|
-
if write_if_changed(
|
|
711
|
+
if write_if_changed(
|
|
712
|
+
path, render_deck_html(model, deck, links=links, fonts=fonts)
|
|
713
|
+
):
|
|
709
714
|
written.append(path)
|
|
710
715
|
produced.add(path.name)
|
|
711
716
|
|
archi_cli-0.2.2/.gitignore
DELETED
archi_cli-0.2.2/NOTICE
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
archi-cli
|
|
2
|
-
Copyright (c) 2026 Bureau Architectuur Digitale Overheid
|
|
3
|
-
Licensed under the EUPL-1.2 (see LICENSE).
|
|
4
|
-
|
|
5
|
-
This tool downloads and drives the Archi engine for its `normalize` command.
|
|
6
|
-
Archi is a separate work and is not distributed as part of this package; it is
|
|
7
|
-
fetched at runtime from the official release on first use.
|
|
8
|
-
|
|
9
|
-
Archi — ArchiMate modelling tool
|
|
10
|
-
Copyright (c) Phillip Beauvoir, Jean-Baptiste Sarrodie and contributors
|
|
11
|
-
Licensed under the MIT License
|
|
12
|
-
https://github.com/archimatetool/archi
|
|
13
|
-
|
|
14
|
-
The Archi distribution bundles an OpenJDK runtime; its own licensing applies to
|
|
15
|
-
that runtime.
|
archi_cli-0.2.2/PKG-INFO
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.5
|
|
2
|
-
Name: archi-cli
|
|
3
|
-
Version: 0.2.2
|
|
4
|
-
Summary: ar·cli·mate — de CLI in je ArchiMate: deterministisch native .archimate-modellen inspecteren, muteren, valideren en renderen
|
|
5
|
-
Project-URL: Homepage, https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting
|
|
6
|
-
Project-URL: Repository, https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting
|
|
7
|
-
Project-URL: Issues, https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/issues
|
|
8
|
-
Author: Bureau Architectuur Digitale Overheid
|
|
9
|
-
License-Expression: EUPL-1.2
|
|
10
|
-
License-File: LICENSE
|
|
11
|
-
Keywords: archi,archimate,cli,enterprise-architecture,modeling
|
|
12
|
-
Classifier: Development Status :: 4 - Beta
|
|
13
|
-
Classifier: Environment :: Console
|
|
14
|
-
Classifier: Intended Audience :: Developers
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
-
Classifier: Topic :: Software Development :: Documentation
|
|
18
|
-
Requires-Python: >=3.12
|
|
19
|
-
Requires-Dist: lxml>=6.1.3
|
|
20
|
-
Requires-Dist: typer>=0.26
|
|
21
|
-
Description-Content-Type: text/markdown
|
|
22
|
-
|
|
23
|
-
# AI-assisted architecting
|
|
24
|
-
|
|
25
|
-
[](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/actions/workflows/ci.yml)
|
|
26
|
-
[](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE)
|
|
27
|
-
[](https://pypi.org/project/archi-cli/)
|
|
28
|
-
|
|
29
|
-
Een manier van architecteren waarbij een ArchiMate-model in het native
|
|
30
|
-
Archi-formaat de bron van waarheid is, en je het met AI-assistentie bijhoudt in
|
|
31
|
-
plaats van met de hand door de GUI te klikken. Deze repo levert de twee dingen
|
|
32
|
-
die daarvoor nodig zijn:
|
|
33
|
-
|
|
34
|
-
- **`archi-cli`**: een deterministische command line tool die een
|
|
35
|
-
`.archimate`-model inspecteert, muteert, valideert en rendert, en weigert een
|
|
36
|
-
kapot model op te slaan. Op PyPI, werkt op elk model.
|
|
37
|
-
- **De skills** (`archi-model`, `archi-view`, `archi-slides`): de werkwijze
|
|
38
|
-
die een AI-sessie zoals Claude Code volgt om via de CLI aan het model te
|
|
39
|
-
werken. Te installeren als Claude Code plugin.
|
|
40
|
-
|
|
41
|
-
Het model zelf hoort niet hier: dat woont in een eigen repo en gebruikt
|
|
42
|
-
`archi-cli` als tool. Het ADO-model waarvoor dit ontstond is daar het
|
|
43
|
-
voorbeeld.
|
|
44
|
-
|
|
45
|
-
## De CLI
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
uv tool install archi-cli
|
|
49
|
-
archi --help
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Dat zet het commando `archi` op je `$PATH`. Het model wordt gevonden via
|
|
53
|
-
`--model <pad>` (vóór het subcommando), via een `archi.toml` in de map
|
|
54
|
-
(`[tool.archi] model = "..."`), of als het enige `.archimate`-bestand in de
|
|
55
|
-
werkmap.
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
archi stats # tellingen per type
|
|
59
|
-
archi list --type Capability # elementen, gefilterd
|
|
60
|
-
archi show "<elementnaam of id>" # één element met relaties
|
|
61
|
-
archi tree # folderstructuur
|
|
62
|
-
|
|
63
|
-
archi add-element --type Capability --name "..." --documentation "..."
|
|
64
|
-
archi add-relation --type Aggregation --source "..." --target "..." --name "bevat"
|
|
65
|
-
archi set-property <ref> "<key>=<waarde>" # property zetten of bijwerken
|
|
66
|
-
archi remove-property <ref> "<key>" # property verwijderen
|
|
67
|
-
archi set-documentation <ref> "..." # Archi's documentatieveld
|
|
68
|
-
archi add-element ... --subfolder "Gebied X" # in een submap van de laag
|
|
69
|
-
archi move <ref> --subfolder "Gebied X" # naar een submap verplaatsen
|
|
70
|
-
archi rename <ref> "Nieuwe naam"
|
|
71
|
-
archi remove <ref> --cascade
|
|
72
|
-
|
|
73
|
-
archi add-view --name "..." --layout cluster --type Capability --relation Aggregation
|
|
74
|
-
archi slides --deck decks/<naam>.toml
|
|
75
|
-
|
|
76
|
-
archi validate # integriteitschecks
|
|
77
|
-
archi normalize # canonieke serialisatie via Archi
|
|
78
|
-
archi render # views naar Mermaid en HTML
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Voor `normalize` is de Archi-engine nodig; die haalt `archi` bij het eerste
|
|
82
|
-
gebruik zelf op (of expliciet met `archi setup`), dus je hoeft Archi niet apart
|
|
83
|
-
te installeren. `archi <commando> --help` toont de volledige set vlaggen;
|
|
84
|
-
shell-completion zet je aan met `archi --install-completion`.
|
|
85
|
-
|
|
86
|
-
Wat de tool bijzonder maakt:
|
|
87
|
-
|
|
88
|
-
- **Muteren met een vangnet.** Elke wijziging valideert het model in het
|
|
89
|
-
geheugen; bij een fout weigert de CLI op te slaan. Ids zijn onveranderlijk.
|
|
90
|
-
- **Canonieke serialisatie.** `normalize` laat de headless Archi-engine het
|
|
91
|
-
bestand herschrijven, zodat git-diffs klein blijven, of de wijziging nu van
|
|
92
|
-
de tool of van de Archi-GUI kwam.
|
|
93
|
-
- **Renderen.** Elke view wordt een Mermaid-diagram (rendert op GitHub) en een
|
|
94
|
-
HTML-pagina die de layout uit het model volgt, plus een presentatie per
|
|
95
|
-
deckdefinitie.
|
|
96
|
-
- **Doorklikken tussen views.** Met een links-bestand
|
|
97
|
-
(`[tool.archi] links = "…"` in `archi.toml`) worden elementen in de
|
|
98
|
-
HTML-views en slides klikbaar naar een andere view of een ander bestand,
|
|
99
|
-
bijvoorbeeld een SVG die een project met eigen scripts maakt. Zie
|
|
100
|
-
hieronder.
|
|
101
|
-
|
|
102
|
-
### Doorklikken met een links-bestand
|
|
103
|
-
|
|
104
|
-
Welk element waarheen doorklikt is een redactionele keuze, geen modelfeit;
|
|
105
|
-
het staat daarom in een apart TOML-bestand (zie ADR 0010):
|
|
106
|
-
|
|
107
|
-
```toml
|
|
108
|
-
# archi.toml
|
|
109
|
-
[tool.archi]
|
|
110
|
-
links = "tools/links.toml"
|
|
111
|
-
|
|
112
|
-
# tools/links.toml
|
|
113
|
-
["overzicht-van-de-gebieden"] # bestandsnaam van de bronplaat, zonder extensie
|
|
114
|
-
"Gebied A" = "gebied-a-in-detail.html" # elementnaam = pad, relatief aan de bronplaat
|
|
115
|
-
"Gebied B" = "../eigen-svg/gebied-b.svg"
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Een sectie hoort bij de HTML-view met die bestandsnaam (de slug van de
|
|
119
|
-
viewnaam; bij views met botsende namen de naam mét id-suffix die `archi
|
|
120
|
-
render` kiest), of bij een bestand dat een project zelf genereert: dezelfde
|
|
121
|
-
sectievorm is dan bruikbaar voor eigen scripts, zodat één bestand over alle
|
|
122
|
-
doorkliks gaat. In slides worden relatieve paden automatisch gecorrigeerd
|
|
123
|
-
voor de submap. `archi validate` waarschuwt voor elementnamen die niet in de
|
|
124
|
-
view (of het model) staan, `archi render` voor doelen die niet bestaan en
|
|
125
|
-
voor secties die bij geen view of bestand horen.
|
|
126
|
-
|
|
127
|
-
## De skills als Claude Code plugin
|
|
128
|
-
|
|
129
|
-
Deze repo is tegelijk de plugin (`archi-tools`) en de marketplace die hem
|
|
130
|
-
aanbiedt (`archi-marketplace`). Zo installeer je de skills bij je eigen model:
|
|
131
|
-
|
|
132
|
-
```
|
|
133
|
-
/plugin marketplace add BureauArchitectuurDigitaleOverheid/ai-assisted-architecting
|
|
134
|
-
/plugin install archi-tools@archi-marketplace
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
De plugin brengt de drie skills mee; het `archi`-commando zelf komt van
|
|
138
|
-
`uv tool install archi-cli`. Zie `adr/0007-claude-code-plugin.md`.
|
|
139
|
-
|
|
140
|
-
## Ontwikkelen aan de tool
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
just setup # venv, dependencies en de pre-commit hook
|
|
144
|
-
just test # de testsuite (draait op een fixture-model)
|
|
145
|
-
just demo # de CLI op het fixture-model
|
|
146
|
-
just build # distributies bouwen en de metadata controleren
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
De testsuite draait op `tests/fixtures/klein-model.archimate`, niet op een echt
|
|
150
|
-
model. Wijzigingen lopen via een branch en een PR; CI draait de suite op Ubuntu
|
|
151
|
-
en Windows. Publiceren naar PyPI gebeurt op een versie-tag, zie `CLAUDE.md` en
|
|
152
|
-
`adr/0006-publiceren-op-pypi.md`.
|
|
153
|
-
|
|
154
|
-
## Structuur
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
tools/archi_tool/ De archi-CLI (Python, lxml, Typer; beheerd met uv)
|
|
158
|
-
tests/ pytest-suite met een klein fixture-model
|
|
159
|
-
.claude/skills/ De skills (archi-model, archi-view, archi-slides)
|
|
160
|
-
.claude-plugin/ Plugin- en marketplace-manifest
|
|
161
|
-
adr/ Architectuurbeslissingen over de tool
|
|
162
|
-
justfile Vaste taken
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
## Licentie
|
|
166
|
-
|
|
167
|
-
[EUPL-1.2](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE).
|
archi_cli-0.2.2/README.md
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
# AI-assisted architecting
|
|
2
|
-
|
|
3
|
-
[](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/actions/workflows/ci.yml)
|
|
4
|
-
[](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE)
|
|
5
|
-
[](https://pypi.org/project/archi-cli/)
|
|
6
|
-
|
|
7
|
-
Een manier van architecteren waarbij een ArchiMate-model in het native
|
|
8
|
-
Archi-formaat de bron van waarheid is, en je het met AI-assistentie bijhoudt in
|
|
9
|
-
plaats van met de hand door de GUI te klikken. Deze repo levert de twee dingen
|
|
10
|
-
die daarvoor nodig zijn:
|
|
11
|
-
|
|
12
|
-
- **`archi-cli`**: een deterministische command line tool die een
|
|
13
|
-
`.archimate`-model inspecteert, muteert, valideert en rendert, en weigert een
|
|
14
|
-
kapot model op te slaan. Op PyPI, werkt op elk model.
|
|
15
|
-
- **De skills** (`archi-model`, `archi-view`, `archi-slides`): de werkwijze
|
|
16
|
-
die een AI-sessie zoals Claude Code volgt om via de CLI aan het model te
|
|
17
|
-
werken. Te installeren als Claude Code plugin.
|
|
18
|
-
|
|
19
|
-
Het model zelf hoort niet hier: dat woont in een eigen repo en gebruikt
|
|
20
|
-
`archi-cli` als tool. Het ADO-model waarvoor dit ontstond is daar het
|
|
21
|
-
voorbeeld.
|
|
22
|
-
|
|
23
|
-
## De CLI
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
uv tool install archi-cli
|
|
27
|
-
archi --help
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Dat zet het commando `archi` op je `$PATH`. Het model wordt gevonden via
|
|
31
|
-
`--model <pad>` (vóór het subcommando), via een `archi.toml` in de map
|
|
32
|
-
(`[tool.archi] model = "..."`), of als het enige `.archimate`-bestand in de
|
|
33
|
-
werkmap.
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
archi stats # tellingen per type
|
|
37
|
-
archi list --type Capability # elementen, gefilterd
|
|
38
|
-
archi show "<elementnaam of id>" # één element met relaties
|
|
39
|
-
archi tree # folderstructuur
|
|
40
|
-
|
|
41
|
-
archi add-element --type Capability --name "..." --documentation "..."
|
|
42
|
-
archi add-relation --type Aggregation --source "..." --target "..." --name "bevat"
|
|
43
|
-
archi set-property <ref> "<key>=<waarde>" # property zetten of bijwerken
|
|
44
|
-
archi remove-property <ref> "<key>" # property verwijderen
|
|
45
|
-
archi set-documentation <ref> "..." # Archi's documentatieveld
|
|
46
|
-
archi add-element ... --subfolder "Gebied X" # in een submap van de laag
|
|
47
|
-
archi move <ref> --subfolder "Gebied X" # naar een submap verplaatsen
|
|
48
|
-
archi rename <ref> "Nieuwe naam"
|
|
49
|
-
archi remove <ref> --cascade
|
|
50
|
-
|
|
51
|
-
archi add-view --name "..." --layout cluster --type Capability --relation Aggregation
|
|
52
|
-
archi slides --deck decks/<naam>.toml
|
|
53
|
-
|
|
54
|
-
archi validate # integriteitschecks
|
|
55
|
-
archi normalize # canonieke serialisatie via Archi
|
|
56
|
-
archi render # views naar Mermaid en HTML
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Voor `normalize` is de Archi-engine nodig; die haalt `archi` bij het eerste
|
|
60
|
-
gebruik zelf op (of expliciet met `archi setup`), dus je hoeft Archi niet apart
|
|
61
|
-
te installeren. `archi <commando> --help` toont de volledige set vlaggen;
|
|
62
|
-
shell-completion zet je aan met `archi --install-completion`.
|
|
63
|
-
|
|
64
|
-
Wat de tool bijzonder maakt:
|
|
65
|
-
|
|
66
|
-
- **Muteren met een vangnet.** Elke wijziging valideert het model in het
|
|
67
|
-
geheugen; bij een fout weigert de CLI op te slaan. Ids zijn onveranderlijk.
|
|
68
|
-
- **Canonieke serialisatie.** `normalize` laat de headless Archi-engine het
|
|
69
|
-
bestand herschrijven, zodat git-diffs klein blijven, of de wijziging nu van
|
|
70
|
-
de tool of van de Archi-GUI kwam.
|
|
71
|
-
- **Renderen.** Elke view wordt een Mermaid-diagram (rendert op GitHub) en een
|
|
72
|
-
HTML-pagina die de layout uit het model volgt, plus een presentatie per
|
|
73
|
-
deckdefinitie.
|
|
74
|
-
- **Doorklikken tussen views.** Met een links-bestand
|
|
75
|
-
(`[tool.archi] links = "…"` in `archi.toml`) worden elementen in de
|
|
76
|
-
HTML-views en slides klikbaar naar een andere view of een ander bestand,
|
|
77
|
-
bijvoorbeeld een SVG die een project met eigen scripts maakt. Zie
|
|
78
|
-
hieronder.
|
|
79
|
-
|
|
80
|
-
### Doorklikken met een links-bestand
|
|
81
|
-
|
|
82
|
-
Welk element waarheen doorklikt is een redactionele keuze, geen modelfeit;
|
|
83
|
-
het staat daarom in een apart TOML-bestand (zie ADR 0010):
|
|
84
|
-
|
|
85
|
-
```toml
|
|
86
|
-
# archi.toml
|
|
87
|
-
[tool.archi]
|
|
88
|
-
links = "tools/links.toml"
|
|
89
|
-
|
|
90
|
-
# tools/links.toml
|
|
91
|
-
["overzicht-van-de-gebieden"] # bestandsnaam van de bronplaat, zonder extensie
|
|
92
|
-
"Gebied A" = "gebied-a-in-detail.html" # elementnaam = pad, relatief aan de bronplaat
|
|
93
|
-
"Gebied B" = "../eigen-svg/gebied-b.svg"
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Een sectie hoort bij de HTML-view met die bestandsnaam (de slug van de
|
|
97
|
-
viewnaam; bij views met botsende namen de naam mét id-suffix die `archi
|
|
98
|
-
render` kiest), of bij een bestand dat een project zelf genereert: dezelfde
|
|
99
|
-
sectievorm is dan bruikbaar voor eigen scripts, zodat één bestand over alle
|
|
100
|
-
doorkliks gaat. In slides worden relatieve paden automatisch gecorrigeerd
|
|
101
|
-
voor de submap. `archi validate` waarschuwt voor elementnamen die niet in de
|
|
102
|
-
view (of het model) staan, `archi render` voor doelen die niet bestaan en
|
|
103
|
-
voor secties die bij geen view of bestand horen.
|
|
104
|
-
|
|
105
|
-
## De skills als Claude Code plugin
|
|
106
|
-
|
|
107
|
-
Deze repo is tegelijk de plugin (`archi-tools`) en de marketplace die hem
|
|
108
|
-
aanbiedt (`archi-marketplace`). Zo installeer je de skills bij je eigen model:
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
/plugin marketplace add BureauArchitectuurDigitaleOverheid/ai-assisted-architecting
|
|
112
|
-
/plugin install archi-tools@archi-marketplace
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
De plugin brengt de drie skills mee; het `archi`-commando zelf komt van
|
|
116
|
-
`uv tool install archi-cli`. Zie `adr/0007-claude-code-plugin.md`.
|
|
117
|
-
|
|
118
|
-
## Ontwikkelen aan de tool
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
just setup # venv, dependencies en de pre-commit hook
|
|
122
|
-
just test # de testsuite (draait op een fixture-model)
|
|
123
|
-
just demo # de CLI op het fixture-model
|
|
124
|
-
just build # distributies bouwen en de metadata controleren
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
De testsuite draait op `tests/fixtures/klein-model.archimate`, niet op een echt
|
|
128
|
-
model. Wijzigingen lopen via een branch en een PR; CI draait de suite op Ubuntu
|
|
129
|
-
en Windows. Publiceren naar PyPI gebeurt op een versie-tag, zie `CLAUDE.md` en
|
|
130
|
-
`adr/0006-publiceren-op-pypi.md`.
|
|
131
|
-
|
|
132
|
-
## Structuur
|
|
133
|
-
|
|
134
|
-
```
|
|
135
|
-
tools/archi_tool/ De archi-CLI (Python, lxml, Typer; beheerd met uv)
|
|
136
|
-
tests/ pytest-suite met een klein fixture-model
|
|
137
|
-
.claude/skills/ De skills (archi-model, archi-view, archi-slides)
|
|
138
|
-
.claude-plugin/ Plugin- en marketplace-manifest
|
|
139
|
-
adr/ Architectuurbeslissingen over de tool
|
|
140
|
-
justfile Vaste taken
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Licentie
|
|
144
|
-
|
|
145
|
-
[EUPL-1.2](https://github.com/BureauArchitectuurDigitaleOverheid/ai-assisted-architecting/blob/main/LICENSE).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|