feat: consult Approvisionnement

One entry in the registry and a realm grant, which was the claim the design made
about adding a specialist. Nothing in the graph changed.

What the two specialists have in common, from the orchestrator's side, is
nothing: one is PydanticAI over MCP, the other n8n workflows behind an adapter.
It cannot tell them apart, which is what the protocol is for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Stéphane Tailland
2026-08-29 13:26:54 +02:00
parent ebf864f7ba
commit 3c44cc63ea
4 changed files with 22 additions and 6 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ spec:
# gitea's own registry: the image sits beside the source it was built # gitea's own registry: the image sits beside the source it was built
# from and inherits the repo's public visibility, so the pull needs no # from and inherits the repo's public visibility, so the pull needs no
# credentials at all. # credentials at all.
image: gitea.sttlab.eu/stt/classic-models-agent-assistant:v0.1.0 image: gitea.sttlab.eu/stt/classic-models-agent-assistant:v0.2.0
ports: ports:
- name: http - name: http
containerPort: 8080 containerPort: 8080
+1 -1
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "assistant-agent" name = "assistant-agent"
version = "0.1.0" version = "0.2.0"
description = "Assistant — the orchestrating agent for the classic-models estate" description = "Assistant — the orchestrating agent for the classic-models estate"
readme = "README.md" readme = "README.md"
requires-python = ">=3.12" requires-python = ">=3.12"
+20 -4
View File
@@ -50,10 +50,26 @@ CATALOGUE = Specialist(
) )
#: Everything the design foresees, minus what is not built. Ventes, Support, APPROVISIONNEMENT = Specialist(
#: Approvisionnement and Recouvrement belong here as they arrive; the graph name="approvisionnement",
#: needs no change for them, only this list and a realm grant. url="http://approvisionnement-agent.agents.svc.cluster.local:8080/",
SPECIALISTS: tuple[Specialist, ...] = (CATALOGUE,) audience_scope="classic-models-agent-approvisionnement-audience",
serves="supply: whether a reference can be promised, from stock on hand",
decides=(
"whether a product can be promised to a customer, and why not when it cannot",
"whether a reference is close to needing a reorder",
),
)
#: Everything the design foresees, minus what is not built. Ventes, Support and
#: Recouvrement belong here as they arrive; the graph needs no change for them,
#: only this list and a realm grant.
#:
#: Note what these two have in common from here: nothing. One is PydanticAI over
#: MCP, the other n8n behind an adapter. The orchestrator cannot tell, and that
#: is the point of the protocol.
SPECIALISTS: tuple[Specialist, ...] = (CATALOGUE, APPROVISIONNEMENT)
def by_name(name: str) -> Specialist | None: def by_name(name: str) -> Specialist | None: