Skip to content

Commit 0d42ed5

Browse files
committed
refactor: rename storage module to datastore and update all imports (SDK + providers)
1 parent f5d602e commit 0d42ed5

83 files changed

Lines changed: 9145 additions & 140 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/agents/ITLPartnerDeveloper.agent.md

Lines changed: 616 additions & 0 deletions
Large diffs are not rendered by default.

.github/agents/ITLResourceProvider.agent.md

Lines changed: 979 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Agent Design (concept)
2+
3+
Dit is een beknopt, uitvoerbaar designvoorstel voor een ITL Resource Provider. Het bevat placeholders en aannames — pas waar nodig aan na intake.
4+
5+
**Provider namespace**: Partner.Example
6+
7+
**Resource types**
8+
- `instances` (hoofdkernresource)
9+
- Properties: `sku` (required, object), `region` (required), `configuration` (optional), `provisioningState` (read-only)
10+
- Uniqueness: per subscription + resourceGroup
11+
- `backups` (child van `instances`)
12+
- Properties: `timestamp`, `status`, `sizeMB`
13+
14+
**API mapping (CRUD routes)**
15+
- Create: POST /subscriptions/{sub}/resourceGroups/{rg}/providers/Partner.Example/instances
16+
- Get: GET /.../instances/{name}
17+
- List: GET /.../instances
18+
- Delete: DELETE /.../instances/{name}
19+
20+
Samengestelde `type` antwoord: `Partner.Example/instances`
21+
22+
**Provisioning model**
23+
- Standaard antwoord op create: 202 Accepted met `provisioningState: Creating`.
24+
- Achtergrondtask voert externe API calls uit; bij succes `provisioningState: Succeeded`, bij fout `Failed` + `error` property.
25+
- Polling model: GET resource retourneert actuele provisioningState.
26+
27+
**Externe integratie**
28+
- Client: `httpx.AsyncClient` met configurable `base_url` en auth header.
29+
- Timeouts en retries: exponential backoff, max 5 retries voor idempotente calls.
30+
31+
**Storage / state**
32+
- Aanbevolen: PostgreSQL (asyncpg) voor persistente metadata en provisioning state.
33+
- Alternatief: vertrouw op upstream API en bewaar alleen index/metadata lokaal.
34+
35+
**Events / notificaties**
36+
- Optioneel: publiceer events bij create/succeed/fail naar RabbitMQ of webhook endpoint.
37+
38+
**Errors & retry**
39+
- Map externe 4xx -> `ValidationError` / `ResourceConflictError` waar passend.
40+
- 5xx en netwerkfouten -> `ExternalServiceError` met retry.
41+
42+
**Security**
43+
- Credentials via environment variables or mounted secret store (CONFIG: `EXTERNAL_API_KEY`, `EXTERNAL_BASE_URL`).
44+
45+
**Tests / CI**
46+
- `pytest` async tests: create/get/list/delete happy path + failure simulation (mock client).
47+
- GH Actions: lint, unit tests, build docker image.
48+
49+
**Acceptance criteria**
50+
- Create returns 202 and resource shows `provisioningState: Succeeded` after background task.
51+
- CRUD routes conform to expected ARM-style id and type fields.
52+
- Tests groen in CI.
53+
54+
---
55+
Als dit design akkoord is, scaffold ik de providercode (stap 3). Als je wilt, kan ik nu al concrete voorbeelden en bestanden genereren.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
agent: plan
3+
---
4+
5+
<!--
6+
Agent intake document — vul de antwoorden in tijdens de intake.
7+
Gebruik deze checklist om het provider-design later te kunnen uitvoeren.
8+
-->
9+
# Agent Intake — DISCOVERY
10+
11+
Vul de onderstaande vragen zo volledig mogelijk in. Antwoord in Nederlands.
12+
13+
1) Dienst / bedrijf (in één zin)
14+
- Naam dienst / bedrijf:
15+
- Korte beschrijving:
16+
17+
2) Welke resources beheren jullie?
18+
- Resource types (lijst):
19+
- Relaties (parent/child):
20+
21+
3) Bestaande API (beschrijf kort)
22+
- Base URL:
23+
- Belangrijkste endpoints (POST/GET/DELETE etc.) met voorbeeldpaden:
24+
- Authenticatie (API key / OAuth2 / Bearer / anders):
25+
26+
4) Wat gebeurt er bij create?
27+
- Direct provisioning of async (duurtijd indicatie):
28+
- Externe acties (calls naar API, DB writes, queues):
29+
30+
5) Properties per resource type
31+
- Voorbeeld schema per type (verplicht / optioneel / read-only):
32+
33+
6) Uniqueness & scope
34+
- Uniek per subscription / resourceGroup / global / anders:
35+
36+
7) Opslag en state
37+
- Gebruikelijke storage (DB type of alleen externe API):
38+
- Moeten we provisioning state persistent houden? (ja/nee):
39+
40+
8) Events / notificaties
41+
- Moet er een event gestuurd worden bij create/update/delete? (ja/nee)
42+
- Zo ja: bestemming (webhook, queue, topic):
43+
44+
9) Foutscenario's en retry-beleid
45+
- Verwachte fouten van externe API (codes / meldingen):
46+
- Gewenst retry-beleid en backoff:
47+
48+
10) Security / secrets
49+
- Hoe verstrekken we credentials aan de provider (env vars / secret store):
50+
51+
11) Acceptatiecriteria
52+
- Wanneer beschouwen we een resource als "Succeeded":
53+
- Welke tests moeten slagen voor oplevering:
54+
55+
12) Extra opmerkingen / voorbeelden
56+
- Voorbeeld request JSON:
57+
- Voorbeeld response JSON:
58+
59+
---
60+
Vul dit document in en geef aan of je wilt dat ik op basis hiervan direct een designvoorstel (`agent-design.md`) genereer.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
description: Richtlijnen voor het maken van consistente prompts en instructies voor interne agents en contributors.
3+
---
4+
# Richtlijnen voor prompts & instructions (voor repo maintainers)
5+
6+
Doel: consistente, bruikbare prompts en instructies maken voor interne agents en contributors.
7+
8+
Principes:
9+
- Wees specifiek: geef voorbeelden en verwachte outputs.
10+
- Kort en scanbaar: gebruik opgesomde vragen en voorbeeldantwoorden.
11+
- Eén doel per prompt: voorkom gecombineerde vragen.
12+
- Varianten: maak een korte (1-2 regels) en uitgebreide versie.
13+
14+
Bestandsstructuur:
15+
- `.github/prompts/`: gebruiker-vriendelijke prompt-templates (MD-bestanden).
16+
- `.github/instructions/`: richtlijnen, usage voorbeelden, policies.
17+
18+
Hoe een nieuwe prompt toevoegen:
19+
1. Maak `X_prompt.md` in `.github/prompts/`.
20+
2. Bovenaan: korte omschrijving en doel.
21+
3. Voeg genummerde vragen toe en een kort voorbeeldantwoord.
22+
4. Voeg optioneel een `Voorbeeld` sectie met JSON.
23+
24+
Hoe een instruction schrijven:
25+
- Leg uit wanneer je de prompt gebruikt.
26+
- Geef voorbeelden van juiste en foute antwoorden.
27+
- Voeg links naar relevante documenten (bijv. `ITL.ControlPlane.SDK/.github/agents/ITLPartnerDeveloper.agent.md`).
28+
29+
Review checklist:
30+
- Is de prompt begrijpelijk zonder extra context?
31+
- Staat er een concreet voorbeeld bij?
32+
- Is taal consistent (Nederlands voor conversatie, Engels voor code)?
33+
34+
Onderhoud:
35+
- Houd prompts up-to-date met veranderingen in de SDK of API-contracten.
36+
- Gebruik PR-templates voor wijzigingen in `.github/prompts`.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Voorbeelden: gebruik van prompts
2+
3+
Kort overzicht van typische workflows en welke prompt te gebruiken.
4+
5+
1) Nieuwe provider ontwerpen
6+
- Gebruik: `new_provider_prompt.md`
7+
- Stappen: verzamel antwoorden, stuur terug designvoorstel, wacht goedkeuring.
8+
9+
2) Bestaande API wrappen
10+
- Gebruik: `wrap_api_prompt.md`
11+
- Stappen: vraag OpenAPI of voorbeeldrequests, identificeer auth en async gedrag, maak provider-scaffold.
12+
13+
3) Debugging
14+
- Gebruik: `debug_provider_prompt.md`
15+
- Stappen: vraag reproducerende stappen en logs, probeer minimal reproducerend request lokaal.
16+
17+
Snelle command voorbeelden (lokale tests):
18+
19+
```powershell
20+
# Start provider (voorbeeld)
21+
python -m src.main
22+
23+
# Run tests
24+
pytest -q
25+
```
26+
27+
Plaats altijd volgende info bij een issue of PR:
28+
- Link naar de gebruikte prompt-template
29+
- Korte samenvatting van antwoorden
30+
- Relevante codebestanden of tests
31+
32+
Contact: gebruik teamkanaal of vermeld `@itlusions/sdk` voor urgente vragen.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Plan (agentPlan)
2+
3+
- Intake & discovery
4+
- Stel de volledige DISCOVERY-vragen (dienstnaam, resources, bestaande API endpoints, auth, provisioning gedrag, properties, unique scope, DB/enqueue requirements).
5+
- Resultaat: ingevuld intake-document (.github/designs/agent-intake.md) met concrete antwoorden en voorbeelden. Gebruik de vragenlijst uit .github/instructions/prompt_creation.instructions.md als checklist.
6+
7+
- Design voorstel maken
8+
- Vertaal de intake naar een concreet design: provider namespace, resource types, resource model (properties verplicht/optioneel), UniquenessScope, endpoints (create/get/list/delete), async vs sync provisioning, events/notifications, storage en retry-beleid.
9+
- Resultaat: agent-design.md in .github/designs/ met ER-diagram en API mapping.
10+
11+
- Scaffold project
12+
- Genereer projectstructuur voor de provider: pyproject.toml, Dockerfile, entrypoint.py, provider.py, src/routers/*.py, src/services/*, tests/.
13+
- Plaats scaffold onder ITL.ControlPlane.ResourceProvider.{AgentName} en voeg provider.yaml metadata toe. Acceptance: project kan builden en start FastAPI app.
14+
15+
- Implementatie core
16+
- Implementeer ResourceProvider subclass in provider.py met create_or_update_resource, get_resource, list_resources, delete_resource.
17+
- Voeg externe API-client (httpx async), foutafhandeling (ExternalServiceError etc.), en async provisioning (tasking) toe wanneer nodig. Resultaat: werkende handler met voorbeeld responses.
18+
19+
- Tests & CI
20+
- Schrijf pytest async tests voor create/get/list/delete en edge-cases.
21+
- Voeg GH Actions workflow voor lint, test, build. Acceptance: tests draaien groen lokaal en in CI.
22+
23+
- Documentatie & README
24+
- Maak README.md met quickstart, run-commando's, API voorbeelden, en ontwikkelnotities. Voeg provider.yaml en CHANGELOG.md.
25+
- Resultaat: duidelijke on-boarding sectie in repository root.
26+
27+
- Review & oplevering
28+
- Doe code-review, run volledige test-suite, prepareer PR met beschrijving en release-notes.
29+
- Maak deploy-stappen (Docker image, helm chart pointers) en mijlpalen. Resultaat: PR klaar voor merge en release instructies.
30+
31+
---
32+
33+
Wil je dat ik nu scaffold genereer of eerst het intake-document met jouw antwoorden laat invullen?
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
agent: agent
3+
---
4+
# Provider Debug Prompt
5+
6+
Gebruik deze template om snel een bug of fout in een provider te beschrijven.
7+
8+
1. Samenvatting van het probleem (1-2 zinnen):
9+
10+
2. Reproducerende stappen:
11+
- Welke API-call / request body / headers gebruik je?
12+
- Welke stappen leiden tot de fout?
13+
14+
3. Verwachte gedrag vs werkelijke gedrag:
15+
16+
4. Foutmelding / stack trace (volledige tekst):
17+
18+
5. Relevante bestanden of code-fragmenten:
19+
- `provider.py`, `main.py`, router-bestanden, tests
20+
21+
6. Hoe draai je de service lokaal?
22+
- `python -m`, Docker, of Helm?
23+
- Environment variables die gezet zijn
24+
25+
7. Recent changes (git commit ids of korte beschrijving):
26+
27+
8. Extra observaties / debugging stappen al geprobeerd:
28+
- Logs, curl/httpx requests, mock responses
29+
30+
Kort voorbeeld:
31+
- Probleem: "Create request geeft 500 en `ExternalServiceError`"
32+
- Repro: `POST /subscriptions/.../providers/Acme.Database/servers` met body {...}
33+
- Fout: `httpx.HTTPError: 502 Bad Gateway`
34+
35+
Plak altijd relevante logregels en een minimal reproducerend request.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
---
2+
agent: agent
3+
---
4+
# Nieuwe Provider — Intake Prompt
5+
6+
Gebruik deze template om snel de benodigde informatie te verzamelen voor het ontwerpen van een ITL Resource Provider.
7+
8+
1. Dienst / Bedrijf (1 zin):
9+
- Wat doet jullie dienst?
10+
11+
2. Resource types:
12+
- Welke "dingen" moeten beheerd worden? (bijv. servers, databases, clusters)
13+
14+
3. Huidige API / integratie:
15+
- Base URL:
16+
- Belangrijke endpoints (POST, GET, LIST, DELETE):
17+
- Authenticatie (API key / OAuth / bearer):
18+
19+
4. Provisioning gedrag:
20+
- Moet aanmaken/provisioning sync of async verlopen?
21+
- Welke externe systemen worden aangeroepen?
22+
- Verwachte duur van provisioning (sec/min/uren):
23+
24+
5. Resource properties:
25+
- Verplicht vs optioneel (voorbeeld JSON of lijst):
26+
- Zijn er enums/keuzes (SKU, tiers, regio's)?
27+
28+
6. Uniciteit / scope:
29+
- Uniek per subscription / resource group / globaal?
30+
31+
7. Persistentie:
32+
- Gebruik je eigen DB (Postgres / Mongo / enz.) of alles via externe API?
33+
34+
8. Events / notificaties:
35+
- Moeten events worden gepubliceerd bij create/update/delete? Zo ja: waarheen?
36+
37+
9. Extra wensen / acties:
38+
- Speciale acties (restart, failover, backup) of read-only velden?
39+
40+
Voorbeeldantwoord (kort):
41+
- Dienst: "Managed Postgres clusters"
42+
- Resources: `servers`, `databases`, `backups`
43+
- API: `https://api.acme.com/v1`, auth: Bearer
44+
- Provisioning: async, 3-5 minuten
45+
- Uniciteit: per subscription
46+
47+
Voeg concrete voorbeeldrequests/responses toe voor snellere scaffolding.

.github/prompts/wrap_api.prompt.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
agent: agent
3+
---
4+
# Bestaande API Wrappen — Prompt
5+
6+
Gebruik deze prompt wanneer je een bestaande REST API wilt ontsluiten als ITL Provider.
7+
8+
1. OpenAPI / Docs URL (of korte endpoint-lijst):
9+
10+
2. Authenticatie:
11+
- Type: API key / OAuth2 / Basic
12+
- Hoe verkrijgt de provider de credentials?
13+
14+
3. Belangrijke endpoints (voor elke resource):
15+
- POST /path (create)
16+
- GET /path/{id} (get)
17+
- GET /path (list)
18+
- DELETE /path/{id} (delete)
19+
- Overige acties (POST /path/{id}/action)
20+
21+
4. Voorbeelden:
22+
- Voorbeeld create request (JSON)
23+
- Voorbeeld create response (JSON)
24+
25+
5. Foutafhandeling:
26+
- Welke statuscodes en foutpayloads geeft de API terug?
27+
28+
6. Provisioning-tijd:
29+
- Direct (sync) of langdurig (async)? Hoe lang?
30+
31+
7. Rate limits / throttling:
32+
- Zijn er limieten of retry-richtlijnen?
33+
34+
8. Security / netwerkroutes:
35+
- Zijn er IP-allowlists, private endpoints of mTLS vereisten?
36+
37+
Voorbeeld kort antwoord:
38+
- Base URL: `https://api.example.com/v2`
39+
- Auth: API key in header `X-Api-Key`
40+
- Endpoints: `POST /clusters`, `GET /clusters/{id}`
41+
- Provisioning: async, 2-10 minuten
42+
43+
Bij voorkeur: voeg een OpenAPI-spec mee of kort JSON-voorbeeld.

0 commit comments

Comments
 (0)